diff --git a/client/galaxy/scripts/apps/panels/admin-panel.js b/client/galaxy/scripts/apps/panels/admin-panel.js index b806b0621672..432e6369b48c 100644 --- a/client/galaxy/scripts/apps/panels/admin-panel.js +++ b/client/galaxy/scripts/apps/panels/admin-panel.js @@ -24,10 +24,6 @@ var AdminPanel = Backbone.View.extend({ title: "Data tables", url: "admin/view_tool_data_tables" }, - { - title: "Data libraries", - url: "library_admin/browse_libraries" - }, { title: "Display applications", url: "admin/display_applications" diff --git a/config/galaxy.ini.sample b/config/galaxy.ini.sample index b7b519c062fc..ec49e56fb81d 100644 --- a/config/galaxy.ini.sample +++ b/config/galaxy.ini.sample @@ -951,19 +951,6 @@ use_interactive = True # communicate with this manager over the port specified here. #transfer_manager_port = 8163 -# Search data libraries with whoosh -#enable_whoosh_library_search = True -# Whoosh indexes are stored in this directory. -#whoosh_index_dir = database/whoosh_indexes - -# Search data libraries with lucene -#enable_lucene_library_search = False -# maximum file size to index for searching, in MB -#fulltext_max_size = 500 -#fulltext_noindex_filetypes = bam,sam,wig,bigwig,fasta,fastq,fastqsolexa,fastqillumina,fastqsanger -# base URL of server providing search functionality using lucene -#fulltext_url = http://localhost:8081 - # -- Toolbox Search # The following boosts are used to customize this instance's toolbox search. diff --git a/lib/galaxy/actions/library.py b/lib/galaxy/actions/library.py new file mode 100644 index 000000000000..84f7e5d54763 --- /dev/null +++ b/lib/galaxy/actions/library.py @@ -0,0 +1,264 @@ +""" +Contains library functions +""" +import json +import logging +import os.path +from markupsafe import escape +from galaxy import util +from galaxy.tools.actions import upload_common +from galaxy.tools.parameters import populate_state +from galaxy.util.path import ( + safe_contains, + safe_relpath, + unsafe_walk +) + +log = logging.getLogger(__name__) + + +class LibraryActions(object): + """ + Mixin for controllers that provide library functionality. + """ + + def _upload_dataset(self, trans, library_id, folder_id, replace_dataset=None, **kwd): + # Set up the traditional tool state/params + cntrller = 'api' + tool_id = 'upload1' + message = None + tool = trans.app.toolbox.get_tool(tool_id) + state = tool.new_state(trans) + populate_state(trans, tool.inputs, kwd, state.inputs) + tool_params = state.inputs + dataset_upload_inputs = [] + for input_name, input in tool.inputs.items(): + if input.type == "upload_dataset": + dataset_upload_inputs.append(input) + # Library-specific params + server_dir = kwd.get('server_dir', '') + upload_option = kwd.get('upload_option', 'upload_file') + response_code = 200 + if upload_option == 'upload_directory': + if server_dir in [None, 'None', '']: + response_code = 400 + if trans.user_is_admin(): + import_dir = trans.app.config.library_import_dir + import_dir_desc = 'library_import_dir' + else: + import_dir = trans.app.config.user_library_import_dir + if server_dir != trans.user.email: + import_dir = os.path.join(import_dir, trans.user.email) + import_dir_desc = 'user_library_import_dir' + full_dir = os.path.join(import_dir, server_dir) + unsafe = None + if safe_relpath(server_dir): + if import_dir_desc == 'user_library_import_dir' and safe_contains(import_dir, full_dir, whitelist=trans.app.config.user_library_import_symlink_whitelist): + for unsafe in unsafe_walk(full_dir, whitelist=[import_dir] + trans.app.config.user_library_import_symlink_whitelist): + log.error('User attempted to import a path that resolves to a path outside of their import dir: %s -> %s', unsafe, os.path.realpath(unsafe)) + else: + log.error('User attempted to import a directory path that resolves to a path outside of their import dir: %s -> %s', server_dir, os.path.realpath(full_dir)) + unsafe = True + if unsafe: + response_code = 403 + message = 'Invalid server_dir' + if import_dir: + message = 'Select a directory' + else: + response_code = 403 + message = '"%s" is not defined in the Galaxy configuration file' % import_dir_desc + elif upload_option == 'upload_paths': + if not trans.app.config.allow_library_path_paste: + response_code = 403 + message = '"allow_library_path_paste" is not defined in the Galaxy configuration file' + # Some error handling should be added to this method. + try: + # FIXME: instead of passing params here ( which have been processed by util.Params(), the original kwd + # should be passed so that complex objects that may have been included in the initial request remain. + library_bunch = upload_common.handle_library_params(trans, kwd, folder_id, replace_dataset) + except Exception: + response_code = 500 + message = "Unable to parse upload parameters, please report this error." + # Proceed with (mostly) regular upload processing if we're still errorless + if response_code == 200: + precreated_datasets = upload_common.get_precreated_datasets(trans, tool_params, trans.app.model.LibraryDatasetDatasetAssociation, controller=cntrller) + if upload_option == 'upload_file': + tool_params = upload_common.persist_uploads(tool_params, trans) + uploaded_datasets = upload_common.get_uploaded_datasets(trans, cntrller, tool_params, precreated_datasets, dataset_upload_inputs, library_bunch=library_bunch) + elif upload_option == 'upload_directory': + uploaded_datasets, response_code, message = self._get_server_dir_uploaded_datasets(trans, kwd, full_dir, import_dir_desc, library_bunch, response_code, message) + elif upload_option == 'upload_paths': + uploaded_datasets, response_code, message = self._get_path_paste_uploaded_datasets(trans, kwd, library_bunch, response_code, message) + upload_common.cleanup_unused_precreated_datasets(precreated_datasets) + if upload_option == 'upload_file' and not uploaded_datasets: + response_code = 400 + message = 'Select a file, enter a URL or enter text' + if response_code != 200: + return (response_code, message) + json_file_path = upload_common.create_paramfile(trans, uploaded_datasets) + data_list = [ud.data for ud in uploaded_datasets] + job_params = {} + job_params['link_data_only'] = json.dumps(kwd.get('link_data_only', 'copy_files')) + job_params['uuid'] = json.dumps(kwd.get('uuid', None)) + job, output = upload_common.create_job(trans, tool_params, tool, json_file_path, data_list, folder=library_bunch.folder, job_params=job_params) + trans.sa_session.add(job) + trans.sa_session.flush() + return output + + def _get_server_dir_uploaded_datasets(self, trans, params, full_dir, import_dir_desc, library_bunch, response_code, message): + dir_response = self._get_server_dir_files(params, full_dir, import_dir_desc) + files = dir_response[0] + if not files: + return dir_response + uploaded_datasets = [] + for file in files: + name = os.path.basename(file) + uploaded_datasets.append(self._make_library_uploaded_dataset(trans, params, name, file, 'server_dir', library_bunch)) + return uploaded_datasets, 200, None + + def _get_path_paste_uploaded_datasets(self, trans, params, library_bunch, response_code, message): + preserve_dirs = util.string_as_bool(params.get('preserve_dirs', False)) + uploaded_datasets = [] + (files_and_folders, _response_code, _message) = self._get_path_files_and_folders(params, preserve_dirs) + if _response_code: + return (uploaded_datasets, _response_code, _message) + for (path, name, folder) in files_and_folders: + uploaded_datasets.append(self._make_library_uploaded_dataset(trans, params, name, path, 'path_paste', library_bunch, folder)) + return uploaded_datasets, 200, None + + def _get_path_files_and_folders(self, params, preserve_dirs): + problem_response = self._check_path_paste_params(params) + if problem_response: + return problem_response + files_and_folders = [] + for (line, path) in self._paths_list(params): + line_files_and_folders = self._get_single_path_files_and_folders(line, path, preserve_dirs) + files_and_folders.extend(line_files_and_folders) + return files_and_folders, None, None + + def _get_single_path_files_and_folders(self, line, path, preserve_dirs): + files_and_folders = [] + if os.path.isfile(path): + name = os.path.basename(path) + files_and_folders.append((path, name, None)) + for basedir, dirs, files in os.walk(line): + for file in files: + file_path = os.path.abspath(os.path.join(basedir, file)) + if preserve_dirs: + in_folder = os.path.dirname(file_path.replace(path, '', 1).lstrip('/')) + else: + in_folder = None + files_and_folders.append((file_path, file, in_folder)) + return files_and_folders + + def _paths_list(self, params): + return [(l.strip(), os.path.abspath(l.strip())) for l in params.get('filesystem_paths', '').splitlines() if l.strip()] + + def _check_path_paste_params(self, params): + if params.get('filesystem_paths', '') == '': + message = "No paths entered in the upload form" + response_code = 400 + return None, response_code, message + bad_paths = [] + for (_, path) in self._paths_list(params): + if not os.path.exists(path): + bad_paths.append(path) + if bad_paths: + message = 'Invalid paths: "%s".' % '", "'.join(bad_paths) + response_code = 400 + return None, response_code, message + return None + + def _make_library_uploaded_dataset(self, trans, params, name, path, type, library_bunch, in_folder=None): + link_data_only = params.get('link_data_only', 'copy_files') + uuid_str = params.get('uuid', None) + file_type = params.get('file_type', None) + library_bunch.replace_dataset = None # not valid for these types of upload + uploaded_dataset = util.bunch.Bunch() + new_name = name + # Remove compressed file extensions, if any, but only if + # we're copying files into Galaxy's file space. + if link_data_only == 'copy_files': + if new_name.endswith('.gz'): + new_name = new_name.rstrip('.gz') + elif new_name.endswith('.zip'): + new_name = new_name.rstrip('.zip') + uploaded_dataset.name = new_name + uploaded_dataset.path = path + uploaded_dataset.type = type + uploaded_dataset.ext = None + uploaded_dataset.file_type = file_type + uploaded_dataset.dbkey = params.get('dbkey', None) + uploaded_dataset.to_posix_lines = params.get('to_posix_lines', None) + uploaded_dataset.space_to_tab = params.get('space_to_tab', None) + uploaded_dataset.tag_using_filenames = params.get('tag_using_filenames', True) + if in_folder: + uploaded_dataset.in_folder = in_folder + uploaded_dataset.data = upload_common.new_upload(trans, 'api', uploaded_dataset, library_bunch) + uploaded_dataset.link_data_only = link_data_only + uploaded_dataset.uuid = uuid_str + if link_data_only == 'link_to_files': + uploaded_dataset.data.file_name = os.path.abspath(path) + # Since we are not copying the file into Galaxy's managed + # default file location, the dataset should never be purgable. + uploaded_dataset.data.dataset.purgable = False + trans.sa_session.add_all((uploaded_dataset.data, uploaded_dataset.data.dataset)) + trans.sa_session.flush() + return uploaded_dataset + + def _create_folder(self, trans, parent_id, library_id, **kwd): + is_admin = trans.user_is_admin() + current_user_roles = trans.get_current_user_roles() + try: + parent_folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(parent_id)) + except Exception: + parent_folder = None + # Check the library which actually contains the user-supplied parent folder, not the user-supplied + # library, which could be anything. + self._check_access(trans, is_admin, parent_folder, current_user_roles) + self._check_add(trans, is_admin, parent_folder, current_user_roles) + new_folder = trans.app.model.LibraryFolder(name=kwd.get('name', ''), + description=kwd.get('description', '')) + # We are associating the last used genome build with folders, so we will always + # initialize a new folder with the first dbkey in genome builds list which is currently + # ? unspecified (?) + new_folder.genome_build = trans.app.genome_builds.default_value + parent_folder.add_folder(new_folder) + trans.sa_session.add(new_folder) + trans.sa_session.flush() + # New folders default to having the same permissions as their parent folder + trans.app.security_agent.copy_library_permissions(trans, parent_folder, new_folder) + return 200, dict(created=new_folder) + + def _check_access(self, trans, is_admin, item, current_user_roles): + can_access = True + if isinstance(item, trans.model.HistoryDatasetAssociation): + # Make sure the user has the DATASET_ACCESS permission on the history_dataset_association. + if not item: + message = "Invalid history dataset (%s) specified." % escape(str(item)) + can_access = False + elif not trans.app.security_agent.can_access_dataset(current_user_roles, item.dataset) and item.history.user == trans.user: + message = "You do not have permission to access the history dataset with id (%s)." % str(item.id) + can_access = False + else: + # Make sure the user has the LIBRARY_ACCESS permission on the library item. + if not item: + message = "Invalid library item (%s) specified." % escape(str(item)) + can_access = False + elif not (is_admin or trans.app.security_agent.can_access_library_item(current_user_roles, item, trans.user)): + if isinstance(item, trans.model.Library): + item_type = 'data library' + elif isinstance(item, trans.model.LibraryFolder): + item_type = 'folder' + else: + item_type = '(unknown item type)' + message = "You do not have permission to access the %s with id (%s)." % (escape(item_type), str(item.id)) + can_access = False + if not can_access: + return 400, message + + def _check_add(self, trans, is_admin, item, current_user_roles): + # Deny access if the user is not an admin and does not have the LIBRARY_ADD permission. + if not (is_admin or trans.app.security_agent.can_add_library_item(current_user_roles, item)): + message = "You are not authorized to add an item to (%s)." % escape(item.name) + return 403, message diff --git a/lib/galaxy/config.py b/lib/galaxy/config.py index e8a6ac8e32c9..7ae7a6fb08c4 100644 --- a/lib/galaxy/config.py +++ b/lib/galaxy/config.py @@ -403,9 +403,6 @@ def __init__(self, **kwargs): self.user_library_import_dir = kwargs.get('user_library_import_dir', None) self.user_library_import_symlink_whitelist = listify(kwargs.get('user_library_import_symlink_whitelist', []), do_strip=True) # Searching data libraries - self.enable_lucene_library_search = string_as_bool(kwargs.get('enable_lucene_library_search', False)) - self.enable_whoosh_library_search = string_as_bool(kwargs.get('enable_whoosh_library_search', False)) - self.whoosh_index_dir = resolve_path(kwargs.get("whoosh_index_dir", "database/whoosh_indexes"), self.root) self.ftp_upload_dir = kwargs.get('ftp_upload_dir', None) self.ftp_upload_dir_identifier = kwargs.get('ftp_upload_dir_identifier', 'email') # attribute on user - email, username, id, etc... self.ftp_upload_dir_template = kwargs.get('ftp_upload_dir_template', '${ftp_upload_dir}%s${ftp_upload_dir_identifier}' % os.path.sep) @@ -759,8 +756,7 @@ def check(self): # Create the directories that it makes sense to create for path in (self.new_file_path, self.template_cache, self.ftp_upload_dir, self.library_import_dir, self.user_library_import_dir, - self.nginx_upload_store, self.whoosh_index_dir, - self.object_store_cache_path): + self.nginx_upload_store, self.object_store_cache_path): self._ensure_directory(path) # Check that required files exist tool_configs = self.tool_configs diff --git a/lib/galaxy/webapps/galaxy/api/library_contents.py b/lib/galaxy/webapps/galaxy/api/library_contents.py index 56dc0e681ec4..7e7a9582f5f8 100644 --- a/lib/galaxy/webapps/galaxy/api/library_contents.py +++ b/lib/galaxy/webapps/galaxy/api/library_contents.py @@ -2,18 +2,17 @@ API operations on the contents of a data library. """ import logging - from sqlalchemy.orm.exc import ( MultipleResultsFound, NoResultFound, ) - from galaxy import ( exceptions, managers, util, web ) +from galaxy.actions.library import LibraryActions from galaxy.managers.collections_util import ( api_payload_to_create_params, dictify_dataset_collection_instance @@ -27,14 +26,18 @@ BaseAPIController, HTTPBadRequest, url_for, + UsesFormDefinitionsMixin, UsesLibraryMixin, UsesLibraryMixinItems ) - +from galaxy.web.form_builder import ( + AddressField, + CheckboxField, +) log = logging.getLogger(__name__) -class LibraryContentsController(BaseAPIController, UsesLibraryMixin, UsesLibraryMixinItems): +class LibraryContentsController(BaseAPIController, UsesLibraryMixin, UsesLibraryMixinItems, UsesFormDefinitionsMixin, LibraryActions): def __init__(self, app): super(LibraryContentsController, self).__init__(app) @@ -140,7 +143,7 @@ def show(self, trans, id, library_id, **kwd): :func:`galaxy.model.LibraryDataset.to_dict` and :attr:`galaxy.model.LibraryFolder.dict_element_visible_keys` """ - class_name, content_id = self.__decode_library_content_id(id) + class_name, content_id = self._decode_library_content_id(id) if class_name == 'LibraryFolder': content = self.get_library_folder(trans, content_id, check_ownership=False, check_accessible=True) rval = content.to_dict(view='element', value_mapper={'id': trans.security.encode_id}) @@ -220,7 +223,7 @@ def create(self, trans, library_id, payload, **kwd): return "Missing required 'folder_id' parameter." else: folder_id = payload.pop('folder_id') - class_name, folder_id = self.__decode_library_content_id(folder_id) + class_name, folder_id = self._decode_library_content_id(folder_id) try: # security is checked in the downstream controller parent = self.get_library_folder(trans, folder_id, check_ownership=False, check_accessible=False) @@ -244,9 +247,9 @@ def create(self, trans, library_id, payload, **kwd): # Now create the desired content object, either file or folder. if create_type == 'file': - status, output = trans.webapp.controllers['library_common'].upload_library_dataset(trans, 'api', library_id, real_folder_id, **payload) + status, output = self._upload_library_dataset(trans, library_id, real_folder_id, **payload) elif create_type == 'folder': - status, output = trans.webapp.controllers['library_common'].create_folder(trans, 'api', real_folder_id, library_id, **payload) + status, output = self._create_folder(trans, real_folder_id, library_id, **payload) elif create_type == 'collection': # Not delegating to library_common, so need to check access to parent # folder here. @@ -283,6 +286,121 @@ def create(self, trans, library_id, payload, **kwd): url=url_for('library_content', library_id=library_id, id=encoded_id))) return rval + def _upload_library_dataset(self, trans, library_id, folder_id, **kwd): + replace_id = kwd.get('replace_id', None) + replace_dataset = None + upload_option = kwd.get('upload_option', 'upload_file') + dbkey = kwd.get('dbkey', '?') + if isinstance(dbkey, list): + last_used_build = dbkey[0] + else: + last_used_build = dbkey + roles = kwd.get('roles', '') + is_admin = trans.user_is_admin() + current_user_roles = trans.get_current_user_roles() + widgets = [] + info_association, inherited = None, None + template_id = "None" + if replace_id not in ['', None, 'None']: + replace_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(replace_id)) + self._check_access(trans, is_admin, replace_dataset, current_user_roles) + self._check_modify(trans, is_admin, replace_dataset, current_user_roles) + library = replace_dataset.folder.parent_library + folder = replace_dataset.folder + info_association, inherited = replace_dataset.library_dataset_dataset_association.get_info_association() + if info_association and (not(inherited) or info_association.inheritable): + widgets = replace_dataset.library_dataset_dataset_association.get_template_widgets(trans) + # The name is stored - by the time the new ldda is created, replace_dataset.name + # will point to the new ldda, not the one it's replacing. + if not last_used_build: + last_used_build = replace_dataset.library_dataset_dataset_association.dbkey + else: + folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(folder_id)) + self._check_access(trans, is_admin, folder, current_user_roles) + self._check_add(trans, is_admin, folder, current_user_roles) + library = folder.parent_library + if folder and last_used_build in ['None', None, '?']: + last_used_build = folder.genome_build + error = False + if upload_option == 'upload_paths' and not trans.app.config.allow_library_path_paste: + error = True + message = '"allow_library_path_paste" is not defined in the Galaxy configuration file' + elif upload_option == 'upload_paths' and not is_admin: + error = True + message = 'Uploading files via filesystem paths can only be performed by administrators' + elif upload_option not in ('upload_file', 'upload_directory', 'upload_paths'): + error = True + message = 'Invalid upload_option' + elif roles: + # Check to see if the user selected roles to associate with the DATASET_ACCESS permission + # on the dataset that would cause accessibility issues. + vars = dict(DATASET_ACCESS_in=roles) + permissions, in_roles, error, message = \ + trans.app.security_agent.derive_roles_from_access(trans, library.id, 'api', library=True, **vars) + if error: + return 400, message + else: + # See if we have any inherited templates. + if not info_association: + info_association, inherited = folder.get_info_association(inherited=True) + if info_association and info_association.inheritable: + template_id = str(info_association.template.id) + widgets = folder.get_template_widgets(trans, get_contents=True) + processed_widgets = [] + # The list of widgets may include an AddressField which we need to save if it is new + for index, widget_dict in enumerate(widgets): + widget = widget_dict['widget'] + if isinstance(widget, AddressField): + value = kwd.get(widget.name, '') + if value == 'new': + if self.field_param_values_ok(widget.name, 'AddressField', **kwd): + # Save the new address + address = trans.app.model.UserAddress(user=trans.user) + self.save_widget_field(trans, address, widget.name, **kwd) + widget.value = str(address.id) + widget_dict['widget'] = widget + processed_widgets.append(widget_dict) + # It is now critical to update the value of 'field_%i', replacing the string + # 'new' with the new address id. This is necessary because the upload_dataset() + # method below calls the handle_library_params() method, which does not parse the + # widget fields, it instead pulls form values from kwd. See the FIXME comments in the + # handle_library_params() method, and the CheckboxField code in the next conditional. + kwd[widget.name] = str(address.id) + else: + # The invalid address won't be saved, but we cannot display error + # messages on the upload form due to the ajax upload already occurring. + # When we re-engineer the upload process ( currently under way ), we + # will be able to check the form values before the ajax upload occurs + # in the background. For now, we'll do nothing... + pass + elif isinstance(widget, CheckboxField): + # We need to check the value from kwd since util.Params would have munged the list if + # the checkbox is checked. + value = kwd.get(widget.name, '') + if CheckboxField.is_checked(value): + widget.value = 'true' + widget_dict['widget'] = widget + processed_widgets.append(widget_dict) + kwd[widget.name] = 'true' + else: + processed_widgets.append(widget_dict) + widgets = processed_widgets + created_outputs_dict = self._upload_dataset(trans, + library_id=trans.security.encode_id(library.id), + folder_id=trans.security.encode_id(folder.id), + template_id=template_id, + widgets=widgets, + replace_dataset=replace_dataset, + **kwd) + if created_outputs_dict: + if type(created_outputs_dict) == str: + return 400, created_outputs_dict + elif type(created_outputs_dict) == tuple: + return created_outputs_dict[0], created_outputs_dict[1] + return 200, created_outputs_dict + else: + return 400, "Upload failed" + def _scan_json_block(self, meta, prefix=""): """ Scan a json style data structure, and emit all fields and their values. @@ -340,7 +458,7 @@ def update(self, trans, id, library_id, payload, **kwd): trans.sa_session.add(assoc) trans.sa_session.flush() - def __decode_library_content_id(self, content_id): + def _decode_library_content_id(self, content_id): if len(content_id) % 16 == 0: return 'LibraryDataset', content_id elif content_id.startswith('F'): diff --git a/lib/galaxy/webapps/galaxy/api/library_datasets.py b/lib/galaxy/webapps/galaxy/api/library_datasets.py index b4970a1aee3d..0db4cd71ff6e 100644 --- a/lib/galaxy/webapps/galaxy/api/library_datasets.py +++ b/lib/galaxy/webapps/galaxy/api/library_datasets.py @@ -15,6 +15,7 @@ util, web ) +from galaxy.actions.library import LibraryActions from galaxy.exceptions import ObjectNotFound from galaxy.managers import ( base as managers_base, @@ -31,11 +32,10 @@ _future_expose_api_anonymous as expose_api_anonymous ) from galaxy.web.base.controller import BaseAPIController, UsesVisualizationMixin - log = logging.getLogger(__name__) -class LibraryDatasetsController(BaseAPIController, UsesVisualizationMixin): +class LibraryDatasetsController(BaseAPIController, UsesVisualizationMixin, LibraryActions): def __init__(self, app): super(LibraryDatasetsController, self).__init__(app) @@ -476,12 +476,12 @@ def load(self, trans, payload=None, **kwd): # user wants to import one file only elif source in ["userdir_file", "importdir_file"]: file = os.path.abspath(path) - abspath_datasets.append(trans.webapp.controllers['library_common'].make_library_uploaded_dataset( - trans, 'api', kwd, os.path.basename(file), file, 'server_dir', library_bunch)) + abspath_datasets.append(self._make_library_uploaded_dataset( + trans, kwd, os.path.basename(file), file, 'server_dir', library_bunch)) # user wants to import whole folder elif source == "userdir_folder": - uploaded_datasets_bunch = trans.webapp.controllers['library_common'].get_path_paste_uploaded_datasets( - trans, 'api', kwd, library_bunch, 200, '') + uploaded_datasets_bunch = self._get_path_paste_uploaded_datasets( + trans, kwd, library_bunch, 200, '') uploaded_datasets = uploaded_datasets_bunch[0] if uploaded_datasets is None: raise exceptions.ObjectNotFound('Given folder does not contain any datasets.') @@ -491,8 +491,8 @@ def load(self, trans, payload=None, **kwd): # user wants to import from path if source in ["admin_path", "importdir_folder"]: # validate the path is within root - uploaded_datasets_bunch = trans.webapp.controllers['library_common'].get_path_paste_uploaded_datasets( - trans, 'api', kwd, library_bunch, 200, '') + uploaded_datasets_bunch = self._get_path_paste_uploaded_datasets( + trans, kwd, library_bunch, 200, '') uploaded_datasets = uploaded_datasets_bunch[0] if uploaded_datasets is None: raise exceptions.ObjectNotFound('Given folder does not contain any datasets.') diff --git a/lib/galaxy/webapps/galaxy/controllers/library.py b/lib/galaxy/webapps/galaxy/controllers/library.py index dacb9e8c6bfb..240d5d9cff56 100644 --- a/lib/galaxy/webapps/galaxy/controllers/library.py +++ b/lib/galaxy/webapps/galaxy/controllers/library.py @@ -1,84 +1,13 @@ import logging - -from markupsafe import escape -from sqlalchemy import and_, false, not_, or_ - -from galaxy import model, util from galaxy import web from galaxy.web.base.controller import BaseUIController -from galaxy.web.framework.helpers import grids -from library_common import get_comptypes, lucene_search, whoosh_search log = logging.getLogger(__name__) -class LibraryListGrid(grids.Grid): - - class NameColumn(grids.TextColumn): - def get_value(self, trans, grid, library): - return escape(library.name) - - class DescriptionColumn(grids.TextColumn): - def get_value(self, trans, grid, library): - if library.description: - return escape(library.description) - return '' - - # Grid definition - title = "Data Libraries" - model_class = model.Library - template = '/library/grid.mako' - default_sort_key = "name" - columns = [ - NameColumn("Data library name", - key="name", - link=(lambda library: dict(operation="browse", id=library.id)), - attach_popup=False, - filterable="advanced"), - DescriptionColumn("Data library description", - key="description", - attach_popup=False, - filterable="advanced"), - ] - columns.append(grids.MulticolFilterColumn("search dataset name, info, message, dbkey", - cols_to_filter=[columns[0], columns[1]], - key="free-text-search", - visible=False, - filterable="standard")) - standard_filters = [] - default_filter = dict(name="All", description="All", deleted="False", purged="False") - num_rows_per_page = 50 - preserve_state = False - use_paging = True - - def build_initial_query(self, trans, **kwargs): - return trans.sa_session.query(self.model_class).filter(self.model_class.table.c.deleted == false()) - - def apply_query_filter(self, trans, query, **kwd): - current_user_role_ids = [role.id for role in trans.get_current_user_roles()] - library_access_action = trans.app.security_agent.permitted_actions.LIBRARY_ACCESS.action - restricted_library_ids = [lp.library_id for lp in trans.sa_session.query(trans.model.LibraryPermissions) - .filter(trans.model.LibraryPermissions.table.c.action == library_access_action) - .distinct()] - accessible_restricted_library_ids = [lp.library_id for lp in trans.sa_session.query(trans.model.LibraryPermissions) - .filter(and_(trans.model.LibraryPermissions.table.c.action == library_access_action, - trans.model.LibraryPermissions.table.c.role_id.in_(current_user_role_ids)))] - if not trans.user: - # Filter to get only public libraries, a library whose id - # is not in restricted_library_ids is a public library - return query.filter(not_(trans.model.Library.table.c.id.in_(restricted_library_ids))) - else: - # Filter to get libraries accessible by the current user, get both - # public libraries and restricted libraries accessible by the current user. - return query.filter(or_(not_(trans.model.Library.table.c.id.in_(restricted_library_ids)), - trans.model.Library.table.c.id.in_(accessible_restricted_library_ids))) - - class Library(BaseUIController): - library_list_grid = LibraryListGrid() - @web.expose def list(self, trans, **kwd): # define app configuration for generic mako template @@ -89,54 +18,3 @@ def list(self, trans, **kwd): config={ 'title': 'Data Libraries', 'app': app}) - - @web.expose - @web.require_admin - def index(self, trans, **kwd): - message = escape(kwd.get('message', '')) - status = escape(kwd.get('status', 'done')) - default_action = kwd.get('default_action', None) - return trans.fill_template("/library/index.mako", - default_action=default_action, - message=message, - status=status) - - @web.expose - @web.require_admin - def browse_libraries(self, trans, **kwd): - if 'operation' in kwd: - operation = kwd['operation'].lower() - if operation == "browse": - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller='library', - **kwd)) - if 'f-free-text-search' in kwd: - search_term = kwd["f-free-text-search"] - if trans.app.config.enable_lucene_library_search: - indexed_search_enabled = True - search_url = trans.app.config.config_dict.get("fulltext_url", "") - if search_url: - indexed_search_enabled = True - status, message, lddas = lucene_search(trans, 'library', search_term, search_url, **kwd) - elif trans.app.config.enable_whoosh_library_search: - indexed_search_enabled = True - status, message, lddas = whoosh_search(trans, 'library', search_term, **kwd) - else: - indexed_search_enabled = False - if indexed_search_enabled: - comptypes = get_comptypes(trans) - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - return trans.fill_template('/library/common/library_dataset_search_results.mako', - cntrller='library', - search_term=search_term, - comptypes=comptypes, - lddas=lddas, - current_user_roles=trans.get_current_user_roles(), - show_deleted=show_deleted, - use_panels=use_panels, - message=message, - status=status) - # Render the list view - return self.library_list_grid(trans, **kwd) diff --git a/lib/galaxy/webapps/galaxy/controllers/library_admin.py b/lib/galaxy/webapps/galaxy/controllers/library_admin.py deleted file mode 100644 index 922e0da2cd59..000000000000 --- a/lib/galaxy/webapps/galaxy/controllers/library_admin.py +++ /dev/null @@ -1,247 +0,0 @@ -import logging - -from markupsafe import escape - -import galaxy.model -import galaxy.util -from galaxy import web -from galaxy.web.base.controller import BaseUIController -from galaxy.web.framework.helpers import grids, time_ago -from library_common import get_comptypes, lucene_search, whoosh_search - -log = logging.getLogger(__name__) - - -class LibraryListGrid(grids.Grid): - class NameColumn(grids.TextColumn): - def get_value(self, trans, grid, library): - return escape(library.name) - - class DescriptionColumn(grids.TextColumn): - def get_value(self, trans, grid, library): - if library.description: - return escape(library.description) - return '' - - class StatusColumn(grids.GridColumn): - def get_value(self, trans, grid, library): - if library.purged: - return "purged" - elif library.deleted: - return "deleted" - return "" - # Grid definition - title = "Data Libraries" - model_class = galaxy.model.Library - template = '/admin/library/grid.mako' - default_sort_key = "name" - columns = [ - NameColumn("Data library name", - key="name", - link=(lambda library: dict(operation="browse", id=library.id)), - attach_popup=False, - filterable="advanced"), - DescriptionColumn("Data library description", - key="description", - attach_popup=False, - filterable="advanced"), - grids.GridColumn("Created", key="create_time", format=time_ago), - grids.GridColumn("Last Updated", key="update_time", format=time_ago), - StatusColumn("Status", attach_popup=False), - # Columns that are valid for filtering but are not visible. - grids.DeletedColumn("Deleted", key="deleted", visible=False, filterable="advanced") - ] - columns.append(grids.MulticolFilterColumn("search dataset name, info, message, dbkey", - cols_to_filter=[columns[0], columns[1]], - key="free-text-search", - visible=False, - filterable="standard")) - global_actions = [ - grids.GridAction("Create new data library", dict(controller='library_admin', action='create_library')) - ] - standard_filters = [ - grids.GridColumnFilter("Active", args=dict(deleted=False)), - grids.GridColumnFilter("Deleted", args=dict(deleted=True, purged=False)), - grids.GridColumnFilter("Purged", args=dict(purged=True)), - grids.GridColumnFilter("All", args=dict(deleted='All')) - ] - default_filter = dict(name="All", description="All", deleted="False", purged="False") - num_rows_per_page = 50 - preserve_state = False - use_paging = True - - -class LibraryAdmin(BaseUIController): - - library_list_grid = LibraryListGrid() - - @web.expose - @web.require_admin - def browse_libraries(self, trans, **kwd): - if 'operation' in kwd: - operation = kwd['operation'].lower() - if operation == "browse": - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller='library_admin', - **kwd)) - elif operation == "delete": - return self.delete_library(trans, **kwd) - elif operation == "undelete": - return self.undelete_library(trans, **kwd) - self.library_list_grid.operations = [] - if 'f-deleted' in kwd: - if kwd['f-deleted'] != 'All': - if galaxy.util.string_as_bool(kwd['f-deleted']): - # We're viewing deleted data libraries, so add a GridOperation - # enabling one or more of them to be undeleted. - self.library_list_grid.operations = [ - grids.GridOperation("Undelete", - condition=(lambda item: item.deleted), - allow_multiple=True, - allow_popup=False, - url_args=dict(webapp="galaxy")) - ] - else: - # We're viewing active data libraries, so add a GridOperation - # enabling one or more of them to be deleted. - self.library_list_grid.operations = [ - grids.GridOperation("Delete", - condition=(lambda item: not item.deleted), - allow_multiple=True, - allow_popup=False, - url_args=dict(webapp="galaxy")) - ] - else: - # We're viewing active data libraries, so add a GridOperation - # enabling one or more of them to be deleted. - self.library_list_grid.operations = [ - grids.GridOperation("Delete", - condition=(lambda item: not item.deleted), - allow_multiple=True, - allow_popup=False, - url_args=dict(webapp="galaxy")) - ] - if 'f-free-text-search' in kwd: - search_term = kwd["f-free-text-search"] - if trans.app.config.enable_lucene_library_search: - indexed_search_enabled = True - search_url = trans.app.config.config_dict.get("fulltext_find_url", "") - if search_url: - status, message, lddas = lucene_search(trans, 'library_admin', search_term, search_url, **kwd) - elif trans.app.config.enable_whoosh_library_search: - indexed_search_enabled = True - status, message, lddas = whoosh_search(trans, 'library_admin', search_term, **kwd) - else: - indexed_search_enabled = False - if indexed_search_enabled: - comptypes = get_comptypes(trans) - show_deleted = galaxy.util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = galaxy.util.string_as_bool(kwd.get('use_panels', False)) - return trans.fill_template('/library/common/library_dataset_search_results.mako', - cntrller='library_admin', - search_term=search_term, - comptypes=comptypes, - lddas=lddas, - show_deleted=show_deleted, - use_panels=use_panels, - message=escape(message), - status=escape(status)) - # Render the list view - return self.library_list_grid(trans, **kwd) - - @web.expose - @web.require_admin - def create_library(self, trans, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - if kwd.get('create_library_button', False): - name = kwd.get('name', 'No name') - description = kwd.get('description', '') - synopsis = kwd.get('synopsis', '') - if synopsis in ['None', None]: - synopsis = '' - library = trans.app.model.Library(name=name, description=description, synopsis=synopsis) - root_folder = trans.app.model.LibraryFolder(name=name, description='') - library.root_folder = root_folder - trans.sa_session.add_all((library, root_folder)) - trans.sa_session.flush() - message = "The new library named '%s' has been created" % escape(library.name) - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller='library_admin', - id=trans.security.encode_id(library.id), - message=message, - status='done')) - return trans.fill_template('/admin/library/new_library.mako', message=message, status=escape(status)) - - @web.expose - @web.require_admin - def delete_library(self, trans, id, **kwd): - # Used by the Delete grid operation in the LibrarylistGrid. - return trans.response.send_redirect(web.url_for(controller='library_common', - action='delete_library_item', - cntrller='library_admin', - library_id=id, - item_id=id, - item_type='library')) - - @web.expose - @web.require_admin - def undelete_library(self, trans, id, **kwd): - # Used by the Undelete grid operation in the LibrarylistGrid. - return trans.response.send_redirect(web.url_for(controller='library_common', - action='undelete_library_item', - cntrller='library_admin', - library_id=id, - item_id=id, - item_type='library')) - - @web.expose - @web.require_admin - def purge_library(self, trans, **kwd): - # TODO: change this function to purge_library_item, behaving similar to delete_library_item - # assuming we want the ability to purge libraries. - # This function is currently only used by the functional tests. - library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(kwd.get('id'))) - - def purge_folder(library_folder): - for lf in library_folder.folders: - purge_folder(lf) - trans.sa_session.refresh(library_folder) - for library_dataset in library_folder.datasets: - trans.sa_session.refresh(library_dataset) - ldda = library_dataset.library_dataset_dataset_association - if ldda: - trans.sa_session.refresh(ldda) - dataset = ldda.dataset - trans.sa_session.refresh(dataset) - # If the dataset is not associated with any additional undeleted folders, then we can delete it. - # We don't set dataset.purged to True here because the cleanup_datasets script will do that for - # us, as well as removing the file from disk. - # if not dataset.deleted and len( dataset.active_library_associations ) <= 1: # This is our current ldda - dataset.deleted = True - ldda.deleted = True - trans.sa_session.add_all((dataset, ldda)) - library_dataset.deleted = True - trans.sa_session.add(library_dataset) - library_folder.deleted = True - library_folder.purged = True - trans.sa_session.add(library_folder) - trans.sa_session.flush() - if not library.deleted: - message = "Library '%s' has not been marked deleted, so it cannot be purged" % escape(library.name) - return trans.response.send_redirect(web.url_for(controller='library_admin', - action='browse_libraries', - message=message, - status='error')) - else: - purge_folder(library.root_folder) - library.purged = True - trans.sa_session.add(library) - trans.sa_session.flush() - message = "Library '%s' and all of its contents have been purged, datasets will be removed from disk via the cleanup_datasets script" % escape(library.name) - return trans.response.send_redirect(web.url_for(controller='library_admin', - action='browse_libraries', - message=message, - status='done')) diff --git a/lib/galaxy/webapps/galaxy/controllers/library_common.py b/lib/galaxy/webapps/galaxy/controllers/library_common.py deleted file mode 100644 index c977f3196003..000000000000 --- a/lib/galaxy/webapps/galaxy/controllers/library_common.py +++ /dev/null @@ -1,2857 +0,0 @@ -from __future__ import absolute_import - -import glob -import json -import logging -import os -import os.path -import string -import sys -import tarfile -import tempfile -import zipfile - -import requests -from markupsafe import escape -from six.moves.urllib.parse import quote_plus, urlencode -from sqlalchemy import and_, false -from sqlalchemy.orm import eagerload_all - -from galaxy import util, web -from galaxy.security import Action -from galaxy.tools.actions import upload_common -from galaxy.tools.parameters import populate_state -from galaxy.util import ( - FILENAME_VALID_CHARS, - inflector, - unicodify -) -from galaxy.util.path import ( - safe_contains, - safe_relpath, - unsafe_walk -) -from galaxy.util.streamball import StreamBall -from galaxy.web.base.controller import ( - BaseUIController, - UsesExtendedMetadataMixin, - UsesFormDefinitionsMixin, - UsesLibraryMixinItems -) -from galaxy.web.form_builder import ( - AddressField, - build_select_field, - CheckboxField, - SelectField, -) - -# Whoosh is compatible with Python 2.5+ Try to import Whoosh and set flag to indicate whether tool search is enabled. -try: - import whoosh.index - from whoosh.fields import Schema, STORED, TEXT - from whoosh.scoring import BM25F - from whoosh.qparser import MultifieldParser - whoosh_search_enabled = True - # The following must be defined exactly like the - # schema in ~/scripts/data_libraries/build_whoosh_index.py - schema = Schema(id=STORED, name=TEXT, info=TEXT, dbkey=TEXT, message=TEXT) -except ImportError as e: - whoosh_search_enabled = False - schema = None - -log = logging.getLogger(__name__) - -# Test for available compression types -tmpd = tempfile.mkdtemp() -comptypes = [] -for comptype in ('gz', 'bz2'): - tmpf = os.path.join(tmpd, 'compression_test.tar.' + comptype) - try: - archive = tarfile.open(tmpf, 'w:' + comptype) - archive.close() - comptypes.append(comptype) - except tarfile.CompressionError: - log.exception("Compression error when testing %s compression. This option will be disabled for library downloads.", comptype) - try: - os.unlink(tmpf) - except OSError: - pass -try: - import zlib # noqa: F401 - comptypes.append('zip') -except ImportError: - pass - -try: - os.rmdir(tmpd) -except Exception: - pass - - -class LibraryCommon(BaseUIController, UsesFormDefinitionsMixin, UsesExtendedMetadataMixin, UsesLibraryMixinItems): - @web.json - @web.require_admin - def library_item_updates(self, trans, ids=None, states=None): - # Avoid caching - trans.response.headers['Pragma'] = 'no-cache' - trans.response.headers['Expires'] = '0' - # Create new HTML for any that have changed - rval = {} - if ids is not None and states is not None: - ids = map(int, ids.split(",")) - states = states.split(",") - for id, state in zip(ids, states): - data = trans.sa_session.query(self.app.model.LibraryDatasetDatasetAssociation).get(id) - if data.state != state: - job_ldda = data - while job_ldda.copied_from_library_dataset_dataset_association: - job_ldda = job_ldda.copied_from_library_dataset_dataset_association - rval[id] = { - "state": data.state, - "html": unicodify(trans.fill_template("library/common/library_item_info.mako", ldda=data), 'utf-8') - # "force_history_refresh": force_history_refresh - } - return rval - - @web.expose - @web.require_admin - def browse_library(self, trans, cntrller='library', **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - # If use_panels is True, the library is being accessed via an external link - # which did not originate from within the Galaxy instance, and the library will - # be displayed correctly with the mast head. - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - library_id = kwd.get('id', None) - if not library_id: - # To handle bots - message = "You must specify a library id." - status = 'error' - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)) - except Exception: - # Protect against attempts to phish for valid keys that return libraries - library = None - # Most security for browsing libraries is handled in the template, but do a basic check here. - if not library or not (is_admin or trans.app.security_agent.can_access_library(current_user_roles, library)): - message = "Invalid library id ( %s ) specified." % str(library_id) - status = 'error' - else: - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - created_ldda_ids = kwd.get('created_ldda_ids', '') - hidden_folder_ids = util.listify(kwd.get('hidden_folder_ids', '')) - if created_ldda_ids and not message: - message = "%d datasets are uploading in the background to the library '%s' (each is selected). " % \ - (len(created_ldda_ids.split(',')), escape(library.name)) - message += "Don't navigate away from Galaxy or use the browser's \"stop\" or \"reload\" buttons (on this tab) until the " - message += "message \"This job is running\" is cleared from the \"Information\" column below for each selected dataset." - status = "info" - comptypes = get_comptypes(trans) - try: - if self.app.config.new_lib_browse: - return trans.fill_template('library/common/browse_library_opt.mako', - cntrller=cntrller, - use_panels=use_panels, - library=library, - created_ldda_ids=created_ldda_ids, - hidden_folder_ids=hidden_folder_ids, - show_deleted=show_deleted, - comptypes=comptypes, - current_user_roles=current_user_roles, - message=escape(message), - status=escape(status)) - else: - return trans.fill_template('library/common/browse_library.mako', - cntrller=cntrller, - use_panels=use_panels, - library=library, - created_ldda_ids=created_ldda_ids, - hidden_folder_ids=hidden_folder_ids, - show_deleted=show_deleted, - comptypes=comptypes, - current_user_roles=current_user_roles, - message=escape(message), - status=escape(status)) - except Exception as e: - message = 'Error attempting to display contents of library (%s): %s.' % (escape(str(library.name)), str(e)) - status = 'error' - default_action = kwd.get('default_action', None) - - return trans.response.send_redirect(web.url_for(use_panels=use_panels, - controller=cntrller, - action='browse_libraries', - default_action=default_action, - message=message, - status=status)) - - @web.expose - @web.require_admin - def library_info(self, trans, cntrller, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - library_id = kwd.get('id', None) - try: - library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)) - except Exception: - library = None - self._check_access(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('library_info_button', False): - self._check_modify(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) - new_name = kwd.get('name', 'No name') - if not new_name: - message = 'Enter a valid name' - status = 'error' - else: - new_description = kwd.get('description', '') - new_synopsis = kwd.get('synopsis', '') - if new_synopsis in [None, 'None']: - new_synopsis = '' - library.name = new_name - library.description = new_description - library.synopsis = new_synopsis - # Rename the root_folder - library.root_folder.name = new_name - library.root_folder.description = new_description - trans.sa_session.add_all((library, library.root_folder)) - trans.sa_session.flush() - message = "Information updated for library '%s'." % library.name - return trans.response.send_redirect(web.url_for(controller='library_common', - action='library_info', - cntrller=cntrller, - use_panels=use_panels, - id=trans.security.encode_id(library.id), - show_deleted=show_deleted, - message=message, - status='done')) - # See if we have any associated templates - info_association, inherited = library.get_info_association() - widgets = library.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - return trans.fill_template('/library/common/library_info.mako', - cntrller=cntrller, - use_panels=use_panels, - library=library, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - current_user_roles=current_user_roles, - show_deleted=show_deleted, - info_association=info_association, - inherited=inherited, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def library_permissions(self, trans, cntrller, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - library_id = kwd.get('id', None) - try: - library = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)) - except Exception: - library = None - self._check_access(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) - self._check_manage(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('update_roles_button', False): - # The user clicked the Save button on the 'Associate With Roles' form - permissions = {} - for k, v in trans.app.model.Library.permitted_actions.items(): - in_roles = [trans.sa_session.query(trans.app.model.Role).get(x) for x in util.listify(kwd.get(k + '_in', []))] - permissions[trans.app.security_agent.get_action(v.action)] = in_roles - trans.app.security_agent.set_all_library_permissions(trans, library, permissions) - trans.sa_session.refresh(library) - # Copy the permissions to the root folder - trans.app.security_agent.copy_library_permissions(trans, library, library.root_folder) - message = "Permissions updated for library '%s'." % escape(library.name) - return trans.response.send_redirect(web.url_for(controller='library_common', - action='library_permissions', - cntrller=cntrller, - use_panels=use_panels, - id=trans.security.encode_id(library.id), - show_deleted=show_deleted, - message=message, - status='done')) - roles = trans.app.security_agent.get_legitimate_roles(trans, library, cntrller) - all_roles = trans.app.security_agent.get_all_roles(trans, cntrller) - return trans.fill_template('/library/common/library_permissions.mako', - cntrller=cntrller, - use_panels=use_panels, - library=library, - current_user_roles=current_user_roles, - roles=roles, - all_roles=all_roles, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - - @web.expose - def create_folder(self, trans, cntrller, parent_id, library_id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller in ('library_admin', 'api') - current_user_roles = trans.get_current_user_roles() - try: - parent_folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(parent_id)) - except Exception: - parent_folder = None - # Check the library which actually contains the user-supplied parent folder, not the user-supplied - # library, which could be anything. - self._check_access(trans, cntrller, is_admin, parent_folder, current_user_roles, use_panels, library_id, show_deleted) - self._check_add(trans, cntrller, is_admin, parent_folder, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('new_folder_button', False) or cntrller == 'api': - new_folder = trans.app.model.LibraryFolder(name=kwd.get('name', ''), - description=kwd.get('description', '')) - # We are associating the last used genome build with folders, so we will always - # initialize a new folder with the first dbkey in genome builds list which is currently - # ? unspecified (?) - new_folder.genome_build = trans.app.genome_builds.default_value - parent_folder.add_folder(new_folder) - trans.sa_session.add(new_folder) - trans.sa_session.flush() - # New folders default to having the same permissions as their parent folder - trans.app.security_agent.copy_library_permissions(trans, parent_folder, new_folder) - # If we're creating in the API, we're done - if cntrller == 'api': - return 200, dict(created=new_folder) - # If we have an inheritable template, redirect to the folder_info page so information - # can be filled in immediately. - widgets = [] - info_association, inherited = new_folder.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - widgets = new_folder.get_template_widgets(trans) - if info_association: - message = "The new folder named '%s' has been added to the data library. " % escape(new_folder.name) - message += "Additional information about this folder may be added using the inherited template." - return trans.fill_template('/library/common/folder_info.mako', - cntrller=cntrller, - use_panels=use_panels, - folder=new_folder, - library_id=library_id, - widgets=widgets, - current_user_roles=current_user_roles, - show_deleted=show_deleted, - info_association=info_association, - inherited=inherited, - message=escape(message), - status='done') - # If not inheritable info_association, redirect to the library. - message = "The new folder named '%s' has been added to the data library." % escape(new_folder.name) - # SM: This is the second place where the API controller would - # reference the library id: - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status='done')) - # We do not render any template widgets on creation pages since saving the info_association - # cannot occur before the associated item is saved. - return trans.fill_template('/library/common/new_folder.mako', - cntrller=cntrller, - use_panels=use_panels, - library_id=library_id, - folder=parent_folder, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def folder_info(self, trans, cntrller, id, library_id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(id)) - except Exception: - folder = None - self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('rename_folder_button', False): - self._check_modify(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - new_name = kwd.get('name', '') - new_description = kwd.get('description', '') - if not new_name: - message = 'Enter a valid name' - status = 'error' - else: - folder.name = new_name - folder.description = new_description - trans.sa_session.add(folder) - trans.sa_session.flush() - message = "Information updated for folder '%s'." % escape(folder.name) - return trans.response.send_redirect(web.url_for(controller='library_common', - action='folder_info', - cntrller=cntrller, - use_panels=use_panels, - id=id, - library_id=library_id, - show_deleted=show_deleted, - message=message, - status='done')) - # See if we have any associated templates - widgets = [] - widget_fields_have_contents = False - info_association, inherited = folder.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - widgets = folder.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - return trans.fill_template('/library/common/folder_info.mako', - cntrller=cntrller, - use_panels=use_panels, - folder=folder, - library_id=library_id, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - current_user_roles=current_user_roles, - show_deleted=show_deleted, - info_association=info_association, - inherited=inherited, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def folder_permissions(self, trans, cntrller, id, library_id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(id)) - except Exception: - folder = None - self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - self._check_manage(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('update_roles_button', False): - # The user clicked the Save button on the 'Associate With Roles' form - permissions = {} - for k, v in trans.app.model.Library.permitted_actions.items(): - if k != 'LIBRARY_ACCESS': - # LIBRARY_ACCESS is a special permission set only at the library level - # and it is not inherited. - in_roles = [trans.sa_session.query(trans.app.model.Role).get(int(x)) for x in util.listify(kwd.get(k + '_in', []))] - permissions[trans.app.security_agent.get_action(v.action)] = in_roles - trans.app.security_agent.set_all_library_permissions(trans, folder, permissions) - trans.sa_session.refresh(folder) - message = "Permissions updated for folder '%s'." % escape(folder.name) - return trans.response.send_redirect(web.url_for(controller='library_common', - action='folder_permissions', - cntrller=cntrller, - use_panels=use_panels, - id=trans.security.encode_id(folder.id), - library_id=library_id, - show_deleted=show_deleted, - message=message, - status='done')) - # If the library is public all roles are legitimate, but if the library - # is restricted, only those roles associated with the LIBRARY_ACCESS - # permission are legitimate. - roles = trans.app.security_agent.get_legitimate_roles(trans, folder.parent_library, cntrller) - return trans.fill_template('/library/common/folder_permissions.mako', - cntrller=cntrller, - use_panels=use_panels, - folder=folder, - library_id=library_id, - current_user_roles=current_user_roles, - roles=roles, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def ldda_edit_info(self, trans, cntrller, library_id, folder_id, id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - except Exception: - ldda = None - self._check_access(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) - self._check_modify(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) - dbkey = kwd.get('dbkey', '?') - if isinstance(dbkey, list): - dbkey = dbkey[0] - file_formats = [dtype_name for dtype_name, dtype_value in trans.app.datatypes_registry.datatypes_by_extension.items() if dtype_value.allow_datatype_change] - file_formats.sort() - - def __ok_to_edit_metadata(ldda_id): - # prevent modifying metadata when dataset is queued or running as input/output - # This code could be more efficient, i.e. by using mappers, but to prevent slowing down loading a History panel, we'll leave the code here for now - for job_to_dataset_association in trans.sa_session.query( - self.app.model.JobToInputLibraryDatasetAssociation) \ - .filter_by(ldda_id=ldda_id) \ - .all() \ - + trans.sa_session.query(self.app.model.JobToOutputLibraryDatasetAssociation) \ - .filter_by(ldda_id=ldda_id) \ - .all(): - if job_to_dataset_association.job.state not in [job_to_dataset_association.job.states.OK, job_to_dataset_association.job.states.ERROR, job_to_dataset_association.job.states.DELETED]: - return False - return True - - # See if we have any associated templates - widgets = [] - info_association, inherited = ldda.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - widgets = ldda.get_template_widgets(trans) - if kwd.get('change', False): - # The user clicked the Save button on the 'Change data type' form - if __ok_to_edit_metadata(ldda.id): - if ldda.datatype.allow_datatype_change and trans.app.datatypes_registry.get_datatype_by_extension(kwd.get('datatype')).allow_datatype_change: - trans.app.datatypes_registry.change_datatype(ldda, kwd.get('datatype')) - trans.sa_session.flush() - message = "Data type changed for library dataset '%s'." % escape(ldda.name) - status = 'done' - else: - message = "You are unable to change datatypes in this manner. Changing %s to %s is not allowed." % (escape(ldda.extension), escape(kwd.get('datatype'))) - status = 'error' - else: - message = "This dataset is currently being used as input or output. You cannot change datatype until the jobs have completed or you have canceled them." - status = "error" - elif kwd.get('save', False): - # The user clicked the Save button on the 'Edit Attributes' form - new_name = kwd.get('name', '') - new_info = kwd.get('info', '') - new_message = escape(kwd.get('message', '')) - if not new_name: - message = 'Enter a valid name' - status = 'error' - else: - ldda.name = new_name - ldda.info = new_info - ldda.message = new_message - if __ok_to_edit_metadata(ldda.id): - # The following for loop will save all metadata_spec items - for name, spec in ldda.datatype.metadata_spec.items(): - if spec.get("readonly"): - continue - optional = kwd.get("is_" + name, None) - if optional and optional == '__NOTHING__': - # optional element... == '__NOTHING__' actually means it is NOT checked (and therefore ommitted) - setattr(ldda.metadata, name, None) - else: - setattr(ldda.metadata, name, spec.unwrap(kwd.get(name, None))) - ldda.metadata.dbkey = dbkey - ldda.datatype.after_setting_metadata(ldda) - message = "Attributes updated for library dataset '%s'." % escape(ldda.name) - status = 'done' - else: - message = "Attributes updated, but metadata could not be changed because this dataset is currently being used as input or output. You must cancel or wait for these jobs to complete before changing metadata." - status = 'warning' - trans.sa_session.flush() - elif kwd.get('detect', False): - # The user clicked the Auto-detect button on the 'Edit Attributes' form - if __ok_to_edit_metadata(ldda.id): - for name, spec in ldda.datatype.metadata_spec.items(): - # We need to be careful about the attributes we are resetting - if name not in ['name', 'info', 'dbkey']: - if spec.get('default'): - setattr(ldda.metadata, name, spec.unwrap(spec.get('default'))) - message = "Attributes have been queued to be updated for library dataset '%s'." % escape(ldda.name) - status = 'done' - trans.app.datatypes_registry.set_external_metadata_tool.tool_action.execute(trans.app.datatypes_registry.set_external_metadata_tool, trans, incoming={'input1': ldda}) - else: - message = "This dataset is currently being used as input or output. You cannot change metadata until the jobs have completed or you have canceled them." - status = 'error' - trans.sa_session.flush() - elif kwd.get('change_extended_metadata', False): - em_string = kwd.get("extended_metadata", "") - if len(em_string): - payload = None - try: - payload = json.loads(em_string) - except Exception: - message = 'Invalid JSON input' - status = 'error' - if payload is not None: - if ldda is not None: - ex_obj = self.get_item_extended_metadata_obj(trans, ldda) - if ex_obj is not None: - self.unset_item_extended_metadata_obj(trans, ldda) - self.delete_extended_metadata(trans, ex_obj) - ex_obj = self.create_extended_metadata(trans, payload) - self.set_item_extended_metadata_obj(trans, ldda, ex_obj) - message = "Updated Extended metadata '%s'." % escape(ldda.name) - status = 'done' - else: - message = "LDDA not found" - status = 'error' - else: - if ldda is not None: - ex_obj = self.get_item_extended_metadata_obj(trans, ldda) - if ex_obj is not None: - self.unset_item_extended_metadata_obj(trans, ldda) - self.delete_extended_metadata(trans, ex_obj) - message = "Deleted Extended metadata '%s'." % escape(ldda.name) - status = 'done' - - if "dbkey" in ldda.datatype.metadata_spec and not ldda.metadata.dbkey: - # Copy dbkey into metadata, for backwards compatability - # This looks like it does nothing, but getting the dbkey - # returns the metadata dbkey unless it is None, in which - # case it resorts to the old dbkey. Setting the dbkey - # sets it properly in the metadata - ldda.metadata.dbkey = ldda.dbkey - return trans.fill_template("/library/common/ldda_edit_info.mako", - cntrller=cntrller, - use_panels=use_panels, - ldda=ldda, - library_id=library_id, - file_formats=file_formats, - widgets=widgets, - current_user_roles=current_user_roles, - show_deleted=show_deleted, - info_association=info_association, - inherited=inherited, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def ldda_info(self, trans, cntrller, library_id, folder_id, id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - show_associated_hdas_and_lddas = util.string_as_bool(kwd.get('show_associated_hdas_and_lddas', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - self._check_access(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) - if is_admin and show_associated_hdas_and_lddas: - # Get all associated hdas and lddas that use the same disk file. - associated_hdas = trans.sa_session.query(trans.model.HistoryDatasetAssociation) \ - .filter(and_(trans.model.HistoryDatasetAssociation.deleted == false(), - trans.model.HistoryDatasetAssociation.dataset_id == ldda.dataset_id)) \ - .all() - associated_lddas = trans.sa_session.query(trans.model.LibraryDatasetDatasetAssociation) \ - .filter(and_(trans.model.LibraryDatasetDatasetAssociation.deleted == false(), - trans.model.LibraryDatasetDatasetAssociation.dataset_id == ldda.dataset_id, - trans.model.LibraryDatasetDatasetAssociation.id != ldda.id)) \ - .all() - else: - associated_hdas = [] - associated_lddas = [] - # See if we have any associated templates - widgets = [] - widget_fields_have_contents = False - info_association, inherited = ldda.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - widgets = ldda.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - return trans.fill_template('/library/common/ldda_info.mako', - cntrller=cntrller, - use_panels=use_panels, - ldda=ldda, - library=ldda.library_dataset.folder.parent_library, - show_associated_hdas_and_lddas=show_associated_hdas_and_lddas, - associated_hdas=associated_hdas, - associated_lddas=associated_lddas, - show_deleted=show_deleted, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - current_user_roles=current_user_roles, - info_association=info_association, - inherited=inherited, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def ldda_permissions(self, trans, cntrller, library_id, folder_id, id, **kwd): - message = str(escape(kwd.get('message', ''))) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - ids = util.listify(id) - lddas = [] - libraries = [] - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - for id in ids: - try: - ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - except Exception: - ldda = None - if ldda: - library = ldda.library_dataset.folder.parent_library - self._check_access(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) - lddas.append(ldda) - libraries.append(library) - library = libraries[0] - if any(x != library for x in libraries): - message = "Library datasets specified span multiple libraries." - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - id=library_id, - cntrller=cntrller, - use_panels=use_panels, - message=message, - status='error')) - # If access to the dataset is restricted, then use the roles associated with the DATASET_ACCESS permission to - # determine the legitimate roles. If the dataset is public, see if access to the library is restricted. If - # it is, use the roles associated with the LIBRARY_ACCESS permission to determine the legitimate roles. If both - # the dataset and the library are public, all roles are legitimate. All of the datasets will have the same - # permissions at this point. - ldda = lddas[0] - if trans.app.security_agent.dataset_is_public(ldda.dataset): - # The dataset is public, so check access to the library - roles = trans.app.security_agent.get_legitimate_roles(trans, library, cntrller) - else: - roles = trans.app.security_agent.get_legitimate_roles(trans, ldda.dataset, cntrller) - if kwd.get('update_roles_button', False): - # Dataset permissions - access_action = trans.app.security_agent.get_action(trans.app.security_agent.permitted_actions.DATASET_ACCESS.action) - manage_permissions_action = trans.app.security_agent.get_action(trans.app.security_agent.permitted_actions.DATASET_MANAGE_PERMISSIONS.action) - permissions, in_roles, error, message = \ - trans.app.security_agent.derive_roles_from_access(trans, trans.app.security.decode_id(library_id), cntrller, library=True, **kwd) - # Keep roles for DATASET_MANAGE_PERMISSIONS on the dataset - if not ldda.has_manage_permissions_roles(trans): - # Permission setting related to DATASET_MANAGE_PERMISSIONS was broken for a period of time, - # so it is possible that some Datasets have no roles associated with the DATASET_MANAGE_PERMISSIONS - # permission. In this case, we'll reset this permission to the ldda user's private role. - # dataset_manage_permissions_roles = [ trans.app.security_agent.get_private_user_role( ldda.user ) ] - permissions[manage_permissions_action] = [trans.app.security_agent.get_private_user_role(ldda.user)] - else: - permissions[manage_permissions_action] = ldda.get_manage_permissions_roles(trans) - for ldda in lddas: - # Set the DATASET permissions on the Dataset. - if error: - # Keep the original role associations for the DATASET_ACCESS permission on the ldda. - permissions[access_action] = ldda.get_access_roles(trans) - status = 'error' - else: - error = trans.app.security_agent.set_all_dataset_permissions(ldda.dataset, permissions) - if error: - message += error - status = 'error' - trans.sa_session.refresh(ldda.dataset) - if not error: - # Set the LIBRARY permissions on the LibraryDataset. The LibraryDataset and - # LibraryDatasetDatasetAssociation will be set with the same permissions. - permissions = {} - for k, v in trans.app.model.Library.permitted_actions.items(): - if k != 'LIBRARY_ACCESS': - # LIBRARY_ACCESS is a special permission set only at the library level and it is not inherited. - in_roles = [trans.sa_session.query(trans.app.model.Role).get(x) for x in util.listify(kwd.get(k + '_in', []))] - permissions[trans.app.security_agent.get_action(v.action)] = in_roles - for ldda in lddas: - error = trans.app.security_agent.set_all_library_permissions(trans, ldda.library_dataset, permissions) - trans.sa_session.refresh(ldda.library_dataset) - if error: - message = error - else: - # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation - trans.app.security_agent.set_all_library_permissions(trans, ldda, permissions) - trans.sa_session.refresh(ldda) - if len(lddas) == 1: - message = "Permissions updated for dataset '%s'." % escape(ldda.name) - else: - message = 'Permissions updated for %d datasets.' % len(lddas) - status = 'done' - return trans.fill_template("/library/common/ldda_permissions.mako", - cntrller=cntrller, - use_panels=use_panels, - lddas=lddas, - library_id=library_id, - roles=roles, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - if len(ids) > 1: - # Ensure that the permissions across all library items are identical, otherwise we can't update them together. - check_list = [] - for ldda in lddas: - permissions = [] - # Check the library level permissions - the permissions on the LibraryDatasetDatasetAssociation - # will always be the same as the permissions on the associated LibraryDataset. - for library_permission in trans.app.security_agent.get_permissions(ldda.library_dataset): - if library_permission.action not in permissions: - permissions.append(library_permission.action) - for dataset_permission in trans.app.security_agent.get_permissions(ldda.dataset): - if dataset_permission.action not in permissions: - permissions.append(dataset_permission.action) - permissions.sort() - if not check_list: - check_list = permissions - if permissions != check_list: - message = 'The datasets you selected do not have identical permissions, so they can not be updated together' - trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status='error')) - # Display permission form, permissions will be updated for all lddas simultaneously. - return trans.fill_template("/library/common/ldda_permissions.mako", - cntrller=cntrller, - use_panels=use_panels, - lddas=lddas, - library_id=library_id, - roles=roles, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - - @web.expose - def upload_library_dataset(self, trans, cntrller, library_id, folder_id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - ldda_message = escape(kwd.get('ldda_message', '')) - # deleted = util.string_as_bool( kwd.get( 'deleted', False ) ) - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - replace_id = kwd.get('replace_id', None) - replace_dataset = None - upload_option = kwd.get('upload_option', 'upload_file') - if kwd.get('files_0|uni_to_posix', False): - to_posix_lines = kwd.get('files_0|to_posix_lines', '') - else: - to_posix_lines = kwd.get('to_posix_lines', '') - if kwd.get('files_0|space_to_tab', False): - space_to_tab = kwd.get('files_0|space_to_tab', '') - else: - space_to_tab = kwd.get('space_to_tab', '') - link_data_only = kwd.get('link_data_only', 'copy_files') - dbkey = kwd.get('dbkey', '?') - if isinstance(dbkey, list): - last_used_build = dbkey[0] - else: - last_used_build = dbkey - roles = kwd.get('roles', '') - is_admin = trans.user_is_admin() and cntrller in ('library_admin', 'api') - current_user_roles = trans.get_current_user_roles() - widgets = [] - info_association, inherited = None, None - template_id = "None" - if replace_id not in ['', None, 'None']: - replace_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(replace_id)) - self._check_access(trans, cntrller, is_admin, replace_dataset, current_user_roles, use_panels, library_id, show_deleted) - self._check_modify(trans, cntrller, is_admin, replace_dataset, current_user_roles, use_panels, library_id, show_deleted) - library = replace_dataset.folder.parent_library - folder = replace_dataset.folder - info_association, inherited = replace_dataset.library_dataset_dataset_association.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - widgets = replace_dataset.library_dataset_dataset_association.get_template_widgets(trans) - # The name is stored - by the time the new ldda is created, replace_dataset.name - # will point to the new ldda, not the one it's replacing. - replace_dataset_name = replace_dataset.name - if not last_used_build: - last_used_build = replace_dataset.library_dataset_dataset_association.dbkey - else: - folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(folder_id)) - self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - self._check_add(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - library = folder.parent_library - if folder and last_used_build in ['None', None, '?']: - last_used_build = folder.genome_build - if kwd.get('runtool_btn', False) or kwd.get('ajax_upload', False) or cntrller == 'api': - error = False - if upload_option == 'upload_paths' and not trans.app.config.allow_library_path_paste: - error = True - message = '"allow_library_path_paste" is not defined in the Galaxy configuration file' - elif upload_option == 'upload_paths' and not is_admin: - error = True - message = 'Uploading files via filesystem paths can only be performed by administrators' - elif upload_option not in ('upload_file', 'upload_directory', 'upload_paths'): - error = True - message = 'Invalid upload_option' - elif roles: - # Check to see if the user selected roles to associate with the DATASET_ACCESS permission - # on the dataset that would cause accessibility issues. - vars = dict(DATASET_ACCESS_in=roles) - permissions, in_roles, error, message = \ - trans.app.security_agent.derive_roles_from_access(trans, library.id, cntrller, library=True, **vars) - if error: - if cntrller == 'api': - return 400, message - trans.response.send_redirect(web.url_for(controller='library_common', - action='upload_library_dataset', - cntrller=cntrller, - library_id=library_id, - folder_id=folder_id, - replace_id=replace_id, - upload_option=upload_option, - show_deleted=show_deleted, - message=message, - status='error')) - else: - # See if we have any inherited templates. - if not info_association: - info_association, inherited = folder.get_info_association(inherited=True) - if info_association and info_association.inheritable: - template_id = str(info_association.template.id) - widgets = folder.get_template_widgets(trans, get_contents=True) - processed_widgets = [] - # The list of widgets may include an AddressField which we need to save if it is new - for index, widget_dict in enumerate(widgets): - widget = widget_dict['widget'] - if isinstance(widget, AddressField): - value = kwd.get(widget.name, '') - if value == 'new': - if self.field_param_values_ok(widget.name, 'AddressField', **kwd): - # Save the new address - address = trans.app.model.UserAddress(user=trans.user) - self.save_widget_field(trans, address, widget.name, **kwd) - widget.value = str(address.id) - widget_dict['widget'] = widget - processed_widgets.append(widget_dict) - # It is now critical to update the value of 'field_%i', replacing the string - # 'new' with the new address id. This is necessary because the upload_dataset() - # method below calls the handle_library_params() method, which does not parse the - # widget fields, it instead pulls form values from kwd. See the FIXME comments in the - # handle_library_params() method, and the CheckboxField code in the next conditional. - kwd[widget.name] = str(address.id) - else: - # The invalid address won't be saved, but we cannot display error - # messages on the upload form due to the ajax upload already occurring. - # When we re-engineer the upload process ( currently under way ), we - # will be able to check the form values before the ajax upload occurs - # in the background. For now, we'll do nothing... - pass - elif isinstance(widget, CheckboxField): - # We need to check the value from kwd since util.Params would have munged the list if - # the checkbox is checked. - value = kwd.get(widget.name, '') - if CheckboxField.is_checked(value): - widget.value = 'true' - widget_dict['widget'] = widget - processed_widgets.append(widget_dict) - kwd[widget.name] = 'true' - else: - processed_widgets.append(widget_dict) - widgets = processed_widgets - created_outputs_dict = trans.webapp.controllers['library_common'].upload_dataset(trans, - cntrller=cntrller, - library_id=trans.security.encode_id(library.id), - folder_id=trans.security.encode_id(folder.id), - template_id=template_id, - widgets=widgets, - replace_dataset=replace_dataset, - **kwd) - if created_outputs_dict: - if cntrller == 'api': - # created_outputs_dict can be a string only if cntrller == 'api' - if type(created_outputs_dict) == str: - return 400, created_outputs_dict - elif type(created_outputs_dict) == tuple: - return created_outputs_dict[0], created_outputs_dict[1] - return 200, created_outputs_dict - total_added = len(created_outputs_dict.keys()) - ldda_id_list = [str(v.id) for v in created_outputs_dict.values()] - created_ldda_ids = ",".join(ldda_id_list) - if replace_dataset: - message = "Added %d dataset versions to the library dataset '%s' in the folder '%s'." % (total_added, escape(replace_dataset_name), escape(folder.name)) - else: - if not folder.parent: - # Libraries have the same name as their root_folder - message = "Added %d datasets to the library '%s' (each is selected). " % (total_added, escape(folder.name)) - else: - message = "Added %d datasets to the folder '%s' (each is selected). " % (total_added, escape(folder.name)) - if cntrller == 'library_admin': - message += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary." - status = 'done' - else: - # Since permissions on all LibraryDatasetDatasetAssociations must be the same at this point, we only need - # to check one of them to see if the current user can manage permissions on them. - check_ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(ldda_id_list[0]) - if trans.app.security_agent.can_manage_library_item(current_user_roles, check_ldda): - if replace_dataset: - default_action = '' - else: - message += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary." - default_action = 'manage_permissions' - else: - default_action = 'import_to_current_history' - trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - default_action=default_action, - created_ldda_ids=created_ldda_ids, - show_deleted=show_deleted, - message=message, - status='done')) - else: - created_ldda_ids = '' - message = "Upload failed" - status = 'error' - if cntrller == 'api': - return 400, message - trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - created_ldda_ids=created_ldda_ids, - show_deleted=show_deleted, - message=message, - status=status)) - # Note: if the upload form was submitted due to refresh_on_change for a form field, we cannot re-populate - # the field for the selected file ( files_0|file_data ) if the user selected one. This is because the value - # attribute of the html input file type field is typically ignored by browsers as a security precaution. - - # See if we have any inherited templates. - if not info_association: - info_association, inherited = folder.get_info_association(inherited=True) - if info_association and info_association.inheritable: - widgets = folder.get_template_widgets(trans, get_contents=True) - if info_association: - # Retain contents of widget fields when form was submitted via refresh_on_change. - widgets = self.populate_widgets_from_kwd(trans, widgets, **kwd) - template_id = str(info_association.template.id) - - # Send list of data formats to the upload form so the "extension" select list can be populated dynamically - file_formats = trans.app.datatypes_registry.upload_file_formats - - dbkeys = trans.app.genomes.get_dbkeys(trans) - dbkeys.sort(key=lambda dbkey: dbkey[0].lower()) - - # Send the current history to the form to enable importing datasets from history to library - history = trans.get_history() - if history is not None: - trans.sa_session.refresh(history) - if upload_option == 'upload_file' and trans.app.config.nginx_upload_path: - # If we're using nginx upload, override the form action - - # url_for is intentionally not used on the base URL here - - # nginx_upload_path is expected to include the proxy prefix if the - # administrator intends for it to be part of the URL. - action = trans.app.config.nginx_upload_path + '?nginx_redir=' + web.url_for(controller='library_common', action='upload_library_dataset') - else: - action = web.url_for(controller='library_common', action='upload_library_dataset') - do_not_display_options = [] - if replace_dataset: - # TODO: Not sure why, but 'upload_paths' is not allowed if replacing a dataset. See self.make_library_uploaded_dataset(). - do_not_display_options = ['upload_directory', 'upload_paths'] - upload_option_select_list = self._build_upload_option_select_list(trans, upload_option, is_admin, do_not_display_options) - roles_select_list = self._build_roles_select_list(trans, cntrller, library, util.listify(roles)) - return trans.fill_template('/library/common/upload.mako', - cntrller=cntrller, - upload_option_select_list=upload_option_select_list, - upload_option=upload_option, - action=action, - library_id=library_id, - folder_id=folder_id, - replace_dataset=replace_dataset, - file_formats=file_formats, - dbkeys=dbkeys, - last_used_build=last_used_build, - roles_select_list=roles_select_list, - history=history, - widgets=widgets, - template_id=template_id, - to_posix_lines=to_posix_lines, - space_to_tab=space_to_tab, - link_data_only=link_data_only, - show_deleted=show_deleted, - ldda_message=ldda_message, - message=escape(message), - status=escape(status)) - - def upload_dataset(self, trans, cntrller, library_id, folder_id, replace_dataset=None, **kwd): - # Set up the traditional tool state/params - tool_id = 'upload1' - tool = trans.app.toolbox.get_tool(tool_id) - state = tool.new_state(trans) - populate_state(trans, tool.inputs, kwd, state.inputs) - tool_params = state.inputs - dataset_upload_inputs = [] - for input_name, input in tool.inputs.items(): - if input.type == "upload_dataset": - dataset_upload_inputs.append(input) - # Library-specific params - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - message = escape(kwd.get('message', '')) - server_dir = kwd.get('server_dir', '') - if replace_dataset not in [None, 'None']: - replace_id = trans.security.encode_id(replace_dataset.id) - else: - replace_id = None - upload_option = kwd.get('upload_option', 'upload_file') - response_code = 200 - if upload_option == 'upload_directory': - if server_dir in [None, 'None', '']: - response_code = 400 - if trans.user_is_admin() and cntrller in ('library_admin', 'api'): - import_dir = trans.app.config.library_import_dir - import_dir_desc = 'library_import_dir' - else: - import_dir = trans.app.config.user_library_import_dir - if server_dir != trans.user.email: - import_dir = os.path.join(import_dir, trans.user.email) - import_dir_desc = 'user_library_import_dir' - full_dir = os.path.join(import_dir, server_dir) - unsafe = None - if safe_relpath(server_dir): - if import_dir_desc == 'user_library_import_dir' and safe_contains(import_dir, full_dir, whitelist=trans.app.config.user_library_import_symlink_whitelist): - for unsafe in unsafe_walk(full_dir, whitelist=[import_dir] + trans.app.config.user_library_import_symlink_whitelist): - log.error('User attempted to import a path that resolves to a path outside of their import dir: %s -> %s', unsafe, os.path.realpath(unsafe)) - else: - log.error('User attempted to import a directory path that resolves to a path outside of their import dir: %s -> %s', server_dir, os.path.realpath(full_dir)) - unsafe = True - if unsafe: - response_code = 403 - message = 'Invalid server_dir' - if import_dir: - message = 'Select a directory' - else: - response_code = 403 - message = '"%s" is not defined in the Galaxy configuration file' % import_dir_desc - elif upload_option == 'upload_paths': - if not trans.app.config.allow_library_path_paste: - response_code = 403 - message = '"allow_library_path_paste" is not defined in the Galaxy configuration file' - # Some error handling should be added to this method. - try: - # FIXME: instead of passing params here ( which have been processed by util.Params(), the original kwd - # should be passed so that complex objects that may have been included in the initial request remain. - library_bunch = upload_common.handle_library_params(trans, kwd, folder_id, replace_dataset) - except Exception: - response_code = 500 - message = "Unable to parse upload parameters, please report this error." - # Proceed with (mostly) regular upload processing if we're still errorless - if response_code == 200: - precreated_datasets = upload_common.get_precreated_datasets(trans, tool_params, trans.app.model.LibraryDatasetDatasetAssociation, controller=cntrller) - if upload_option == 'upload_file': - tool_params = upload_common.persist_uploads(tool_params, trans) - uploaded_datasets = upload_common.get_uploaded_datasets(trans, cntrller, tool_params, precreated_datasets, dataset_upload_inputs, library_bunch=library_bunch) - elif upload_option == 'upload_directory': - uploaded_datasets, response_code, message = self.get_server_dir_uploaded_datasets(trans, cntrller, kwd, full_dir, import_dir_desc, library_bunch, response_code, message) - elif upload_option == 'upload_paths': - uploaded_datasets, response_code, message = self.get_path_paste_uploaded_datasets(trans, cntrller, kwd, library_bunch, response_code, message) - upload_common.cleanup_unused_precreated_datasets(precreated_datasets) - if upload_option == 'upload_file' and not uploaded_datasets: - response_code = 400 - message = 'Select a file, enter a URL or enter text' - if response_code != 200: - if cntrller == 'api': - return (response_code, message) - trans.response.send_redirect(web.url_for(controller='library_common', - action='upload_library_dataset', - cntrller=cntrller, - library_id=library_id, - folder_id=folder_id, - replace_id=replace_id, - upload_option=upload_option, - show_deleted=show_deleted, - message=message, - status='error')) - json_file_path = upload_common.create_paramfile(trans, uploaded_datasets) - data_list = [ud.data for ud in uploaded_datasets] - job_params = {} - job_params['link_data_only'] = json.dumps(kwd.get('link_data_only', 'copy_files')) - job_params['uuid'] = json.dumps(kwd.get('uuid', None)) - job, output = upload_common.create_job(trans, tool_params, tool, json_file_path, data_list, folder=library_bunch.folder, job_params=job_params) - trans.sa_session.add(job) - trans.sa_session.flush() - return output - - def make_library_uploaded_dataset(self, trans, cntrller, params, name, path, type, library_bunch, in_folder=None): - link_data_only = params.get('link_data_only', 'copy_files') - uuid_str = params.get('uuid', None) - file_type = params.get('file_type', None) - library_bunch.replace_dataset = None # not valid for these types of upload - uploaded_dataset = util.bunch.Bunch() - new_name = name - # Remove compressed file extensions, if any, but only if - # we're copying files into Galaxy's file space. - if link_data_only == 'copy_files': - if new_name.endswith('.gz'): - new_name = new_name.rstrip('.gz') - elif new_name.endswith('.zip'): - new_name = new_name.rstrip('.zip') - uploaded_dataset.name = new_name - uploaded_dataset.path = path - uploaded_dataset.type = type - uploaded_dataset.ext = None - uploaded_dataset.file_type = file_type - uploaded_dataset.dbkey = params.get('dbkey', None) - uploaded_dataset.to_posix_lines = params.get('to_posix_lines', None) - uploaded_dataset.space_to_tab = params.get('space_to_tab', None) - uploaded_dataset.tag_using_filenames = params.get('tag_using_filenames', True) - if in_folder: - uploaded_dataset.in_folder = in_folder - uploaded_dataset.data = upload_common.new_upload(trans, cntrller, uploaded_dataset, library_bunch) - uploaded_dataset.link_data_only = link_data_only - uploaded_dataset.uuid = uuid_str - if link_data_only == 'link_to_files': - uploaded_dataset.data.file_name = os.path.abspath(path) - # Since we are not copying the file into Galaxy's managed - # default file location, the dataset should never be purgable. - uploaded_dataset.data.dataset.purgable = False - trans.sa_session.add_all((uploaded_dataset.data, uploaded_dataset.data.dataset)) - trans.sa_session.flush() - return uploaded_dataset - - def get_server_dir_uploaded_datasets(self, trans, cntrller, params, full_dir, import_dir_desc, library_bunch, response_code, message): - dir_response = self._get_server_dir_files(params, full_dir, import_dir_desc) - files = dir_response[0] - if not files: - return dir_response - uploaded_datasets = [] - for file in files: - name = os.path.basename(file) - uploaded_datasets.append(self.make_library_uploaded_dataset(trans, cntrller, params, name, file, 'server_dir', library_bunch)) - return uploaded_datasets, 200, None - - def _get_server_dir_files(self, params, full_dir, import_dir_desc): - files = [] - try: - for entry in os.listdir(full_dir): - # Only import regular files - path = os.path.join(full_dir, entry) - link_data_only = params.get('link_data_only', 'copy_files') - if os.path.islink(full_dir) and link_data_only == 'link_to_files': - # If we're linking instead of copying and the - # sub-"directory" in the import dir is actually a symlink, - # dereference the symlink, but not any of its contents. - link_path = os.readlink(full_dir) - if os.path.isabs(link_path): - path = os.path.join(link_path, entry) - else: - path = os.path.abspath(os.path.join(link_path, entry)) - elif os.path.islink(path) and os.path.isfile(path) and link_data_only == 'link_to_files': - # If we're linking instead of copying and the "file" in the - # sub-directory of the import dir is actually a symlink, - # dereference the symlink (one dereference only, Vasili). - link_path = os.readlink(path) - if os.path.isabs(link_path): - path = link_path - else: - path = os.path.abspath(os.path.join(os.path.dirname(path), link_path)) - if os.path.isfile(path): - files.append(path) - except Exception as e: - message = "Unable to get file list for configured %s, error: %s" % (import_dir_desc, str(e)) - response_code = 500 - return None, response_code, message - if not files: - message = "The directory '%s' contains no valid files" % full_dir - response_code = 400 - return None, response_code, message - return files, None, None - - def get_path_paste_uploaded_datasets(self, trans, cntrller, params, library_bunch, response_code, message): - preserve_dirs = util.string_as_bool(params.get('preserve_dirs', False)) - uploaded_datasets = [] - (files_and_folders, _response_code, _message) = self._get_path_files_and_folders(params, preserve_dirs) - if _response_code: - return (uploaded_datasets, _response_code, _message) - for (path, name, folder) in files_and_folders: - uploaded_datasets.append(self.make_library_uploaded_dataset(trans, cntrller, params, name, path, 'path_paste', library_bunch, folder)) - return uploaded_datasets, 200, None - - def _get_path_files_and_folders(self, params, preserve_dirs): - problem_response = self._check_path_paste_params(params) - if problem_response: - return problem_response - files_and_folders = [] - for (line, path) in self._paths_list(params): - line_files_and_folders = self._get_single_path_files_and_folders(line, path, preserve_dirs) - files_and_folders.extend(line_files_and_folders) - return files_and_folders, None, None - - def _get_single_path_files_and_folders(self, line, path, preserve_dirs): - files_and_folders = [] - if os.path.isfile(path): - name = os.path.basename(path) - files_and_folders.append((path, name, None)) - for basedir, dirs, files in os.walk(line): - for file in files: - file_path = os.path.abspath(os.path.join(basedir, file)) - if preserve_dirs: - in_folder = os.path.dirname(file_path.replace(path, '', 1).lstrip('/')) - else: - in_folder = None - files_and_folders.append((file_path, file, in_folder)) - return files_and_folders - - def _paths_list(self, params): - return [(l.strip(), os.path.abspath(l.strip())) for l in params.get('filesystem_paths', '').splitlines() if l.strip()] - - def _check_path_paste_params(self, params): - if params.get('filesystem_paths', '') == '': - message = "No paths entered in the upload form" - response_code = 400 - return None, response_code, message - bad_paths = [] - for (_, path) in self._paths_list(params): - if not os.path.exists(path): - bad_paths.append(path) - if bad_paths: - message = 'Invalid paths: "%s".' % '", "'.join(bad_paths) - response_code = 400 - return None, response_code, message - return None - - @web.expose - @web.require_admin - def add_history_datasets_to_library(self, trans, cntrller, library_id, folder_id, hda_ids='', **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - ldda_message = escape(kwd.get('ldda_message', '')) - show_deleted = kwd.get('show_deleted', False) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - replace_id = kwd.get('replace_id', None) - replace_dataset = None - upload_option = kwd.get('upload_option', 'import_from_history') - if kwd.get('files_0|to_posix_lines', False): - to_posix_lines = kwd.get('files_0|to_posix_lines', '') - else: - to_posix_lines = kwd.get('to_posix_lines', '') - if kwd.get('files_0|space_to_tab', False): - space_to_tab = kwd.get('files_0|space_to_tab', '') - else: - space_to_tab = kwd.get('space_to_tab', '') - link_data_only = kwd.get('link_data_only', 'copy_files') - dbkey = kwd.get('dbkey', '?') - if isinstance(dbkey, list): - last_used_build = dbkey[0] - else: - last_used_build = dbkey - roles = kwd.get('roles', '') - is_admin = trans.user_is_admin() and cntrller in ('library_admin', 'api') - current_user_roles = trans.get_current_user_roles() - info_association, inherited = None, None - template_id = "None" - if replace_id not in [None, 'None']: - try: - replace_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(replace_id)) - except Exception: - replace_dataset = None - self._check_access(trans, cntrller, is_admin, replace_dataset, current_user_roles, use_panels, library_id, show_deleted) - self._check_modify(trans, cntrller, is_admin, replace_dataset, current_user_roles, use_panels, library_id, show_deleted) - library = replace_dataset.folder.parent_library - folder = replace_dataset.folder - last_used_build = replace_dataset.library_dataset_dataset_association.dbkey - info_association, inherited = replace_dataset.library_dataset_dataset_association.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - template_id = str(info_association.template.id) - else: - folder = trans.sa_session.query(trans.app.model.LibraryFolder).get(trans.security.decode_id(folder_id)) - self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - self._check_add(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - library = folder.parent_library - last_used_build = folder.genome_build - # See if the current history is empty - history = trans.get_history() - trans.sa_session.refresh(history) - if not history.active_datasets: - message = 'Your current history is empty' - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - show_deleted=show_deleted, - message=message, - status='error')) - if kwd.get('add_history_datasets_to_library_button', False): - hda_ids = util.listify(hda_ids) - if hda_ids: - dataset_names = [] - created_ldda_ids = '' - for hda_id in hda_ids: - try: - hda = trans.sa_session.query(trans.app.model.HistoryDatasetAssociation).get(trans.security.decode_id(hda_id)) - except Exception: - hda = None - self._check_access(trans, cntrller, is_admin, hda, current_user_roles, use_panels, library_id, show_deleted) - if roles: - role_ids = roles.split(',') - role_obj_list = [trans.sa_session.query(trans.model.Role).get(role_id) for role_id in role_ids] - else: - role_obj_list = [] - ldda = hda.to_library_dataset_dataset_association(trans, - target_folder=folder, - replace_dataset=replace_dataset, - roles=role_obj_list, - ldda_message=ldda_message) - created_ldda_ids = '%s,%s' % (created_ldda_ids, str(ldda.id)) - dataset_names.append(ldda.name) - if not replace_dataset: - # If replace_dataset is None, the Library level permissions will be taken from the folder and applied to the new - # LDDA and LibraryDataset. - trans.app.security_agent.copy_library_permissions(trans, folder, ldda) - trans.app.security_agent.copy_library_permissions(trans, folder, ldda.library_dataset) - else: - library_bunch = upload_common.handle_library_params(trans, kwd, folder_id, replace_dataset) - if library_bunch.template and library_bunch.template_field_contents: - # Since information templates are inherited, the template fields can be displayed on the upload form. - # If the user has added field contents, we'll need to create a new form_values and info_association - # for the new library_dataset_dataset_association object. - # Create a new FormValues object, using the template we previously retrieved - form_values = trans.app.model.FormValues(library_bunch.template, library_bunch.template_field_contents) - trans.sa_session.add(form_values) - trans.sa_session.flush() - # Create a new info_association between the current ldda and form_values - info_association = trans.app.model.LibraryDatasetDatasetInfoAssociation(ldda, library_bunch.template, form_values) - trans.sa_session.add(info_association) - trans.sa_session.flush() - # Make sure to apply any defined dataset permissions, allowing the permissions inherited from the folder to - # over-ride the same permissions on the dataset, if they exist. - dataset_permissions_dict = trans.app.security_agent.get_permissions(hda.dataset) - current_library_dataset_actions = [permission.action for permission in ldda.library_dataset.actions] - # The DATASET_MANAGE_PERMISSIONS permission on a dataset is a special case because if - # it exists, then we need to apply the LIBRARY_MANAGE permission to the library dataset. - dataset_manage_permissions_action = trans.app.security_agent.get_action('DATASET_MANAGE_PERMISSIONS').action - flush_needed = False - for action, dataset_permissions_roles in dataset_permissions_dict.items(): - if isinstance(action, Action): - action = action.action - if action == dataset_manage_permissions_action: - # Apply the LIBRARY_MANAGE permission to the library dataset. - action = trans.app.security_agent.get_action('LIBRARY_MANAGE').action - # Allow the permissions inherited from the folder to over-ride the same permissions on the dataset. - if action not in current_library_dataset_actions: - for ldp in [trans.model.LibraryDatasetPermissions(action, ldda.library_dataset, role) for role in dataset_permissions_roles]: - trans.sa_session.add(ldp) - flush_needed = True - if flush_needed: - trans.sa_session.flush() - # Permissions must be the same on the LibraryDatasetDatasetAssociation and the associated LibraryDataset - trans.app.security_agent.copy_library_permissions(trans, ldda.library_dataset, ldda) - if created_ldda_ids: - created_ldda_ids = created_ldda_ids.lstrip(',') - ldda_id_list = created_ldda_ids.split(',') - total_added = len(ldda_id_list) - if replace_dataset: - message = "Added %d dataset versions to the library dataset '%s' in the folder '%s'." % (total_added, escape(replace_dataset.name), escape(folder.name)) - else: - if not folder.parent: - # Libraries have the same name as their root_folder - message = "Added %d datasets to the library '%s' (each is selected). " % (total_added, escape(folder.name)) - else: - message = "Added %d datasets to the folder '%s' (each is selected). " % (total_added, escape(folder.name)) - if cntrller == 'library_admin': - message += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary." - else: - # Since permissions on all LibraryDatasetDatasetAssociations must be the same at this point, we only need - # to check one of them to see if the current user can manage permissions on them. - check_ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(ldda_id_list[0]) - if trans.app.security_agent.can_manage_library_item(current_user_roles, check_ldda): - if not replace_dataset: - message += "Click the Go button at the bottom of this page to edit the permissions on these datasets if necessary." - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - created_ldda_ids=created_ldda_ids, - show_deleted=show_deleted, - message=message, - status='done')) - else: - message = 'Select at least one dataset from the list of active datasets in your current history' - status = 'error' - upload_option = kwd.get('upload_option', 'import_from_history') - # Send list of data formats to the upload form so the "extension" select list can be populated dynamically - file_formats = trans.app.datatypes_registry.upload_file_formats - # Send list of genome builds to the form so the "dbkey" select list can be populated dynamically - - def get_dbkey_options(last_used_build): - for dbkey, build_name in trans.app.genome_builds.get_genome_build_names(trans=trans): - yield build_name, dbkey, (dbkey == last_used_build) - dbkeys = get_dbkey_options(last_used_build) - # Send the current history to the form to enable importing datasets from history to library - history = trans.get_history() - trans.sa_session.refresh(history) - action = 'add_history_datasets_to_library' - upload_option_select_list = self._build_upload_option_select_list(trans, upload_option, is_admin) - roles_select_list = self._build_roles_select_list(trans, cntrller, library, util.listify(roles)) - return trans.fill_template("/library/common/upload.mako", - cntrller=cntrller, - upload_option_select_list=upload_option_select_list, - upload_option=upload_option, - action=action, - library_id=library_id, - folder_id=folder_id, - replace_dataset=replace_dataset, - file_formats=file_formats, - dbkeys=dbkeys, - last_used_build=last_used_build, - roles_select_list=roles_select_list, - history=history, - widgets=[], - template_id=template_id, - to_posix_lines=to_posix_lines, - space_to_tab=space_to_tab, - link_data_only=link_data_only, - show_deleted=show_deleted, - ldda_message=ldda_message, - message=escape(message), - status=escape(status)) - - def _build_roles_select_list(self, trans, cntrller, library, selected_role_ids=[]): - # Get the list of legitimate roles to display on the upload form. If the library is public, - # all active roles are legitimate. If the library is restricted by the LIBRARY_ACCESS permission, only - # the set of all roles associated with users that have that permission are legitimate. - legitimate_roles = trans.app.security_agent.get_legitimate_roles(trans, library, cntrller) - if legitimate_roles: - # Build the roles multi-select list using the list of legitimate roles, making sure to select any that - # were selected before refresh_on_change, if one occurred. - roles_select_list = SelectField("roles", multiple="true", size="5") - for role in legitimate_roles: - selected = str(role.id) in selected_role_ids - roles_select_list.add_option(text=role.name, value=str(role.id), selected=selected) - return roles_select_list - else: - return None - - def _build_upload_option_select_list(self, trans, upload_option, is_admin, do_not_include_values=[]): - # Build the upload_option select list. The do_not_include_values param can contain options that - # should not be included in the list. For example, the 'upload_directory' option should not be - # included if uploading a new version of a library dataset. - upload_refresh_on_change_values = [] - for option_value, option_label in trans.model.LibraryDataset.upload_options: - if option_value not in do_not_include_values: - upload_refresh_on_change_values.append(option_value) - upload_option_select_list = SelectField('upload_option', - refresh_on_change=True, - refresh_on_change_values=upload_refresh_on_change_values) - for option_value, option_label in trans.model.LibraryDataset.upload_options: - if option_value not in do_not_include_values: - if option_value == 'upload_directory': - if is_admin and not trans.app.config.library_import_dir: - continue - elif not is_admin: - if not trans.app.config.user_library_import_dir: - continue - path = os.path.join(trans.app.config.user_library_import_dir, trans.user.email) - if not os.path.isdir(path): - try: - os.makedirs(path) - except Exception: - continue - elif option_value == 'upload_paths': - if not is_admin or not trans.app.config.allow_library_path_paste: - continue - upload_option_select_list.add_option(option_label, option_value, selected=option_value == upload_option) - return upload_option_select_list - - @web.expose - @web.require_admin - def download_dataset_from_folder(self, trans, cntrller, id, library_id=None, **kwd): - """Catches the dataset id and displays file contents as directed""" - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - except Exception: - ldda = None - self._check_access(trans, cntrller, is_admin, ldda, current_user_roles, use_panels, library_id, show_deleted) - composite_extensions = trans.app.datatypes_registry.get_composite_extensions() - ext = ldda.extension - if ext in composite_extensions: - # is composite - must return a zip of contents and the html file itself - ugh - should be reversible at upload! - # use act_on_multiple_datasets( self, trans, cntrller, library_id, ldda_ids='', **kwd ) since it does what we need - kwd['do_action'] = 'zip' - return self.act_on_multiple_datasets(trans, cntrller, library_id, ldda_ids=[id, ], **kwd) - else: - trans.response.set_content_type(ldda.get_mime()) - fStat = os.stat(ldda.file_name) - trans.response.headers['Content-Length'] = int(fStat.st_size) - fname = ldda.name - fname = ''.join(c in FILENAME_VALID_CHARS and c or '_' for c in fname)[0:150] - trans.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % fname - try: - return open(ldda.file_name) - except Exception: - message = 'This dataset contains no content' - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status='error')) - - @web.expose - @web.require_admin - def library_dataset_info(self, trans, cntrller, id, library_id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - library_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(id)) - except Exception: - library_dataset = None - self._check_access(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('edit_attributes_button', False): - self._check_modify(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) - new_name = kwd.get('name', '') - new_info = kwd.get('info', '') - if not new_name: - message = 'Enter a valid name' - status = 'error' - else: - library_dataset.name = new_name - library_dataset.info = new_info - trans.sa_session.add(library_dataset) - trans.sa_session.flush() - message = "Information updated for library dataset '%s'." % escape(library_dataset.name) - status = 'done' - # See if we have any associated templates - widgets = [] - widget_fields_have_contents = False - info_association, inherited = library_dataset.library_dataset_dataset_association.get_info_association() - if info_association and (not(inherited) or info_association.inheritable): - widgets = library_dataset.library_dataset_dataset_association.get_template_widgets(trans) - widget_fields_have_contents = self.widget_fields_have_contents(widgets) - return trans.fill_template('/library/common/library_dataset_info.mako', - cntrller=cntrller, - use_panels=use_panels, - library_dataset=library_dataset, - library_id=library_id, - current_user_roles=current_user_roles, - info_association=info_association, - inherited=inherited, - widgets=widgets, - widget_fields_have_contents=widget_fields_have_contents, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def library_dataset_permissions(self, trans, cntrller, id, library_id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - try: - library_dataset = trans.sa_session.query(trans.app.model.LibraryDataset).get(trans.security.decode_id(id)) - except Exception: - library_dataset = None - self._check_access(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) - self._check_manage(trans, cntrller, is_admin, library_dataset, current_user_roles, use_panels, library_id, show_deleted) - if kwd.get('update_roles_button', False): - # The user clicked the Save button on the 'Associate With Roles' form - permissions = {} - for k, v in trans.app.model.Library.permitted_actions.items(): - if k != 'LIBRARY_ACCESS': - # LIBRARY_ACCESS is a special permission set only at the library level - # and it is not inherited. - in_roles = [trans.sa_session.query(trans.app.model.Role).get(x) for x in util.listify(kwd.get(k + '_in', []))] - permissions[trans.app.security_agent.get_action(v.action)] = in_roles - # Set the LIBRARY permissions on the LibraryDataset - # NOTE: the LibraryDataset and LibraryDatasetDatasetAssociation will be set with the same permissions - error = trans.app.security_agent.set_all_library_permissions(trans, library_dataset, permissions) - trans.sa_session.refresh(library_dataset) - if error: - message = error - status = 'error' - else: - # Set the LIBRARY permissions on the LibraryDatasetDatasetAssociation - trans.app.security_agent.set_all_library_permissions(trans, library_dataset.library_dataset_dataset_association, permissions) - trans.sa_session.refresh(library_dataset.library_dataset_dataset_association) - message = "Permisisons updated for library dataset '%s'." % escape(library_dataset.name) - status = 'done' - roles = trans.app.security_agent.get_legitimate_roles(trans, library_dataset, cntrller) - return trans.fill_template('/library/common/library_dataset_permissions.mako', - cntrller=cntrller, - use_panels=use_panels, - library_dataset=library_dataset, - library_id=library_id, - roles=roles, - current_user_roles=current_user_roles, - show_deleted=show_deleted, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def make_library_item_public(self, trans, cntrller, library_id, item_type, id, **kwd): - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - current_user_roles = trans.get_current_user_roles() - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - if item_type == 'library': - library = trans.sa_session.query(trans.model.Library).get(trans.security.decode_id(id)) - self._check_access(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) - self._check_manage(trans, cntrller, is_admin, library, current_user_roles, use_panels, library_id, show_deleted) - contents = util.string_as_bool(kwd.get('contents', 'False')) - trans.app.security_agent.make_library_public(library, contents=contents) - if contents: - message = "The data library (%s) and all its contents have been made publicly accessible." % escape(library.name) - else: - message = "The data library (%s) has been made publicly accessible, but access to its contents has been left unchanged." % escape(library.name) - elif item_type == 'folder': - folder = trans.sa_session.query(trans.model.LibraryFolder).get(trans.security.decode_id(id)) - self._check_access(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - self._check_manage(trans, cntrller, is_admin, folder, current_user_roles, use_panels, library_id, show_deleted) - trans.app.security_agent.make_folder_public(folder) - message = "All of the contents of folder (%s) have been made publicly accessible." % escape(folder.name) - elif item_type == 'ldda': - ldda = trans.sa_session.query(trans.model.LibraryDatasetDatasetAssociation).get(trans.security.decode_id(id)) - self._check_access(trans, cntrller, is_admin, ldda.library_dataset, current_user_roles, use_panels, library_id, show_deleted) - self._check_manage(trans, cntrller, is_admin, ldda.library_dataset, current_user_roles, use_panels, library_id, show_deleted) - trans.app.security_agent.make_dataset_public(ldda.dataset) - message = "The libary dataset (%s) has been made publicly accessible." % escape(ldda.name) - else: - message = "Invalid item_type (%s) received." % escape(str(item_type)) - status = 'error' - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status=status)) - - @web.expose - @web.require_admin - def act_on_multiple_datasets(self, trans, cntrller, library_id=None, ldda_ids='', **kwd): - # This method is called from 1 of 3 places: - # - this controller's download_dataset_from_folder() method - # - he browse_library.mako template - # - the library_dataset_search_results.mako template - # In the last case above, we will not have a library_id - class NgxZip(object): - def __init__(self, url_base): - self.files = {} - self.url_base = url_base - - def add(self, file, relpath): - self.files[file] = relpath - - def __str__(self): - rval = '' - for fname, relpath in self.files.items(): - crc = '-' - size = os.stat(fname).st_size - quoted_fname = quote_plus(fname, '/') - rval += '%s %i %s%s %s\r\n' % (crc, size, self.url_base, quoted_fname, relpath) - return rval - # Perform an action on a list of library datasets. - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - action = kwd.get('do_action', None) - lddas = [] - error = False - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_user_roles = trans.get_current_user_roles() - current_history = trans.get_history() - if not ldda_ids: - error = True - message = 'You must select at least one dataset.' - elif not action: - error = True - message = 'You must select an action to perform on the selected datasets.' - else: - if action in ['import_to_current_history', 'import_to_histories']: - new_kwd = {} - if current_history is not None and action == 'import_to_current_history': - encoded_current_history_id = trans.security.encode_id(current_history.id) - selected_history_id = encoded_current_history_id - new_kwd['do_action'] = action - new_kwd['target_history_ids'] = encoded_current_history_id - new_kwd['import_datasets_to_histories_button'] = 'Import library datasets' - else: - selected_history_id = '' - return trans.response.send_redirect(web.url_for(controller='library_common', - action='import_datasets_to_histories', - cntrller=cntrller, - library_id=library_id, - selected_history_id=selected_history_id, - ldda_ids=ldda_ids, - use_panels=use_panels, - show_deleted=show_deleted, - message=message, - status=status, - **new_kwd)) - if action == 'move': - if library_id in ['none', 'None', None]: - source_library_id = '' - else: - source_library_id = library_id - return trans.response.send_redirect(web.url_for(controller='library_common', - action='move_library_item', - cntrller=cntrller, - source_library_id=source_library_id, - item_type='ldda', - item_id=ldda_ids, - use_panels=use_panels, - show_deleted=show_deleted, - message=message, - status=status)) - ldda_ids = util.listify(ldda_ids) - for ldda_id in ldda_ids: - try: - # Load the ldda requested and check whether the user has access to them - ldda = self.get_library_dataset_dataset_association(trans, ldda_id) - assert not ldda.dataset.purged - lddas.append(ldda) - except Exception: - ldda = None - message += "Invalid library dataset id (%s) specified. " % str(ldda_id) - if not error: - if action == 'manage_permissions': - valid_ldda_ids = [] - valid_lddas = [] - invalid_lddas = [] - for ldda in lddas: - if is_admin or trans.app.security_agent.can_manage_library_item(current_user_roles, ldda): - valid_lddas.append(ldda) - valid_ldda_ids.append(ldda.id) - else: - invalid_lddas.append(ldda) - if invalid_lddas: - message += "You are not authorized to manage permissions on %s: " % inflector.cond_plural(len(invalid_lddas), "dataset") - for ldda in invalid_lddas: - message += '(%s)' % escape(ldda.name) - message += '. ' - if valid_ldda_ids: - encoded_ldda_ids = [trans.security.encode_id(ldda_id) for ldda_id in valid_ldda_ids] - folder_id = trans.security.encode_id(valid_lddas[0].library_dataset.folder.id) - trans.response.send_redirect(web.url_for(controller='library_common', - action='ldda_permissions', - cntrller=cntrller, - use_panels=use_panels, - library_id=library_id, - folder_id=folder_id, - id=",".join(encoded_ldda_ids), - show_deleted=show_deleted, - message=message, - status=status)) - else: - message = "You are not authorized to manage permissions on any of the selected datasets." - elif action == 'delete': - valid_lddas = [] - invalid_lddas = [] - for ldda in lddas: - if is_admin or trans.app.security_agent.can_modify_library_item(current_user_roles, ldda): - valid_lddas.append(ldda) - else: - invalid_lddas.append(ldda) - if invalid_lddas: - message += "You are not authorized to delete %s: " % inflector.cond_plural(len(invalid_lddas), "dataset") - for ldda in invalid_lddas: - message += '(%s)' % ldda.name - message += '. ' - if valid_lddas: - for ldda in valid_lddas: - # Do not delete the association, just delete the library_dataset. The - # cleanup_datasets.py script handles everything else. - ld = ldda.library_dataset - ld.deleted = True - trans.sa_session.add(ld) - trans.sa_session.flush() - num_valid_lddas = len(valid_lddas) - message += "Deleted %i %s." % (num_valid_lddas, inflector.cond_plural(num_valid_lddas, "dataset")) - else: - message = "You are not authorized to delete any of the selected datasets." - elif action in ['zip', 'tgz', 'tbz', 'ngxzip']: - error = False - killme = string.punctuation + string.whitespace - trantab = string.maketrans(killme, '_' * len(killme)) - try: - outext = 'zip' - if action == 'zip': - # Can't use mkstemp - the file must not exist first - tmpd = tempfile.mkdtemp() - util.umask_fix_perms(tmpd, trans.app.config.umask, 0o777, self.app.config.gid) - tmpf = os.path.join(tmpd, 'library_download.' + action) - if trans.app.config.upstream_gzip: - archive = zipfile.ZipFile(tmpf, 'w', zipfile.ZIP_STORED, True) - else: - archive = zipfile.ZipFile(tmpf, 'w', zipfile.ZIP_DEFLATED, True) - archive.add = lambda x, y: archive.write(x, y.encode('CP437')) - elif action == 'tgz': - if trans.app.config.upstream_gzip: - archive = StreamBall('w|') - outext = 'tar' - else: - archive = StreamBall('w|gz') - outext = 'tgz' - elif action == 'tbz': - archive = StreamBall('w|bz2') - outext = 'tbz2' - elif action == 'ngxzip': - archive = NgxZip(trans.app.config.nginx_x_archive_files_base) - except (OSError, zipfile.BadZipfile): - error = True - log.exception("Unable to create archive for download") - message = "Unable to create archive for download, please report this error" - status = 'error' - except Exception: - error = True - log.exception("Unexpected error in create archive for download") - message = "Unable to create archive for download, please report - %s" % sys.exc_info()[0] - status = 'error' - if not error: - composite_extensions = trans.app.datatypes_registry.get_composite_extensions() - seen = [] - for ldda in lddas: - if ldda.dataset.state in ['new', 'upload', 'queued', 'running', 'empty', 'discarded']: - continue - ext = ldda.extension - is_composite = ext in composite_extensions - path = "" - parent_folder = ldda.library_dataset.folder - while parent_folder is not None: - # Exclude the now-hidden "root folder" - if parent_folder.parent is None: - path = os.path.join(parent_folder.library_root[0].name, path) - break - path = os.path.join(parent_folder.name, path) - parent_folder = parent_folder.parent - path += ldda.name - while path in seen: - path += '_' - seen.append(path) - zpath = os.path.split(path)[-1] # comes as base_name/fname - outfname, zpathext = os.path.splitext(zpath) - if is_composite: - # need to add all the components from the extra_files_path to the zip - if zpathext == '': - zpath = '%s.html' % zpath # fake the real nature of the html file - try: - archive.add(ldda.dataset.file_name, zpath) # add the primary of a composite set - except IOError: - error = True - log.exception("Unable to add composite parent %s to temporary library download archive", ldda.dataset.file_name) - message = "Unable to create archive for download, please report this error" - status = 'error' - continue - flist = glob.glob(os.path.join(ldda.dataset.extra_files_path, '*.*')) # glob returns full paths - for fpath in flist: - efp, fname = os.path.split(fpath) - if fname > '': - fname = fname.translate(trantab) - try: - archive.add(fpath, fname) - except IOError: - error = True - log.exception("Unable to add %s to temporary library download archive %s", fname, outfname) - message = "Unable to create archive for download, please report this error" - status = 'error' - continue - else: # simple case - try: - archive.add(ldda.dataset.file_name, path) - except IOError: - error = True - log.exception("Unable to write %s to temporary library download archive", ldda.dataset.file_name) - message = "Unable to create archive for download, please report this error" - status = 'error' - if not error: - if library_id: - lname = trans.sa_session.query(trans.app.model.Library).get(trans.security.decode_id(library_id)).name - else: - # Request must have coe from the library_dataset_search_results page. - lname = 'selected_dataset' - fname = lname.replace(' ', '_') + '_files' - if action == 'zip': - archive.close() - trans.response.set_content_type("application/x-zip-compressed") - trans.response.headers["Content-Disposition"] = 'attachment; filename="%s.%s"' % (fname, outext) - archive = util.streamball.ZipBall(tmpf, tmpd) - archive.wsgi_status = trans.response.wsgi_status() - archive.wsgi_headeritems = trans.response.wsgi_headeritems() - return archive.stream - elif action == 'ngxzip': - trans.response.set_content_type("application/zip") - trans.response.headers["Content-Disposition"] = 'attachment; filename="%s.%s"' % (fname, outext) - trans.response.headers["X-Archive-Files"] = "zip" - return archive - else: - trans.response.set_content_type("application/x-tar") - trans.response.headers["Content-Disposition"] = 'attachment; filename="%s.%s"' % (fname, outext) - archive.wsgi_status = trans.response.wsgi_status() - archive.wsgi_headeritems = trans.response.wsgi_headeritems() - return archive.stream - else: - status = 'error' - message = 'Invalid action (%s) specified.' % escape(str(action)) - if library_id: - # If we have a library_id, browse the associated library - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - current_user_roles=current_user_roles, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status=status)) - else: - # We arrived here from the library_dataset_search_results page, so redirect there. - search_term = kwd.get('search_term', '') - comptypes = get_comptypes(trans) - return trans.fill_template('/library/common/library_dataset_search_results.mako', - cntrller=cntrller, - current_user_roles=current_user_roles, - search_term=search_term, - comptypes=comptypes, - lddas=lddas, - show_deleted=show_deleted, - use_panels=use_panels, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def import_datasets_to_histories(self, trans, cntrller, library_id='', folder_id='', ldda_ids='', target_history_id='', target_history_ids='', new_history_name='', **kwd): - # This method is called from one of the following places: - # - a menu option for a library dataset ( ldda_ids is a single ldda id ) - # - a menu option for a library folder ( folder_id has a value ) - # - a select list option for acting on multiple selected datasets within a library - # ( ldda_ids is a comma separated string of ldda ids ) - # - a menu option for a library dataset search result set ( ldda_ids is a comma separated string of ldda ids ) - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - action = kwd.get('do_action', None) - user = trans.get_user() - current_history = trans.get_history() - if library_id: - library = trans.sa_session.query(trans.model.Library).get(trans.security.decode_id(library_id)) - else: - library = None - if folder_id: - folder = trans.sa_session.query(trans.model.LibraryFolder).get(trans.security.decode_id(folder_id)) - else: - folder = None - ldda_ids = util.listify(ldda_ids) - if ldda_ids: - ldda_ids = list(map(trans.security.decode_id, ldda_ids)) - if target_history_ids: - target_history_ids = util.listify(target_history_ids) - target_history_ids = set( - [trans.security.decode_id(thid) - for thid in target_history_ids if thid]) - elif target_history_id: - target_history_ids = [trans.security.decode_id(target_history_id)] - if kwd.get('import_datasets_to_histories_button', False): - invalid_datasets = 0 - if not ldda_ids or not (target_history_ids or new_history_name): - message = "You must provide one or more source library datasets and one or more target histories." - status = 'error' - else: - if new_history_name: - new_history = trans.app.model.History() - new_history.name = new_history_name - new_history.user = user - trans.sa_session.add(new_history) - trans.sa_session.flush() - target_history_ids = [new_history.id] - target_histories = [new_history] - elif user: - target_histories = [hist for hist in map(trans.sa_session.query(trans.app.model.History).get, target_history_ids) if (hist is not None and hist.user == user)] - else: - target_histories = [current_history] - if len(target_histories) != len(target_history_ids): - message += "You do not have permission to add datasets to %i requested histories. " % (len(target_history_ids) - len(target_histories)) - status = 'error' - flush_needed = False - for ldda in map(trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get, ldda_ids): - if ldda is None: - message += "You tried to import a dataset that does not exist. " - status = 'error' - invalid_datasets += 1 - elif ldda.dataset.state not in [trans.model.Dataset.states.OK, trans.model.Dataset.states.ERROR]: - message += "You cannot import dataset '%s' since its state is '%s'. " % (escape(ldda.name), ldda.dataset.state) - status = 'error' - invalid_datasets += 1 - elif not ldda.has_data(): - message += "You cannot import empty dataset '%s'. " % escape(ldda.name) - status = 'error' - invalid_datasets += 1 - else: - for target_history in target_histories: - ldda.to_history_dataset_association(target_history=target_history, add_to_history=True) - if not flush_needed: - flush_needed = True - if flush_needed: - trans.sa_session.flush() - hist_names_str = ", ".join([target_history.name for target_history in target_histories]) - num_source = len(ldda_ids) - invalid_datasets - num_target = len(target_histories) - message += "%i %s imported into %i %s: %s" % (num_source, - inflector.cond_plural(num_source, "dataset"), - num_target, - inflector.cond_plural(num_target, "history"), - hist_names_str) - trans.sa_session.refresh(current_history) - current_user_roles = trans.get_current_user_roles() - source_lddas = [] - if folder: - for library_dataset in folder.datasets: - ldda = library_dataset.library_dataset_dataset_association - if not ldda.deleted and trans.app.security_agent.can_access_library_item(current_user_roles, ldda, trans.user): - source_lddas.append(ldda) - elif ldda_ids: - for ldda_id in ldda_ids: - # Secuirty access permiision chcck is not needed here since the current user had access - # to the lddas in order for the menu optin to be available. - ldda = trans.sa_session.query(trans.model.LibraryDatasetDatasetAssociation).get(ldda_id) - source_lddas.append(ldda) - if current_history is None: - current_history = trans.get_history(create=True) - if current_history is not None: - target_histories = [current_history] - else: - target_histories = [] - message = 'You must have a history before you can import datasets. You can do this by loading the analysis interface.' - status = 'error' - if user: - target_histories = user.active_histories - if action == 'import_to_current_history' and library_id: - # To streamline this as much as possible, go back to browsing the library. - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - message=message, - status=status)) - return trans.fill_template("/library/common/import_datasets_to_histories.mako", - cntrller=cntrller, - library=library, - current_history=current_history, - ldda_ids=ldda_ids, - target_history_id=target_history_id, - target_history_ids=target_history_ids, - source_lddas=source_lddas, - target_histories=target_histories, - new_history_name=new_history_name, - show_deleted=show_deleted, - use_panels=use_panels, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def manage_template_inheritance(self, trans, cntrller, item_type, library_id, folder_id=None, ldda_id=None, **kwd): - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - message = escape(kwd.get('message', '')) - is_admin = (trans.user_is_admin() and cntrller == 'library_admin') - current_user_roles = trans.get_current_user_roles() - try: - item, item_desc, action, id = self.get_item_and_stuff(trans, - item_type=item_type, - library_id=library_id, - folder_id=folder_id, - ldda_id=ldda_id, - is_admin=is_admin) - except ValueError: - return None - if not (is_admin or trans.app.security_agent.can_modify_library_item(current_user_roles, item)): - message = "You are not authorized to modify %s '%s'." % (escape(item_desc), escape(item.name)) - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - show_deleted=show_deleted, - message=message, - status='error')) - info_association, inherited = item.get_info_association(restrict=True) - if info_association: - if info_association.inheritable: - message = "The template for this %s will no longer be inherited to contained folders and datasets." % escape(item_desc) - else: - message = "The template for this %s will now be inherited to contained folders and datasets." % escape(item_desc) - info_association.inheritable = not(info_association.inheritable) - trans.sa_session.add(info_association) - trans.sa_session.flush() - return trans.response.send_redirect(web.url_for(controller='library_common', - action=action, - cntrller=cntrller, - use_panels=use_panels, - library_id=library_id, - folder_id=folder_id, - id=id, - show_deleted=show_deleted, - message=message, - status='done')) - - @web.expose - @web.require_admin - def move_library_item(self, trans, cntrller, item_type, item_id, source_library_id='', make_target_current=True, **kwd): - # This method is called from one of the following places: - # - a menu option for a library dataset ( item_type is 'ldda' and item_id is a single ldda id ) - # - a menu option for a library folder ( item_type is 'folder' and item_id is a single folder id ) - # - a select list option for acting on multiple selected datasets within a library ( item_type is - # 'ldda' and item_id is a comma separated string of ldda ids ) - # - a menu option for a library dataset search result set ( item_type is 'ldda' and item_id is a - # comma separated string of ldda ids ) - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - use_panels = util.string_as_bool(kwd.get('use_panels', False)) - make_target_current = util.string_as_bool(make_target_current) - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - user = trans.get_user() - current_user_roles = trans.get_current_user_roles() - move_ldda_ids = [] - move_lddas = [] - move_folder_id = [] - move_folder = None - if source_library_id: - source_library = trans.sa_session.query(trans.model.Library).get(trans.security.decode_id(source_library_id)) - else: - # Request sent from the library_dataset_search_results page. - source_library = None - target_library_id = kwd.get('target_library_id', '') - if target_library_id not in ['', 'none', None]: - target_library = trans.sa_session.query(trans.model.Library).get(trans.security.decode_id(target_library_id)) - elif make_target_current: - target_library = source_library - else: - target_library = None - target_folder_id = kwd.get('target_folder_id', '') - if target_folder_id not in ['', 'none', None]: - target_folder = trans.sa_session.query(trans.model.LibraryFolder).get(trans.security.decode_id(target_folder_id)) - if target_library is None: - target_library = target_folder.parent_library - else: - target_folder = None - if item_type == 'ldda': - # We've been called from a menu option for a library dataset search result set - move_ldda_ids = util.listify(item_id) - if move_ldda_ids: - move_ldda_ids = list(map(trans.security.decode_id, move_ldda_ids)) - elif item_type == 'folder': - move_folder_id = item_id - move_folder = trans.sa_session.query(trans.model.LibraryFolder).get(trans.security.decode_id(move_folder_id)) - if kwd.get('move_library_item_button', False): - if not (move_ldda_ids or move_folder_id) or target_folder_id in ['', 'none', None]: - message = "You must select a source folder or one or more source datasets, and a target folder." - status = 'error' - else: - valid_lddas = [] - invalid_lddas = [] - invalid_items = 0 - flush_required = False - if item_type == 'ldda': - for ldda in map(trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get, move_ldda_ids): - if ldda is None: - message += "You tried to move a dataset that does not exist. " - status = 'error' - invalid_items += 1 - elif ldda.dataset.state not in [trans.model.Dataset.states.OK, trans.model.Dataset.states.ERROR]: - message += "You cannot move dataset '%s' since its state is '%s'. " % (ldda.name, ldda.dataset.state) - status = 'error' - invalid_items += 1 - elif not ldda.has_data(): - message += "You cannot move empty dataset '%s'. " % ldda.name - status = 'error' - invalid_items += 1 - else: - if is_admin: - library_dataset = ldda.library_dataset - library_dataset.folder = target_folder - trans.sa_session.add(library_dataset) - flush_required = True - else: - if trans.app.security_agent.can_modify_library_item(current_user_roles, ldda): - valid_lddas.append(ldda) - library_dataset = ldda.library_dataset - library_dataset.folder = target_folder - trans.sa_session.add(library_dataset) - flush_required = True - else: - invalid_items += 1 - invalid_lddas.append(ldda) - if not valid_lddas: - message = "You are not authorized to move any of the selected datasets." - elif invalid_lddas: - message += "You are not authorized to move %s: " % inflector.cond_plural(len(invalid_lddas), "dataset") - for ldda in invalid_lddas: - message += '(%s)' % escape(ldda.name) - message += '. ' - num_source = len(move_ldda_ids) - invalid_items - message = "%i %s moved to folder (%s) within data library (%s)" % (num_source, - inflector.cond_plural(num_source, "dataset"), - target_folder.name, - target_library.name) - elif item_type == 'folder': - move_folder = trans.sa_session.query(trans.app.model.LibraryFolder) \ - .get(trans.security.decode_id(move_folder_id)) - if move_folder is None: - message += "You tried to move a folder that does not exist. " - status = 'error' - invalid_items += 1 - else: - move_folder.parent = target_folder - trans.sa_session.add(move_folder) - flush_required = True - message = "Moved folder (%s) to folder (%s) within data library (%s) " % (escape(move_folder.name), - escape(target_folder.name), - escape(target_library.name)) - if flush_required: - trans.sa_session.flush() - if target_library: - if is_admin: - target_library_folders = target_library.get_active_folders(target_library.root_folder) - else: - folders_with_permission_to_add = [] - for folder in target_library.get_active_folders(target_library.root_folder): - if trans.app.security_agent.can_add_library_item(current_user_roles, folder): - folders_with_permission_to_add.append(folder) - target_library_folders = folders_with_permission_to_add - else: - target_library_folders = [] - if item_type == 'ldda': - for ldda_id in move_ldda_ids: - # TODO: It is difficult to filter out undesired folders (e.g. the ldda's current - # folder) if we have a list of lddas, but we may want to filter folders that - # are easily handled. - ldda = trans.sa_session.query(trans.model.LibraryDatasetDatasetAssociation).get(ldda_id) - move_lddas.append(ldda) - elif item_type == 'folder': - def __is_contained_in(folder1, folder2): - # Return True if folder1 is contained in folder2 - if folder1.parent: - if folder1.parent == folder2: - return True - return __is_contained_in(folder1.parent, folder2) - return False - filtered_folders = [] - for folder in target_library_folders: - include = True - if move_folder: - if __is_contained_in(folder, move_folder): - # Don't allow moving a folder to one of its sub-folders (circular issues in db) - include = False - if move_folder.id == folder.id: - # Don't allow moving a folder to itself - include = False - if move_folder.parent and move_folder.parent.id == folder.id: - # Don't allow moving a folder to its current parent folder - include = False - if include: - filtered_folders.append(folder) - target_library_folders = filtered_folders - - def __build_target_library_id_select_field(trans, selected_value='none'): - # Get all the libraries for which the current user can add items. - target_libraries = [] - if is_admin: - for library in trans.sa_session.query(trans.model.Library) \ - .filter(trans.model.Library.deleted == false()) \ - .order_by(trans.model.Library.table.c.name): - if source_library is None or library.id != source_library.id: - target_libraries.append(library) - else: - for library in trans.app.security_agent.get_accessible_libraries(trans, user): - if source_library is None: - if trans.app.security_agent.can_add_library_item(current_user_roles, library): - target_libraries.append(library) - elif library.id != source_library.id: - if trans.app.security_agent.can_add_library_item(current_user_roles, library): - target_libraries.append(library) - # A refresh_on_change is required to display the selected library's folders - return build_select_field(trans, - objs=target_libraries, - label_attr='name', - select_field_name='target_library_id', - selected_value=selected_value, - refresh_on_change=True) - - def __build_target_folder_id_select_field(trans, folders, selected_value='none'): - for folder in folders: - if not folder.parent: - folder.name = 'Data library root' - break - return build_select_field(trans, - objs=folders, - label_attr='name', - select_field_name='target_folder_id', - selected_value=selected_value, - refresh_on_change=False) - if target_library: - selected_value = target_library.id - else: - selected_value = 'none' - target_library_id_select_field = __build_target_library_id_select_field(trans, selected_value=selected_value) - target_folder_id_select_field = __build_target_folder_id_select_field(trans, target_library_folders) - return trans.fill_template("/library/common/move_library_item.mako", - cntrller=cntrller, - make_target_current=make_target_current, - source_library=source_library, - item_type=item_type, - item_id=item_id, - move_ldda_ids=move_ldda_ids, - move_lddas=move_lddas, - move_folder=move_folder, - target_library=target_library, - target_library_id_select_field=target_library_id_select_field, - target_folder_id_select_field=target_folder_id_select_field, - show_deleted=show_deleted, - use_panels=use_panels, - message=escape(message), - status=escape(status)) - - @web.expose - @web.require_admin - def delete_library_item(self, trans, cntrller, library_id, item_id, item_type, **kwd): - # This action will handle deleting all types of library items. State is saved for libraries and - # folders ( i.e., if undeleted, the state of contents of the library or folder will remain, so previously - # deleted / purged contents will have the same state ). When a library or folder has been deleted for - # the amount of time defined in the cleanup_datasets.py script, the library or folder and all of its - # contents will be purged. The association between this method and the cleanup_datasets.py script - # enables clean maintenance of libraries and library dataset disk files. This is also why the item_types - # are not any of the associations ( the cleanup_datasets.py script handles everything ). - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - item_types = {'library': trans.app.model.Library, - 'folder': trans.app.model.LibraryFolder, - 'library_dataset': trans.app.model.LibraryDataset} - is_admin = (trans.user_is_admin() and cntrller == 'library_admin') - current_user_roles = trans.get_current_user_roles() - if item_type not in item_types: - message = 'Bad item_type specified: %s' % escape(str(item_type)) - status = 'error' - else: - if item_type == 'library_dataset': - item_desc = 'Dataset' - else: - item_desc = item_type.capitalize() - library_item_ids = util.listify(item_id) - valid_items = 0 - invalid_items = 0 - not_authorized_items = 0 - flush_needed = False - message = '' - for library_item_id in library_item_ids: - try: - library_item = trans.sa_session.query(item_types[item_type]).get(trans.security.decode_id(library_item_id)) - except Exception: - library_item = None - if not library_item or not (is_admin or trans.app.security_agent.can_access_library_item(current_user_roles, library_item, trans.user)): - invalid_items += 1 - elif not (is_admin or trans.app.security_agent.can_modify_library_item(current_user_roles, library_item)): - not_authorized_items += 1 - else: - valid_items += 1 - library_item.deleted = True - trans.sa_session.add(library_item) - flush_needed = True - if flush_needed: - trans.sa_session.flush() - if valid_items: - message += "%d %s marked deleted. " % (valid_items, escape(inflector.cond_plural(valid_items, item_desc))) - if invalid_items: - message += '%d invalid %s specifield. ' % (invalid_items, escape(inflector.cond_plural(invalid_items, item_desc))) - status = 'error' - if not_authorized_items: - message += 'You are not authorized to delete %d %s. ' % (not_authorized_items, escape(inflector.cond_plural(not_authorized_items, item_desc))) - status = 'error' - if item_type == 'library': - return trans.response.send_redirect(web.url_for(controller=cntrller, - action='browse_libraries', - message=message, - status=status)) - else: - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - show_deleted=show_deleted, - message=message, - status=status)) - - @web.expose - @web.require_admin - def undelete_library_item(self, trans, cntrller, library_id, item_id, item_type, **kwd): - # This action will handle undeleting all types of library items - status = kwd.get('status', 'done') - show_deleted = util.string_as_bool(kwd.get('show_deleted', False)) - item_types = {'library': trans.app.model.Library, - 'folder': trans.app.model.LibraryFolder, - 'library_dataset': trans.app.model.LibraryDataset} - is_admin = (trans.user_is_admin() and cntrller == 'library_admin') - current_user_roles = trans.get_current_user_roles() - if item_type not in item_types: - message = 'Bad item_type specified: %s' % escape(str(item_type)) - status = 'error' - else: - if item_type == 'library_dataset': - item_desc = 'Dataset' - else: - item_desc = item_type.capitalize() - - library_item_ids = util.listify(item_id) - valid_items = 0 - invalid_items = 0 - purged_items = 0 - not_authorized_items = 0 - flush_needed = False - message = '' - for library_item_id in library_item_ids: - try: - library_item = trans.sa_session.query(item_types[item_type]).get(trans.security.decode_id(library_item_id)) - except Exception: - library_item = None - if not library_item or not (is_admin or trans.app.security_agent.can_access_library_item(current_user_roles, library_item, trans.user)): - invalid_items += 1 - elif library_item.purged: - purged_items += 1 - elif not (is_admin or trans.app.security_agent.can_modify_library_item(current_user_roles, library_item)): - not_authorized_items += 1 - else: - valid_items += 1 - library_item.deleted = False - trans.sa_session.add(library_item) - flush_needed = True - if flush_needed: - trans.sa_session.flush() - if valid_items: - message += "%d %s marked undeleted. " % (valid_items, escape(inflector.cond_plural(valid_items, item_desc))) - if invalid_items: - message += '%d invalid %s specifield. ' % (invalid_items, escape(inflector.cond_plural(invalid_items, item_desc))) - status = 'error' - if not_authorized_items: - message += 'You are not authorized to undelete %d %s. ' % (not_authorized_items, escape(inflector.cond_plural(not_authorized_items, item_desc))) - status = 'error' - if purged_items: - message += '%d %s marked purged, so cannot be undeleted. ' % (purged_items, escape(inflector.cond_plural(purged_items, item_desc))) - status = 'error' - if item_type == 'library': - return trans.response.send_redirect(web.url_for(controller=cntrller, - action='browse_libraries', - message=message, - status=status)) - else: - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - show_deleted=show_deleted, - message=message, - status=status)) - - def _check_access(self, trans, cntrller, is_admin, item, current_user_roles, use_panels, library_id, show_deleted): - can_access = True - if isinstance(item, trans.model.HistoryDatasetAssociation): - # Make sure the user has the DATASET_ACCESS permission on the history_dataset_association. - if not item: - message = "Invalid history dataset (%s) specified." % escape(str(item)) - can_access = False - elif not trans.app.security_agent.can_access_dataset(current_user_roles, item.dataset) and item.history.user == trans.user: - message = "You do not have permission to access the history dataset with id (%s)." % str(item.id) - can_access = False - else: - # Make sure the user has the LIBRARY_ACCESS permission on the library item. - if not item: - message = "Invalid library item (%s) specified." % escape(str(item)) - can_access = False - elif not (is_admin or trans.app.security_agent.can_access_library_item(current_user_roles, item, trans.user)): - if isinstance(item, trans.model.Library): - item_type = 'data library' - elif isinstance(item, trans.model.LibraryFolder): - item_type = 'folder' - else: - item_type = '(unknown item type)' - message = "You do not have permission to access the %s with id (%s)." % (escape(item_type), str(item.id)) - can_access = False - if not can_access: - if cntrller == 'api': - return 400, message - if isinstance(item, trans.model.Library): - return trans.response.send_redirect(web.url_for(controller=cntrller, - action='browse_libraries', - cntrller=cntrller, - use_panels=use_panels, - message=message, - status='error')) - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status='error')) - - def _check_add(self, trans, cntrller, is_admin, item, current_user_roles, use_panels, library_id, show_deleted): - # Deny access if the user is not an admin and does not have the LIBRARY_ADD permission. - if not (is_admin or trans.app.security_agent.can_add_library_item(current_user_roles, item)): - message = "You are not authorized to add an item to (%s)." % escape(item.name) - # Redirect to the real parent library since we know we have access to it. - if cntrller == 'api': - return 403, message - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - use_panels=use_panels, - id=library_id, - show_deleted=show_deleted, - message=message, - status='error')) - - def _check_manage(self, trans, cntrller, is_admin, item, current_user_roles, use_panels, library_id, show_deleted): - if isinstance(item, trans.model.LibraryDataset): - # Deny access if the user is not an admin and does not have the LIBRARY_MANAGE and DATASET_MANAGE_PERMISSIONS permissions. - if not (is_admin or - (trans.app.security_agent.can_manage_library_item(current_user_roles, item) and - trans.app.security_agent.can_manage_dataset(current_user_roles, item.library_dataset_dataset_association.dataset))): - message = "You are not authorized to manage permissions on library dataset (%s)." % escape(item.name) - if cntrller == 'api': - return 403, message - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - id=library_id, - cntrller=cntrller, - use_panels=use_panels, - message=message, - status='error')) - # Deny access if the user is not an admin and does not have the LIBRARY_MANAGE permission. - if not (is_admin or trans.app.security_agent.can_manage_library_item(current_user_roles, item)): - message = "You are not authorized to manage permissions on (%s)." % escape(item.name) - if cntrller == 'api': - return 403, message - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - id=library_id, - cntrller=cntrller, - use_panels=use_panels, - message=message, - status='error')) - - def _check_modify(self, trans, cntrller, is_admin, item, current_user_roles, use_panels, library_id, show_deleted): - # Deny modification if the user is not an admin and does not have the LIBRARY_MODIFY permission. - if not (is_admin or trans.app.security_agent.can_modify_library_item(current_user_roles, item)): - message = "You are not authorized to modify (%s)." % escape(item.name) - if cntrller == 'api': - return 403, message - return trans.response.send_redirect(web.url_for(controller='library_common', - action='browse_library', - cntrller=cntrller, - id=library_id, - use_panels=use_panels, - show_deleted=show_deleted, - message=message, - status='error')) - -# ---- Utility methods ------------------------------------------------------- - - -def active_folders(trans, folder): - # Much faster way of retrieving all active sub-folders within a given folder than the - # performance of the mapper. This query also eagerloads the permissions on each folder. - return trans.sa_session.query(trans.app.model.LibraryFolder) \ - .filter_by(parent=folder, deleted=False) \ - .options(eagerload_all("actions")) \ - .order_by(trans.app.model.LibraryFolder.table.c.name) \ - .all() - - -def activatable_folders(trans, folder): - return trans.sa_session.query(trans.app.model.LibraryFolder) \ - .filter_by(parent=folder, purged=False) \ - .options(eagerload_all("actions")) \ - .order_by(trans.app.model.LibraryFolder.table.c.name) \ - .all() - - -def map_library_datasets_to_lddas(trans, lib_datasets): - ''' - Given a list of LibraryDatasets, return a map from the LibraryDatasets - to their LDDAs. If an LDDA does not exist for a LibraryDataset, then - there will be no entry in the return hash. - ''' - # Get a list of the LibraryDatasets' ids so that we can pass it along to - # a query to retrieve the LDDAs. This eliminates querying for each - # LibraryDataset. - lib_dataset_ids = [x.library_dataset_dataset_association_id for x in lib_datasets] - lddas = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation) \ - .filter(trans.app.model.LibraryDatasetDatasetAssociation.id.in_(lib_dataset_ids)) \ - .all() - - # Map the LibraryDataset to the returned LDDAs: - ret_lddas = {} - for ldda in lddas: - ret_lddas[ldda.library_dataset_id] = ldda - return ret_lddas - - -def datasets_for_lddas(trans, lddas): - ''' - Given a list of LDDAs, return a list of Datasets for them. - ''' - dataset_ids = [x.dataset_id for x in lddas] - datasets = trans.sa_session.query(trans.app.model.Dataset) \ - .filter(trans.app.model.Dataset.id.in_(dataset_ids)) \ - .all() - return datasets - - -def active_folders_and_library_datasets(trans, folder): - folders = active_folders(trans, folder) - library_datasets = trans.sa_session.query(trans.model.LibraryDataset).filter( - and_(trans.model.LibraryDataset.table.c.deleted == false(), - trans.model.LibraryDataset.table.c.folder_id == folder.id)) \ - .order_by(trans.model.LibraryDataset.table.c._name) \ - .all() - return folders, library_datasets - - -def activatable_folders_and_library_datasets(trans, folder): - folders = activatable_folders(trans, folder) - library_datasets = trans.sa_session.query(trans.model.LibraryDataset) \ - .filter(trans.model.LibraryDataset.table.c.folder_id == folder.id) \ - .join((trans.model.LibraryDatasetDatasetAssociation.table, - trans.model.LibraryDataset.table.c.library_dataset_dataset_association_id == trans.model.LibraryDatasetDatasetAssociation.table.c.id)) \ - .join((trans.model.Dataset.table, - trans.model.LibraryDatasetDatasetAssociation.table.c.dataset_id == trans.model.Dataset.table.c.id)) \ - .filter(trans.model.Dataset.table.c.deleted == false()) \ - .order_by(trans.model.LibraryDataset.table.c._name) \ - .all() - return folders, library_datasets - - -def branch_deleted(folder): - # Return True if a folder belongs to a branch that has been deleted - if folder.deleted: - return True - if folder.parent: - return branch_deleted(folder.parent) - return False - - -def get_containing_library_from_library_dataset(trans, library_dataset): - """Given a library_dataset, get the containing library""" - folder = library_dataset.folder - while folder.parent: - folder = folder.parent - # We have folder set to the library's root folder, which has the same name as the library - for library in trans.sa_session.query(trans.model.Library).filter( - and_(trans.model.Library.table.c.deleted == false(), - trans.model.Library.table.c.name == folder.name)): - # Just to double-check - if library.root_folder == folder: - return library - return None - - -def get_comptypes(trans): - comptypes_t = comptypes - if trans.app.config.nginx_x_archive_files_base: - comptypes_t = ['ngxzip'] - for comptype in trans.app.config.disable_library_comptypes: - # TODO: do this once, not every time (we're gonna raise an - # exception every time after the first time) - try: - comptypes_t.remove(comptype) - except ValueError: - pass - return comptypes_t - - -def get_sorted_accessible_library_items(trans, cntrller, items, sort_attr): - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - if is_admin: - accessible_items = items - else: - # Enforce access permission settings - current_user_roles = trans.get_current_user_roles() - accessible_items = [] - for item in items: - if trans.app.security_agent.can_access_library_item(current_user_roles, item, trans.user): - accessible_items.append(item) - # Sort by name - return sort_by_attr([item for item in accessible_items], sort_attr) - - -def sort_by_attr(seq, attr): - """ - Sort the sequence of objects by object's attribute - Arguments: - seq - the list or any sequence (including immutable one) of objects to sort. - attr - the name of attribute to sort by - """ - # Use the "Schwartzian transform" - # Create the auxiliary list of tuples where every i-th tuple has form - # (seq[i].attr, i, seq[i]) and sort it. The second item of tuple is needed not - # only to provide stable sorting, but mainly to eliminate comparison of objects - # (which can be expensive or prohibited) in case of equal attribute values. - intermed = [(getattr(v, attr), i, v) for i, v in enumerate(seq)] - intermed.sort() - return [_[-1] for _ in intermed] - - -def lucene_search(trans, cntrller, search_term, search_url, **kwd): - """Return display of results from a full-text lucene search of data libraries.""" - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - full_url = "%s/find?%s" % (search_url, urlencode({"kwd" : search_term})) - ldda_ids = requests.get(full_url).json()['ids'] - lddas = [trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(ldda_id) for ldda_id in ldda_ids] - return status, message, get_sorted_accessible_library_items(trans, cntrller, lddas, 'name') - - -def whoosh_search(trans, cntrller, search_term, **kwd): - """Return display of results from a full-text whoosh search of data libraries.""" - message = escape(kwd.get('message', '')) - status = kwd.get('status', 'done') - ok = True - if whoosh_search_enabled: - whoosh_index_dir = trans.app.config.whoosh_index_dir - index_exists = whoosh.index.exists_in(whoosh_index_dir) - if index_exists: - index = whoosh.index.open_dir(whoosh_index_dir) - # Set field boosts for searcher to place equal weight on all search fields. - searcher = index.searcher(weighting=BM25F(field_B={'name_B' : 3.4, - 'info_B' : 3.2, - 'dbkey_B' : 3.3, - 'message_B' : 3.5})) - # Perform search - parser = MultifieldParser(['name', 'info', 'dbkey', 'message'], schema=schema) - # Search term with wildcards may be slow... - results = searcher.search(parser.parse('*' + search_term + '*'), minscore=0.01) - ldda_ids = [result['id'] for result in results] - lddas = [] - for ldda_id in ldda_ids: - ldda = trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(ldda_id) - if ldda: - lddas.append(ldda) - lddas = get_sorted_accessible_library_items(trans, cntrller, lddas, 'name') - else: - message = "Tell your Galaxy administrator that the directory %s does not contain valid whoosh indexes" % str(whoosh_index_dir) - ok = False - else: - message = "Whoosh is compatible with Python version 2.5 or greater. Your Python verison is not compatible." - ok = False - if not ok: - status = 'error' - lddas = [] - return status, message, lddas diff --git a/static/scripts/bundled/admin.bundled.js b/static/scripts/bundled/admin.bundled.js index 6ea8193ffcc9..70c700339f81 100644 --- a/static/scripts/bundled/admin.bundled.js +++ b/static/scripts/bundled/admin.bundled.js @@ -1,2 +1,2 @@ -webpackJsonp([1],{171:function(e,t,a){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var s=a(0),i=t(s),r=a(24),o=t(r),n=a(172),l=t(n),u=a(44),d=t(u),_=a(12),m=t(_),c=a(6),p=(t(c),a(8)),f=t(p),g=a(30),h=t(g),w=a(3),y=t(w),b=a(25),v=t(b),x=i.default;window.app=function(t,a){window.Galaxy=new o.default.GalaxyApp(t,a),Galaxy.debug("admin app");var s=h.default.extend({routes:{"(/)admin(/)users":"show_users","(/)admin(/)roles":"show_roles","(/)admin(/)groups":"show_groups","(/)admin(/)tool_versions":"show_tool_versions","(/)admin(/)quotas":"show_quotas","(/)admin(/)repositories":"show_repositories","(/)admin(/)forms":"show_forms","(/)admin(/)form(/)(:form_id)":"show_form"},authenticate:function(e,t){return Galaxy.user&&Galaxy.user.id&&Galaxy.user.get("is_admin")},show_users:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/users_list",url_data:Galaxy.params,dict_format:!0}))},show_roles:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/roles_list",url_data:Galaxy.params,dict_format:!0}))},show_groups:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/groups_list",url_data:Galaxy.params,dict_format:!0}))},show_repositories:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin_toolshed/browse_repositories",url_data:Galaxy.params,dict_format:!0}))},show_tool_versions:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/tool_versions_list",url_data:Galaxy.params,dict_format:!0}))},show_quotas:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/quotas_list",url_data:Galaxy.params,dict_format:!0}))},show_forms:function(){this.page.display(new m.default({url_base:Galaxy.root+"forms/forms_list",url_data:Galaxy.params,dict_format:!0}))},show_form:function(e){var t="?id="+f.default.get("id"),a={reset_user_password:{title:"Reset passwords",url:"admin/reset_user_password"+t,icon:"fa-user",submit_title:"Save new password",redirect:"admin/users"},manage_roles_and_groups_for_user:{url:"admin/manage_roles_and_groups_for_user"+t,icon:"fa-users",redirect:"admin/users"},manage_users_and_groups_for_role:{url:"admin/manage_users_and_groups_for_role"+t,redirect:"admin/roles"},manage_users_and_roles_for_group:{url:"admin/manage_users_and_roles_for_group"+t,redirect:"admin/groups"},manage_users_and_groups_for_quota:{url:"admin/manage_users_and_groups_for_quota"+t,redirect:"admin/quotas"},create_role:{url:"admin/create_role",redirect:"admin/roles"},create_group:{url:"admin/create_group",redirect:"admin/groups"},create_quota:{url:"admin/create_quota",redirect:"admin/quotas"},rename_role:{url:"admin/rename_role"+t,redirect:"admin/roles"},rename_group:{url:"admin/rename_group"+t,redirect:"admin/groups"},rename_quota:{url:"admin/rename_quota"+t,redirect:"admin/quotas"},edit_quota:{url:"admin/edit_quota"+t,redirect:"admin/quotas"},set_quota_default:{url:"admin/set_quota_default"+t,redirect:"admin/quotas"},create_form:{url:"forms/create_form",redirect:"admin/forms"},edit_form:{url:"forms/edit_form"+t,redirect:"admin/forms"}};this.page.display(new d.default.View(a[e]))}});x(function(){e.extend(t.config,{active_view:"admin"}),y.default.setWindowTitle("Administration"),Galaxy.page=new v.default.View(e.extend(t,{Left:l.default,Router:s}))})}}).call(t,a(1))},172:function(e,t,a){"use strict";(function(e,s,i){Object.defineProperty(t,"__esModule",{value:!0});var r=a(4),o=function(e){return e&&e.__esModule?e:{default:e}}(r),n=e.View.extend({initialize:function(t,a){var s=this;this.page=t,this.root=a.root,this.config=a.config,this.settings=a.settings,this.message=a.message,this.status=a.status,this.model=new e.Model({title:(0,o.default)("Administration")}),this.categories=new e.Collection([{title:"Server",items:[{title:"Data types",url:"admin/view_datatypes_registry"},{title:"Data tables",url:"admin/view_tool_data_tables"},{title:"Data libraries",url:"library_admin/browse_libraries"},{title:"Display applications",url:"admin/display_applications"},{title:"Manage jobs",url:"admin/jobs"},{title:"Local data",url:"data_manager"}]},{title:"User Management",items:[{title:"Users",url:"admin/users",target:"__use_router__"},{title:"Quotas",url:"admin/quotas",target:"__use_router__",enabled:s.config.enable_quotas},{title:"Groups",url:"admin/groups",target:"__use_router__"},{title:"Roles",url:"admin/roles",target:"__use_router__"},{title:"Forms",url:"admin/forms",target:"__use_router__"},{title:"API keys",url:"userskeys/all_users"},{title:"Impersonate a user",url:"admin/impersonate",enabled:s.config.allow_user_impersonation}]},{title:"Tool Management",items:[{title:"Install new tools",url:"admin_toolshed/browse_tool_sheds",enabled:s.settings.is_tool_shed_installed},{title:"Install new tools (Beta)",url:"admin_toolshed/browse_toolsheds",enabled:s.settings.is_tool_shed_installed&&s.config.enable_beta_ts_api_install},{title:"Monitor installation",url:"admin_toolshed/monitor_repository_installation",enabled:s.settings.installing_repository_ids},{title:"Manage tools",url:"admin/repositories",enabled:s.settings.is_repo_installed,target:"__use_router__"},{title:"Manage metadata",url:"admin_toolshed/reset_metadata_on_selected_installed_repositories",enabled:s.settings.is_repo_installed},{title:"Manage whitelist",url:"admin/sanitize_whitelist"},{title:"Manage dependencies",url:"admin/manage_tool_dependencies"},{title:"View lineage",url:"admin/tool_versions",target:"__use_router__"},{title:"View migration stages",url:"admin/review_tool_migration_stages"},{title:"View error logs",url:"admin/tool_errors"}]}]),this.setElement(this._template())},render:function(){var e=this;this.$el.empty(),this.categories.each(function(t){var a=s(e._templateSection(t.attributes)),r=a.find(".ui-side-section-body");i.each(t.get("items"),function(t){if(void 0===t.enabled||t.enabled){var a=s("").attr({href:e.root+t.url}).text((0,o.default)(t.title));"__use_router__"==t.target?a.on("click",function(a){a.preventDefault(),e.page.router.push(t.url)}):a.attr("target","galaxy_main"),r.append(s("
").addClass("ui-side-section-body-title").append(a))}}),e.$el.append(a)}),this.page.$("#galaxy_main").prop("src",this.root+"admin/center?message="+this.message+"&status="+this.status)},_templateSection:function(e){return["
",'
'+(0,o.default)(e.title)+"
",'
',"
"].join("")},_template:function(){return'
'},toString:function(){return"adminPanel"}});t.default=n}).call(t,a(2),a(0),a(1))},30:function(e,t,a){"use strict";(function(e){function s(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=a(0),r=s(i),o=a(8),n=s(o),l=a(6),u=s(l),d=r.default,_=e.Router.extend({initialize:function(e,t){this.page=e,this.options=t},push:function(e,t){t=t||{},t.__identifer=Math.random().toString(36).substr(2),d.isEmptyObject(t)||(e+=-1==e.indexOf("?")?"?":"&",e+=d.param(t,!0)),Galaxy.params=t,this.navigate(e,{trigger:!0})},execute:function(e,t,a){Galaxy.debug("router execute:",e,t,a);var s=n.default.parse(t.pop());t.push(s),e&&(this.authenticate(t,a)?e.apply(this,t):this.access_denied())},authenticate:function(e,t){return!0},access_denied:function(){this.page.display(new u.default.Message({status:"danger",message:"You must be logged in with proper credentials to make this request.",persistent:!0}))}});t.default=_}).call(t,a(2))},44:function(e,t,a){"use strict";(function(e,s){function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=a(9),o=i(r),n=a(6),l=i(n),u=e.View.extend({initialize:function(t){this.model=new e.Model(t),this.url=this.model.get("url"),this.redirect=this.model.get("redirect"),this.setElement("
"),this.render()},render:function(){var e=this;s.ajax({url:Galaxy.root+this.url,type:"GET"}).done(function(t){var a=s.extend({},e.model.attributes,t),i=new o.default({title:a.title,message:a.message,status:a.status||"warning",icon:a.icon,inputs:a.inputs,buttons:{submit:new l.default.Button({tooltip:a.submit_tooltip,title:a.submit_title||"Save",icon:a.submit_icon||"fa-save",cls:"btn btn-primary ui-clear-float",onclick:function(){e._submit(i)}})}});e.$el.empty().append(i.$el)}).fail(function(t){e.$el.empty().append(new l.default.Message({message:"Failed to load resource "+e.url+".",status:"danger",persistent:!0}).$el)})},_submit:function(e){var t=this;s.ajax({url:Galaxy.root+t.url,data:JSON.stringify(e.data.create()),type:"PUT",contentType:"application/json"}).done(function(a){var i={message:a.message,status:"success",persistent:!1};t.redirect?window.location=Galaxy.root+t.redirect+"?"+s.param(i):(e.data.matchModel(a,function(t,a){e.field_list[a].value(t.value)}),t._showMessage(e,i))}).fail(function(a){t._showMessage(e,{message:a.responseJSON.err_msg,status:"danger",persistent:!1})})},_showMessage:function(e,t){e.$el.parents().filter(function(){return-1!=["auto","scroll"].indexOf(s(this).css("overflow"))}).first().animate({scrollTop:0},500),e.message.update(t)}});t.default={View:u}}).call(t,a(2),a(0))}},[171]); +webpackJsonp([1],{171:function(e,t,a){"use strict";(function(e){function t(e){return e&&e.__esModule?e:{default:e}}var s=a(0),i=t(s),r=a(24),o=t(r),n=a(172),l=t(n),u=a(44),d=t(u),_=a(12),m=t(_),c=a(6),p=(t(c),a(8)),f=t(p),g=a(30),h=t(g),w=a(3),y=t(w),b=a(25),v=t(b),x=i.default;window.app=function(t,a){window.Galaxy=new o.default.GalaxyApp(t,a),Galaxy.debug("admin app");var s=h.default.extend({routes:{"(/)admin(/)users":"show_users","(/)admin(/)roles":"show_roles","(/)admin(/)groups":"show_groups","(/)admin(/)tool_versions":"show_tool_versions","(/)admin(/)quotas":"show_quotas","(/)admin(/)repositories":"show_repositories","(/)admin(/)forms":"show_forms","(/)admin(/)form(/)(:form_id)":"show_form"},authenticate:function(e,t){return Galaxy.user&&Galaxy.user.id&&Galaxy.user.get("is_admin")},show_users:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/users_list",url_data:Galaxy.params,dict_format:!0}))},show_roles:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/roles_list",url_data:Galaxy.params,dict_format:!0}))},show_groups:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/groups_list",url_data:Galaxy.params,dict_format:!0}))},show_repositories:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin_toolshed/browse_repositories",url_data:Galaxy.params,dict_format:!0}))},show_tool_versions:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/tool_versions_list",url_data:Galaxy.params,dict_format:!0}))},show_quotas:function(){this.page.display(new m.default({url_base:Galaxy.root+"admin/quotas_list",url_data:Galaxy.params,dict_format:!0}))},show_forms:function(){this.page.display(new m.default({url_base:Galaxy.root+"forms/forms_list",url_data:Galaxy.params,dict_format:!0}))},show_form:function(e){var t="?id="+f.default.get("id"),a={reset_user_password:{title:"Reset passwords",url:"admin/reset_user_password"+t,icon:"fa-user",submit_title:"Save new password",redirect:"admin/users"},manage_roles_and_groups_for_user:{url:"admin/manage_roles_and_groups_for_user"+t,icon:"fa-users",redirect:"admin/users"},manage_users_and_groups_for_role:{url:"admin/manage_users_and_groups_for_role"+t,redirect:"admin/roles"},manage_users_and_roles_for_group:{url:"admin/manage_users_and_roles_for_group"+t,redirect:"admin/groups"},manage_users_and_groups_for_quota:{url:"admin/manage_users_and_groups_for_quota"+t,redirect:"admin/quotas"},create_role:{url:"admin/create_role",redirect:"admin/roles"},create_group:{url:"admin/create_group",redirect:"admin/groups"},create_quota:{url:"admin/create_quota",redirect:"admin/quotas"},rename_role:{url:"admin/rename_role"+t,redirect:"admin/roles"},rename_group:{url:"admin/rename_group"+t,redirect:"admin/groups"},rename_quota:{url:"admin/rename_quota"+t,redirect:"admin/quotas"},edit_quota:{url:"admin/edit_quota"+t,redirect:"admin/quotas"},set_quota_default:{url:"admin/set_quota_default"+t,redirect:"admin/quotas"},create_form:{url:"forms/create_form",redirect:"admin/forms"},edit_form:{url:"forms/edit_form"+t,redirect:"admin/forms"}};this.page.display(new d.default.View(a[e]))}});x(function(){e.extend(t.config,{active_view:"admin"}),y.default.setWindowTitle("Administration"),Galaxy.page=new v.default.View(e.extend(t,{Left:l.default,Router:s}))})}}).call(t,a(1))},172:function(e,t,a){"use strict";(function(e,s,i){Object.defineProperty(t,"__esModule",{value:!0});var r=a(4),o=function(e){return e&&e.__esModule?e:{default:e}}(r),n=e.View.extend({initialize:function(t,a){var s=this;this.page=t,this.root=a.root,this.config=a.config,this.settings=a.settings,this.message=a.message,this.status=a.status,this.model=new e.Model({title:(0,o.default)("Administration")}),this.categories=new e.Collection([{title:"Server",items:[{title:"Data types",url:"admin/view_datatypes_registry"},{title:"Data tables",url:"admin/view_tool_data_tables"},{title:"Display applications",url:"admin/display_applications"},{title:"Manage jobs",url:"admin/jobs"},{title:"Local data",url:"data_manager"}]},{title:"User Management",items:[{title:"Users",url:"admin/users",target:"__use_router__"},{title:"Quotas",url:"admin/quotas",target:"__use_router__",enabled:s.config.enable_quotas},{title:"Groups",url:"admin/groups",target:"__use_router__"},{title:"Roles",url:"admin/roles",target:"__use_router__"},{title:"Forms",url:"admin/forms",target:"__use_router__"},{title:"API keys",url:"userskeys/all_users"},{title:"Impersonate a user",url:"admin/impersonate",enabled:s.config.allow_user_impersonation}]},{title:"Tool Management",items:[{title:"Install new tools",url:"admin_toolshed/browse_tool_sheds",enabled:s.settings.is_tool_shed_installed},{title:"Install new tools (Beta)",url:"admin_toolshed/browse_toolsheds",enabled:s.settings.is_tool_shed_installed&&s.config.enable_beta_ts_api_install},{title:"Monitor installation",url:"admin_toolshed/monitor_repository_installation",enabled:s.settings.installing_repository_ids},{title:"Manage tools",url:"admin/repositories",enabled:s.settings.is_repo_installed,target:"__use_router__"},{title:"Manage metadata",url:"admin_toolshed/reset_metadata_on_selected_installed_repositories",enabled:s.settings.is_repo_installed},{title:"Manage whitelist",url:"admin/sanitize_whitelist"},{title:"Manage dependencies",url:"admin/manage_tool_dependencies"},{title:"View lineage",url:"admin/tool_versions",target:"__use_router__"},{title:"View migration stages",url:"admin/review_tool_migration_stages"},{title:"View error logs",url:"admin/tool_errors"}]}]),this.setElement(this._template())},render:function(){var e=this;this.$el.empty(),this.categories.each(function(t){var a=s(e._templateSection(t.attributes)),r=a.find(".ui-side-section-body");i.each(t.get("items"),function(t){if(void 0===t.enabled||t.enabled){var a=s("").attr({href:e.root+t.url}).text((0,o.default)(t.title));"__use_router__"==t.target?a.on("click",function(a){a.preventDefault(),e.page.router.push(t.url)}):a.attr("target","galaxy_main"),r.append(s("
").addClass("ui-side-section-body-title").append(a))}}),e.$el.append(a)}),this.page.$("#galaxy_main").prop("src",this.root+"admin/center?message="+this.message+"&status="+this.status)},_templateSection:function(e){return["
",'
'+(0,o.default)(e.title)+"
",'
',"
"].join("")},_template:function(){return'
'},toString:function(){return"adminPanel"}});t.default=n}).call(t,a(2),a(0),a(1))},30:function(e,t,a){"use strict";(function(e){function s(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=a(0),r=s(i),o=a(8),n=s(o),l=a(6),u=s(l),d=r.default,_=e.Router.extend({initialize:function(e,t){this.page=e,this.options=t},push:function(e,t){t=t||{},t.__identifer=Math.random().toString(36).substr(2),d.isEmptyObject(t)||(e+=-1==e.indexOf("?")?"?":"&",e+=d.param(t,!0)),Galaxy.params=t,this.navigate(e,{trigger:!0})},execute:function(e,t,a){Galaxy.debug("router execute:",e,t,a);var s=n.default.parse(t.pop());t.push(s),e&&(this.authenticate(t,a)?e.apply(this,t):this.access_denied())},authenticate:function(e,t){return!0},access_denied:function(){this.page.display(new u.default.Message({status:"danger",message:"You must be logged in with proper credentials to make this request.",persistent:!0}))}});t.default=_}).call(t,a(2))},44:function(e,t,a){"use strict";(function(e,s){function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=a(9),o=i(r),n=a(6),l=i(n),u=e.View.extend({initialize:function(t){this.model=new e.Model(t),this.url=this.model.get("url"),this.redirect=this.model.get("redirect"),this.setElement("
"),this.render()},render:function(){var e=this;s.ajax({url:Galaxy.root+this.url,type:"GET"}).done(function(t){var a=s.extend({},e.model.attributes,t),i=new o.default({title:a.title,message:a.message,status:a.status||"warning",icon:a.icon,inputs:a.inputs,buttons:{submit:new l.default.Button({tooltip:a.submit_tooltip,title:a.submit_title||"Save",icon:a.submit_icon||"fa-save",cls:"btn btn-primary ui-clear-float",onclick:function(){e._submit(i)}})}});e.$el.empty().append(i.$el)}).fail(function(t){e.$el.empty().append(new l.default.Message({message:"Failed to load resource "+e.url+".",status:"danger",persistent:!0}).$el)})},_submit:function(e){var t=this;s.ajax({url:Galaxy.root+t.url,data:JSON.stringify(e.data.create()),type:"PUT",contentType:"application/json"}).done(function(a){var i={message:a.message,status:"success",persistent:!1};t.redirect?window.location=Galaxy.root+t.redirect+"?"+s.param(i):(e.data.matchModel(a,function(t,a){e.field_list[a].value(t.value)}),t._showMessage(e,i))}).fail(function(a){t._showMessage(e,{message:a.responseJSON.err_msg,status:"danger",persistent:!1})})},_showMessage:function(e,t){e.$el.parents().filter(function(){return-1!=["auto","scroll"].indexOf(s(this).css("overflow"))}).first().animate({scrollTop:0},500),e.message.update(t)}});t.default={View:u}}).call(t,a(2),a(0))}},[171]); //# sourceMappingURL=admin.bundled.js.map \ No newline at end of file diff --git a/static/scripts/bundled/admin.bundled.js.map b/static/scripts/bundled/admin.bundled.js.map index c70175c975ba..82a639ed8745 100644 --- a/static/scripts/bundled/admin.bundled.js.map +++ b/static/scripts/bundled/admin.bundled.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///admin.bundled.js","webpack:///./galaxy/scripts/apps/admin.js","webpack:///./galaxy/scripts/apps/panels/admin-panel.js","webpack:///./galaxy/scripts/layout/router.js","webpack:///./galaxy/scripts/mvc/form/form-wrapper.js"],"names":["webpackJsonp","171","module","exports","__webpack_require__","_","_interopRequireDefault","obj","__esModule","default","_jquery","_jquery2","_galaxy","_galaxy2","_adminPanel","_adminPanel2","_formWrapper","_formWrapper2","_gridView","_gridView2","_uiMisc","_queryStringParsing","_queryStringParsing2","_router","_router2","_utils","_utils2","_page","_page2","$","window","app","options","bootstrapped","Galaxy","GalaxyApp","debug","AdminRouter","extend","routes","(/)admin(/)users","(/)admin(/)roles","(/)admin(/)groups","(/)admin(/)tool_versions","(/)admin(/)quotas","(/)admin(/)repositories","(/)admin(/)forms","(/)admin(/)form(/)(:form_id)","authenticate","args","name","user","id","get","show_users","this","page","display","url_base","root","url_data","params","dict_format","show_roles","show_groups","show_repositories","show_tool_versions","show_quotas","show_forms","show_form","form_id","form_defs","reset_user_password","title","url","icon","submit_title","redirect","manage_roles_and_groups_for_user","manage_users_and_groups_for_role","manage_users_and_roles_for_group","manage_users_and_groups_for_quota","create_role","create_group","create_quota","rename_role","rename_group","rename_quota","edit_quota","set_quota_default","create_form","edit_form","View","config","active_view","setWindowTitle","Left","Router","call","172","Backbone","Object","defineProperty","value","_localization","_localization2","AdminPanel","initialize","self","settings","message","status","model","Model","categories","Collection","items","target","enabled","enable_quotas","allow_user_impersonation","is_tool_shed_installed","enable_beta_ts_api_install","installing_repository_ids","is_repo_installed","setElement","_template","render","$el","empty","each","category","$section","_templateSection","attributes","$entries","find","item","undefined","$link","attr","href","text","on","e","preventDefault","router","push","append","addClass","prop","join","toString","30","_uiMisc2","data","__identifer","Math","random","substr","isEmptyObject","indexOf","param","navigate","trigger","execute","callback","queryObj","parse","pop","apply","access_denied","Message","persistent","44","_formView","_formView2","ajax","type","done","response","form","inputs","buttons","submit","Button","tooltip","submit_tooltip","submit_icon","cls","onclick","_submit","fail","JSON","stringify","create","contentType","success_message","location","matchModel","input","input_id","field_list","_showMessage","responseJSON","err_msg","parents","filter","css","first","animate","scrollTop","update"],"mappings":"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","file":"admin.bundled.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 171:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(_) {\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _galaxy = __webpack_require__(24);\n\nvar _galaxy2 = _interopRequireDefault(_galaxy);\n\nvar _adminPanel = __webpack_require__(172);\n\nvar _adminPanel2 = _interopRequireDefault(_adminPanel);\n\nvar _formWrapper = __webpack_require__(44);\n\nvar _formWrapper2 = _interopRequireDefault(_formWrapper);\n\nvar _gridView = __webpack_require__(12);\n\nvar _gridView2 = _interopRequireDefault(_gridView);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _queryStringParsing = __webpack_require__(8);\n\nvar _queryStringParsing2 = _interopRequireDefault(_queryStringParsing);\n\nvar _router = __webpack_require__(30);\n\nvar _router2 = _interopRequireDefault(_router);\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _page = __webpack_require__(25);\n\nvar _page2 = _interopRequireDefault(_page);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n\n\nwindow.app = function app(options, bootstrapped) {\n window.Galaxy = new _galaxy2.default.GalaxyApp(options, bootstrapped);\n Galaxy.debug(\"admin app\");\n\n /** Routes */\n var AdminRouter = _router2.default.extend({\n routes: {\n \"(/)admin(/)users\": \"show_users\",\n \"(/)admin(/)roles\": \"show_roles\",\n \"(/)admin(/)groups\": \"show_groups\",\n \"(/)admin(/)tool_versions\": \"show_tool_versions\",\n \"(/)admin(/)quotas\": \"show_quotas\",\n \"(/)admin(/)repositories\": \"show_repositories\",\n \"(/)admin(/)forms\": \"show_forms\",\n \"(/)admin(/)form(/)(:form_id)\": \"show_form\"\n },\n\n authenticate: function authenticate(args, name) {\n return Galaxy.user && Galaxy.user.id && Galaxy.user.get(\"is_admin\");\n },\n\n show_users: function show_users() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/users_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_roles: function show_roles() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/roles_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_groups: function show_groups() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/groups_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_repositories: function show_repositories() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin_toolshed/browse_repositories\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_tool_versions: function show_tool_versions() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/tool_versions_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_quotas: function show_quotas() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/quotas_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_forms: function show_forms() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"forms/forms_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_form: function show_form(form_id) {\n var id = \"?id=\" + _queryStringParsing2.default.get(\"id\");\n var form_defs = {\n reset_user_password: {\n title: \"Reset passwords\",\n url: \"admin/reset_user_password\" + id,\n icon: \"fa-user\",\n submit_title: \"Save new password\",\n redirect: \"admin/users\"\n },\n manage_roles_and_groups_for_user: {\n url: \"admin/manage_roles_and_groups_for_user\" + id,\n icon: \"fa-users\",\n redirect: \"admin/users\"\n },\n manage_users_and_groups_for_role: {\n url: \"admin/manage_users_and_groups_for_role\" + id,\n redirect: \"admin/roles\"\n },\n manage_users_and_roles_for_group: {\n url: \"admin/manage_users_and_roles_for_group\" + id,\n redirect: \"admin/groups\"\n },\n manage_users_and_groups_for_quota: {\n url: \"admin/manage_users_and_groups_for_quota\" + id,\n redirect: \"admin/quotas\"\n },\n create_role: {\n url: \"admin/create_role\",\n redirect: \"admin/roles\"\n },\n create_group: {\n url: \"admin/create_group\",\n redirect: \"admin/groups\"\n },\n create_quota: {\n url: \"admin/create_quota\",\n redirect: \"admin/quotas\"\n },\n rename_role: {\n url: \"admin/rename_role\" + id,\n redirect: \"admin/roles\"\n },\n rename_group: {\n url: \"admin/rename_group\" + id,\n redirect: \"admin/groups\"\n },\n rename_quota: {\n url: \"admin/rename_quota\" + id,\n redirect: \"admin/quotas\"\n },\n edit_quota: {\n url: \"admin/edit_quota\" + id,\n redirect: \"admin/quotas\"\n },\n set_quota_default: {\n url: \"admin/set_quota_default\" + id,\n redirect: \"admin/quotas\"\n },\n create_form: {\n url: \"forms/create_form\",\n redirect: \"admin/forms\"\n },\n edit_form: {\n url: \"forms/edit_form\" + id,\n redirect: \"admin/forms\"\n }\n };\n this.page.display(new _formWrapper2.default.View(form_defs[form_id]));\n }\n });\n\n $(function () {\n _.extend(options.config, { active_view: \"admin\" });\n _utils2.default.setWindowTitle(\"Administration\");\n Galaxy.page = new _page2.default.View(_.extend(options, {\n Left: _adminPanel2.default,\n Router: AdminRouter\n }));\n });\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 172:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AdminPanel = Backbone.View.extend({\n initialize: function initialize(page, options) {\n var self = this;\n this.page = page;\n this.root = options.root;\n this.config = options.config;\n this.settings = options.settings;\n this.message = options.message;\n this.status = options.status;\n this.model = new Backbone.Model({\n title: (0, _localization2.default)(\"Administration\")\n });\n this.categories = new Backbone.Collection([{\n title: \"Server\",\n items: [{\n title: \"Data types\",\n url: \"admin/view_datatypes_registry\"\n }, {\n title: \"Data tables\",\n url: \"admin/view_tool_data_tables\"\n }, {\n title: \"Data libraries\",\n url: \"library_admin/browse_libraries\"\n }, {\n title: \"Display applications\",\n url: \"admin/display_applications\"\n }, {\n title: \"Manage jobs\",\n url: \"admin/jobs\"\n }, {\n title: \"Local data\",\n url: \"data_manager\"\n }]\n }, {\n title: \"User Management\",\n items: [{\n title: \"Users\",\n url: \"admin/users\",\n target: \"__use_router__\"\n }, {\n title: \"Quotas\",\n url: \"admin/quotas\",\n target: \"__use_router__\",\n enabled: self.config.enable_quotas\n }, {\n title: \"Groups\",\n url: \"admin/groups\",\n target: \"__use_router__\"\n }, {\n title: \"Roles\",\n url: \"admin/roles\",\n target: \"__use_router__\"\n }, {\n title: \"Forms\",\n url: \"admin/forms\",\n target: \"__use_router__\"\n }, {\n title: \"API keys\",\n url: \"userskeys/all_users\"\n }, {\n title: \"Impersonate a user\",\n url: \"admin/impersonate\",\n enabled: self.config.allow_user_impersonation\n }]\n }, {\n title: \"Tool Management\",\n items: [{\n title: \"Install new tools\",\n url: \"admin_toolshed/browse_tool_sheds\",\n enabled: self.settings.is_tool_shed_installed\n }, {\n title: \"Install new tools (Beta)\",\n url: \"admin_toolshed/browse_toolsheds\",\n enabled: self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install\n }, {\n title: \"Monitor installation\",\n url: \"admin_toolshed/monitor_repository_installation\",\n enabled: self.settings.installing_repository_ids\n }, {\n title: \"Manage tools\",\n url: \"admin/repositories\",\n enabled: self.settings.is_repo_installed,\n target: \"__use_router__\"\n }, {\n title: \"Manage metadata\",\n url: \"admin_toolshed/reset_metadata_on_selected_installed_repositories\",\n enabled: self.settings.is_repo_installed\n }, {\n title: \"Manage whitelist\",\n url: \"admin/sanitize_whitelist\"\n }, {\n title: \"Manage dependencies\",\n url: \"admin/manage_tool_dependencies\"\n }, {\n title: \"View lineage\",\n url: \"admin/tool_versions\",\n target: \"__use_router__\"\n }, {\n title: \"View migration stages\",\n url: \"admin/review_tool_migration_stages\"\n }, {\n title: \"View error logs\",\n url: \"admin/tool_errors\"\n }]\n }]);\n this.setElement(this._template());\n },\n\n render: function render() {\n var self = this;\n this.$el.empty();\n this.categories.each(function (category) {\n var $section = $(self._templateSection(category.attributes));\n var $entries = $section.find(\".ui-side-section-body\");\n _.each(category.get(\"items\"), function (item) {\n if (item.enabled === undefined || item.enabled) {\n var $link = $(\"\").attr({ href: self.root + item.url }).text((0, _localization2.default)(item.title));\n if (item.target == \"__use_router__\") {\n $link.on(\"click\", function (e) {\n e.preventDefault();\n self.page.router.push(item.url);\n });\n } else {\n $link.attr(\"target\", \"galaxy_main\");\n }\n $entries.append($(\"
\").addClass(\"ui-side-section-body-title\").append($link));\n }\n });\n self.$el.append($section);\n });\n this.page.$(\"#galaxy_main\").prop(\"src\", this.root + \"admin/center?message=\" + this.message + \"&status=\" + this.status);\n },\n\n _templateSection: function _templateSection(options) {\n return [\"
\", \"
\" + (0, _localization2.default)(options.title) + \"
\", '
', \"
\"].join(\"\");\n },\n\n _template: function _template() {\n return '
';\n },\n\n toString: function toString() {\n return \"adminPanel\";\n }\n});\n\nexports.default = AdminPanel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _queryStringParsing = __webpack_require__(8);\n\nvar _queryStringParsing2 = _interopRequireDefault(_queryStringParsing);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n\n\nvar Router = Backbone.Router.extend({\n // TODO: not many client routes at this point - fill and remove from server.\n // since we're at root here, this may be the last to be routed entirely on the client.\n initialize: function initialize(page, options) {\n this.page = page;\n this.options = options;\n },\n\n /** helper to push a new navigation state */\n push: function push(url, data) {\n data = data || {};\n data.__identifer = Math.random().toString(36).substr(2);\n if (!$.isEmptyObject(data)) {\n url += url.indexOf(\"?\") == -1 ? \"?\" : \"&\";\n url += $.param(data, true);\n }\n Galaxy.params = data;\n this.navigate(url, { trigger: true });\n },\n\n /** override to parse query string into obj and send to each route */\n execute: function execute(callback, args, name) {\n Galaxy.debug(\"router execute:\", callback, args, name);\n var queryObj = _queryStringParsing2.default.parse(args.pop());\n args.push(queryObj);\n if (callback) {\n if (this.authenticate(args, name)) {\n callback.apply(this, args);\n } else {\n this.access_denied();\n }\n }\n },\n\n authenticate: function authenticate(args, name) {\n return true;\n },\n\n access_denied: function access_denied() {\n this.page.display(new _uiMisc2.default.Message({\n status: \"danger\",\n message: \"You must be logged in with proper credentials to make this request.\",\n persistent: true\n }));\n }\n});\n\nexports.default = Router;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n\n/***/ 44:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _formView = __webpack_require__(9);\n\nvar _formView2 = _interopRequireDefault(_formView);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** Generic form view */\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n this.model = new Backbone.Model(options);\n this.url = this.model.get(\"url\");\n this.redirect = this.model.get(\"redirect\");\n this.setElement(\"
\");\n this.render();\n },\n\n render: function render() {\n var self = this;\n $.ajax({\n url: Galaxy.root + this.url,\n type: \"GET\"\n }).done(function (response) {\n var options = $.extend({}, self.model.attributes, response);\n var form = new _formView2.default({\n title: options.title,\n message: options.message,\n status: options.status || \"warning\",\n icon: options.icon,\n inputs: options.inputs,\n buttons: {\n submit: new _uiMisc2.default.Button({\n tooltip: options.submit_tooltip,\n title: options.submit_title || \"Save\",\n icon: options.submit_icon || \"fa-save\",\n cls: \"btn btn-primary ui-clear-float\",\n onclick: function onclick() {\n self._submit(form);\n }\n })\n }\n });\n self.$el.empty().append(form.$el);\n }).fail(function (response) {\n self.$el.empty().append(new _uiMisc2.default.Message({\n message: \"Failed to load resource \" + self.url + \".\",\n status: \"danger\",\n persistent: true\n }).$el);\n });\n },\n\n _submit: function _submit(form) {\n var self = this;\n $.ajax({\n url: Galaxy.root + self.url,\n data: JSON.stringify(form.data.create()),\n type: \"PUT\",\n contentType: \"application/json\"\n }).done(function (response) {\n var success_message = {\n message: response.message,\n status: \"success\",\n persistent: false\n };\n if (self.redirect) {\n window.location = Galaxy.root + self.redirect + \"?\" + $.param(success_message);\n } else {\n form.data.matchModel(response, function (input, input_id) {\n form.field_list[input_id].value(input.value);\n });\n self._showMessage(form, success_message);\n }\n }).fail(function (response) {\n self._showMessage(form, {\n message: response.responseJSON.err_msg,\n status: \"danger\",\n persistent: false\n });\n });\n },\n\n _showMessage: function _showMessage(form, options) {\n var $panel = form.$el.parents().filter(function () {\n return [\"auto\", \"scroll\"].indexOf($(this).css(\"overflow\")) != -1;\n }).first();\n $panel.animate({ scrollTop: 0 }, 500);\n form.message.update(options);\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ })\n\n},[171]);\n\n\n// WEBPACK FOOTER //\n// admin.bundled.js","import jQuery from \"jquery\";\nvar $ = jQuery;\nimport GalaxyApp from \"galaxy\";\nimport AdminPanel from \"./panels/admin-panel\";\nimport FormWrapper from \"mvc/form/form-wrapper\";\nimport GridView from \"mvc/grid/grid-view\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport QueryStringParsing from \"utils/query-string-parsing\";\nimport Router from \"layout/router\";\nimport Utils from \"utils/utils\";\nimport Page from \"layout/page\";\n\nwindow.app = function app(options, bootstrapped) {\n window.Galaxy = new GalaxyApp.GalaxyApp(options, bootstrapped);\n Galaxy.debug(\"admin app\");\n\n /** Routes */\n var AdminRouter = Router.extend({\n routes: {\n \"(/)admin(/)users\": \"show_users\",\n \"(/)admin(/)roles\": \"show_roles\",\n \"(/)admin(/)groups\": \"show_groups\",\n \"(/)admin(/)tool_versions\": \"show_tool_versions\",\n \"(/)admin(/)quotas\": \"show_quotas\",\n \"(/)admin(/)repositories\": \"show_repositories\",\n \"(/)admin(/)forms\": \"show_forms\",\n \"(/)admin(/)form(/)(:form_id)\": \"show_form\"\n },\n\n authenticate: function(args, name) {\n return Galaxy.user && Galaxy.user.id && Galaxy.user.get(\"is_admin\");\n },\n\n show_users: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/users_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_roles: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/roles_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_groups: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/groups_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_repositories: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin_toolshed/browse_repositories`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_tool_versions: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/tool_versions_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_quotas: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/quotas_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_forms: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}forms/forms_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_form: function(form_id) {\n var id = `?id=${QueryStringParsing.get(\"id\")}`;\n var form_defs = {\n reset_user_password: {\n title: \"Reset passwords\",\n url: `admin/reset_user_password${id}`,\n icon: \"fa-user\",\n submit_title: \"Save new password\",\n redirect: \"admin/users\"\n },\n manage_roles_and_groups_for_user: {\n url: `admin/manage_roles_and_groups_for_user${id}`,\n icon: \"fa-users\",\n redirect: \"admin/users\"\n },\n manage_users_and_groups_for_role: {\n url: `admin/manage_users_and_groups_for_role${id}`,\n redirect: \"admin/roles\"\n },\n manage_users_and_roles_for_group: {\n url: `admin/manage_users_and_roles_for_group${id}`,\n redirect: \"admin/groups\"\n },\n manage_users_and_groups_for_quota: {\n url: `admin/manage_users_and_groups_for_quota${id}`,\n redirect: \"admin/quotas\"\n },\n create_role: {\n url: \"admin/create_role\",\n redirect: \"admin/roles\"\n },\n create_group: {\n url: \"admin/create_group\",\n redirect: \"admin/groups\"\n },\n create_quota: {\n url: \"admin/create_quota\",\n redirect: \"admin/quotas\"\n },\n rename_role: {\n url: `admin/rename_role${id}`,\n redirect: \"admin/roles\"\n },\n rename_group: {\n url: `admin/rename_group${id}`,\n redirect: \"admin/groups\"\n },\n rename_quota: {\n url: `admin/rename_quota${id}`,\n redirect: \"admin/quotas\"\n },\n edit_quota: {\n url: `admin/edit_quota${id}`,\n redirect: \"admin/quotas\"\n },\n set_quota_default: {\n url: `admin/set_quota_default${id}`,\n redirect: \"admin/quotas\"\n },\n create_form: {\n url: \"forms/create_form\",\n redirect: \"admin/forms\"\n },\n edit_form: {\n url: `forms/edit_form${id}`,\n redirect: \"admin/forms\"\n }\n };\n this.page.display(new FormWrapper.View(form_defs[form_id]));\n }\n });\n\n $(() => {\n _.extend(options.config, { active_view: \"admin\" });\n Utils.setWindowTitle(\"Administration\");\n Galaxy.page = new Page.View(\n _.extend(options, {\n Left: AdminPanel,\n Router: AdminRouter\n })\n );\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/admin.js","import _l from \"utils/localization\";\n\nvar AdminPanel = Backbone.View.extend({\n initialize: function(page, options) {\n var self = this;\n this.page = page;\n this.root = options.root;\n this.config = options.config;\n this.settings = options.settings;\n this.message = options.message;\n this.status = options.status;\n this.model = new Backbone.Model({\n title: _l(\"Administration\")\n });\n this.categories = new Backbone.Collection([\n {\n title: \"Server\",\n items: [\n {\n title: \"Data types\",\n url: \"admin/view_datatypes_registry\"\n },\n {\n title: \"Data tables\",\n url: \"admin/view_tool_data_tables\"\n },\n {\n title: \"Data libraries\",\n url: \"library_admin/browse_libraries\"\n },\n {\n title: \"Display applications\",\n url: \"admin/display_applications\"\n },\n {\n title: \"Manage jobs\",\n url: \"admin/jobs\"\n },\n {\n title: \"Local data\",\n url: \"data_manager\"\n }\n ]\n },\n {\n title: \"User Management\",\n items: [\n {\n title: \"Users\",\n url: \"admin/users\",\n target: \"__use_router__\"\n },\n {\n title: \"Quotas\",\n url: \"admin/quotas\",\n target: \"__use_router__\",\n enabled: self.config.enable_quotas\n },\n {\n title: \"Groups\",\n url: \"admin/groups\",\n target: \"__use_router__\"\n },\n {\n title: \"Roles\",\n url: \"admin/roles\",\n target: \"__use_router__\"\n },\n {\n title: \"Forms\",\n url: \"admin/forms\",\n target: \"__use_router__\"\n },\n {\n title: \"API keys\",\n url: \"userskeys/all_users\"\n },\n {\n title: \"Impersonate a user\",\n url: \"admin/impersonate\",\n enabled: self.config.allow_user_impersonation\n }\n ]\n },\n {\n title: \"Tool Management\",\n items: [\n {\n title: \"Install new tools\",\n url: \"admin_toolshed/browse_tool_sheds\",\n enabled: self.settings.is_tool_shed_installed\n },\n {\n title: \"Install new tools (Beta)\",\n url: \"admin_toolshed/browse_toolsheds\",\n enabled: self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install\n },\n {\n title: \"Monitor installation\",\n url: \"admin_toolshed/monitor_repository_installation\",\n enabled: self.settings.installing_repository_ids\n },\n {\n title: \"Manage tools\",\n url: \"admin/repositories\",\n enabled: self.settings.is_repo_installed,\n target: \"__use_router__\"\n },\n {\n title: \"Manage metadata\",\n url: \"admin_toolshed/reset_metadata_on_selected_installed_repositories\",\n enabled: self.settings.is_repo_installed\n },\n {\n title: \"Manage whitelist\",\n url: \"admin/sanitize_whitelist\"\n },\n {\n title: \"Manage dependencies\",\n url: \"admin/manage_tool_dependencies\"\n },\n {\n title: \"View lineage\",\n url: \"admin/tool_versions\",\n target: \"__use_router__\"\n },\n {\n title: \"View migration stages\",\n url: \"admin/review_tool_migration_stages\"\n },\n {\n title: \"View error logs\",\n url: \"admin/tool_errors\"\n }\n ]\n }\n ]);\n this.setElement(this._template());\n },\n\n render: function() {\n var self = this;\n this.$el.empty();\n this.categories.each(category => {\n var $section = $(self._templateSection(category.attributes));\n var $entries = $section.find(\".ui-side-section-body\");\n _.each(category.get(\"items\"), item => {\n if (item.enabled === undefined || item.enabled) {\n var $link = $(\"\")\n .attr({ href: self.root + item.url })\n .text(_l(item.title));\n if (item.target == \"__use_router__\") {\n $link.on(\"click\", e => {\n e.preventDefault();\n self.page.router.push(item.url);\n });\n } else {\n $link.attr(\"target\", \"galaxy_main\");\n }\n $entries.append(\n $(\"
\")\n .addClass(\"ui-side-section-body-title\")\n .append($link)\n );\n }\n });\n self.$el.append($section);\n });\n this.page\n .$(\"#galaxy_main\")\n .prop(\"src\", `${this.root}admin/center?message=${this.message}&status=${this.status}`);\n },\n\n _templateSection: function(options) {\n return [\n \"
\",\n `
${_l(options.title)}
`,\n '
',\n \"
\"\n ].join(\"\");\n },\n\n _template: function() {\n return '
';\n },\n\n toString: function() {\n return \"adminPanel\";\n }\n});\n\nexport default AdminPanel;\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/panels/admin-panel.js","import jQuery from \"jquery\";\nvar $ = jQuery;\nimport QUERY_STRING from \"utils/query-string-parsing\";\nimport Ui from \"mvc/ui/ui-misc\";\n\nvar Router = Backbone.Router.extend({\n // TODO: not many client routes at this point - fill and remove from server.\n // since we're at root here, this may be the last to be routed entirely on the client.\n initialize: function(page, options) {\n this.page = page;\n this.options = options;\n },\n\n /** helper to push a new navigation state */\n push: function(url, data) {\n data = data || {};\n data.__identifer = Math.random()\n .toString(36)\n .substr(2);\n if (!$.isEmptyObject(data)) {\n url += url.indexOf(\"?\") == -1 ? \"?\" : \"&\";\n url += $.param(data, true);\n }\n Galaxy.params = data;\n this.navigate(url, { trigger: true });\n },\n\n /** override to parse query string into obj and send to each route */\n execute: function(callback, args, name) {\n Galaxy.debug(\"router execute:\", callback, args, name);\n var queryObj = QUERY_STRING.parse(args.pop());\n args.push(queryObj);\n if (callback) {\n if (this.authenticate(args, name)) {\n callback.apply(this, args);\n } else {\n this.access_denied();\n }\n }\n },\n\n authenticate: function(args, name) {\n return true;\n },\n\n access_denied: function() {\n this.page.display(\n new Ui.Message({\n status: \"danger\",\n message: \"You must be logged in with proper credentials to make this request.\",\n persistent: true\n })\n );\n }\n});\n\nexport default Router;\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/router.js","/** Generic form view */\nimport Form from \"mvc/form/form-view\";\nimport Ui from \"mvc/ui/ui-misc\";\nvar View = Backbone.View.extend({\n initialize: function(options) {\n this.model = new Backbone.Model(options);\n this.url = this.model.get(\"url\");\n this.redirect = this.model.get(\"redirect\");\n this.setElement(\"
\");\n this.render();\n },\n\n render: function() {\n var self = this;\n $.ajax({\n url: Galaxy.root + this.url,\n type: \"GET\"\n })\n .done(response => {\n var options = $.extend({}, self.model.attributes, response);\n var form = new Form({\n title: options.title,\n message: options.message,\n status: options.status || \"warning\",\n icon: options.icon,\n inputs: options.inputs,\n buttons: {\n submit: new Ui.Button({\n tooltip: options.submit_tooltip,\n title: options.submit_title || \"Save\",\n icon: options.submit_icon || \"fa-save\",\n cls: \"btn btn-primary ui-clear-float\",\n onclick: function() {\n self._submit(form);\n }\n })\n }\n });\n self.$el.empty().append(form.$el);\n })\n .fail(response => {\n self.$el.empty().append(\n new Ui.Message({\n message: `Failed to load resource ${self.url}.`,\n status: \"danger\",\n persistent: true\n }).$el\n );\n });\n },\n\n _submit: function(form) {\n var self = this;\n $.ajax({\n url: Galaxy.root + self.url,\n data: JSON.stringify(form.data.create()),\n type: \"PUT\",\n contentType: \"application/json\"\n })\n .done(response => {\n var success_message = {\n message: response.message,\n status: \"success\",\n persistent: false\n };\n if (self.redirect) {\n window.location = `${Galaxy.root + self.redirect}?${$.param(success_message)}`;\n } else {\n form.data.matchModel(response, (input, input_id) => {\n form.field_list[input_id].value(input.value);\n });\n self._showMessage(form, success_message);\n }\n })\n .fail(response => {\n self._showMessage(form, {\n message: response.responseJSON.err_msg,\n status: \"danger\",\n persistent: false\n });\n });\n },\n\n _showMessage: function(form, options) {\n var $panel = form.$el\n .parents()\n .filter(function() {\n return [\"auto\", \"scroll\"].indexOf($(this).css(\"overflow\")) != -1;\n })\n .first();\n $panel.animate({ scrollTop: 0 }, 500);\n form.message.update(options);\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-wrapper.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///admin.bundled.js","webpack:///./galaxy/scripts/apps/admin.js","webpack:///./galaxy/scripts/apps/panels/admin-panel.js","webpack:///./galaxy/scripts/layout/router.js","webpack:///./galaxy/scripts/mvc/form/form-wrapper.js"],"names":["webpackJsonp","171","module","exports","__webpack_require__","_","_interopRequireDefault","obj","__esModule","default","_jquery","_jquery2","_galaxy","_galaxy2","_adminPanel","_adminPanel2","_formWrapper","_formWrapper2","_gridView","_gridView2","_uiMisc","_queryStringParsing","_queryStringParsing2","_router","_router2","_utils","_utils2","_page","_page2","$","window","app","options","bootstrapped","Galaxy","GalaxyApp","debug","AdminRouter","extend","routes","(/)admin(/)users","(/)admin(/)roles","(/)admin(/)groups","(/)admin(/)tool_versions","(/)admin(/)quotas","(/)admin(/)repositories","(/)admin(/)forms","(/)admin(/)form(/)(:form_id)","authenticate","args","name","user","id","get","show_users","this","page","display","url_base","root","url_data","params","dict_format","show_roles","show_groups","show_repositories","show_tool_versions","show_quotas","show_forms","show_form","form_id","form_defs","reset_user_password","title","url","icon","submit_title","redirect","manage_roles_and_groups_for_user","manage_users_and_groups_for_role","manage_users_and_roles_for_group","manage_users_and_groups_for_quota","create_role","create_group","create_quota","rename_role","rename_group","rename_quota","edit_quota","set_quota_default","create_form","edit_form","View","config","active_view","setWindowTitle","Left","Router","call","172","Backbone","Object","defineProperty","value","_localization","_localization2","AdminPanel","initialize","self","settings","message","status","model","Model","categories","Collection","items","target","enabled","enable_quotas","allow_user_impersonation","is_tool_shed_installed","enable_beta_ts_api_install","installing_repository_ids","is_repo_installed","setElement","_template","render","$el","empty","each","category","$section","_templateSection","attributes","$entries","find","item","undefined","$link","attr","href","text","on","e","preventDefault","router","push","append","addClass","prop","join","toString","30","_uiMisc2","data","__identifer","Math","random","substr","isEmptyObject","indexOf","param","navigate","trigger","execute","callback","queryObj","parse","pop","apply","access_denied","Message","persistent","44","_formView","_formView2","ajax","type","done","response","form","inputs","buttons","submit","Button","tooltip","submit_tooltip","submit_icon","cls","onclick","_submit","fail","JSON","stringify","create","contentType","success_message","location","matchModel","input","input_id","field_list","_showMessage","responseJSON","err_msg","parents","filter","css","first","animate","scrollTop","update"],"mappings":"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","file":"admin.bundled.js","sourcesContent":["webpackJsonp([1],{\n\n/***/ 171:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(_) {\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _galaxy = __webpack_require__(24);\n\nvar _galaxy2 = _interopRequireDefault(_galaxy);\n\nvar _adminPanel = __webpack_require__(172);\n\nvar _adminPanel2 = _interopRequireDefault(_adminPanel);\n\nvar _formWrapper = __webpack_require__(44);\n\nvar _formWrapper2 = _interopRequireDefault(_formWrapper);\n\nvar _gridView = __webpack_require__(12);\n\nvar _gridView2 = _interopRequireDefault(_gridView);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _queryStringParsing = __webpack_require__(8);\n\nvar _queryStringParsing2 = _interopRequireDefault(_queryStringParsing);\n\nvar _router = __webpack_require__(30);\n\nvar _router2 = _interopRequireDefault(_router);\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _page = __webpack_require__(25);\n\nvar _page2 = _interopRequireDefault(_page);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n\n\nwindow.app = function app(options, bootstrapped) {\n window.Galaxy = new _galaxy2.default.GalaxyApp(options, bootstrapped);\n Galaxy.debug(\"admin app\");\n\n /** Routes */\n var AdminRouter = _router2.default.extend({\n routes: {\n \"(/)admin(/)users\": \"show_users\",\n \"(/)admin(/)roles\": \"show_roles\",\n \"(/)admin(/)groups\": \"show_groups\",\n \"(/)admin(/)tool_versions\": \"show_tool_versions\",\n \"(/)admin(/)quotas\": \"show_quotas\",\n \"(/)admin(/)repositories\": \"show_repositories\",\n \"(/)admin(/)forms\": \"show_forms\",\n \"(/)admin(/)form(/)(:form_id)\": \"show_form\"\n },\n\n authenticate: function authenticate(args, name) {\n return Galaxy.user && Galaxy.user.id && Galaxy.user.get(\"is_admin\");\n },\n\n show_users: function show_users() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/users_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_roles: function show_roles() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/roles_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_groups: function show_groups() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/groups_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_repositories: function show_repositories() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin_toolshed/browse_repositories\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_tool_versions: function show_tool_versions() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/tool_versions_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_quotas: function show_quotas() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"admin/quotas_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_forms: function show_forms() {\n this.page.display(new _gridView2.default({\n url_base: Galaxy.root + \"forms/forms_list\",\n url_data: Galaxy.params,\n dict_format: true\n }));\n },\n\n show_form: function show_form(form_id) {\n var id = \"?id=\" + _queryStringParsing2.default.get(\"id\");\n var form_defs = {\n reset_user_password: {\n title: \"Reset passwords\",\n url: \"admin/reset_user_password\" + id,\n icon: \"fa-user\",\n submit_title: \"Save new password\",\n redirect: \"admin/users\"\n },\n manage_roles_and_groups_for_user: {\n url: \"admin/manage_roles_and_groups_for_user\" + id,\n icon: \"fa-users\",\n redirect: \"admin/users\"\n },\n manage_users_and_groups_for_role: {\n url: \"admin/manage_users_and_groups_for_role\" + id,\n redirect: \"admin/roles\"\n },\n manage_users_and_roles_for_group: {\n url: \"admin/manage_users_and_roles_for_group\" + id,\n redirect: \"admin/groups\"\n },\n manage_users_and_groups_for_quota: {\n url: \"admin/manage_users_and_groups_for_quota\" + id,\n redirect: \"admin/quotas\"\n },\n create_role: {\n url: \"admin/create_role\",\n redirect: \"admin/roles\"\n },\n create_group: {\n url: \"admin/create_group\",\n redirect: \"admin/groups\"\n },\n create_quota: {\n url: \"admin/create_quota\",\n redirect: \"admin/quotas\"\n },\n rename_role: {\n url: \"admin/rename_role\" + id,\n redirect: \"admin/roles\"\n },\n rename_group: {\n url: \"admin/rename_group\" + id,\n redirect: \"admin/groups\"\n },\n rename_quota: {\n url: \"admin/rename_quota\" + id,\n redirect: \"admin/quotas\"\n },\n edit_quota: {\n url: \"admin/edit_quota\" + id,\n redirect: \"admin/quotas\"\n },\n set_quota_default: {\n url: \"admin/set_quota_default\" + id,\n redirect: \"admin/quotas\"\n },\n create_form: {\n url: \"forms/create_form\",\n redirect: \"admin/forms\"\n },\n edit_form: {\n url: \"forms/edit_form\" + id,\n redirect: \"admin/forms\"\n }\n };\n this.page.display(new _formWrapper2.default.View(form_defs[form_id]));\n }\n });\n\n $(function () {\n _.extend(options.config, { active_view: \"admin\" });\n _utils2.default.setWindowTitle(\"Administration\");\n Galaxy.page = new _page2.default.View(_.extend(options, {\n Left: _adminPanel2.default,\n Router: AdminRouter\n }));\n });\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 172:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar AdminPanel = Backbone.View.extend({\n initialize: function initialize(page, options) {\n var self = this;\n this.page = page;\n this.root = options.root;\n this.config = options.config;\n this.settings = options.settings;\n this.message = options.message;\n this.status = options.status;\n this.model = new Backbone.Model({\n title: (0, _localization2.default)(\"Administration\")\n });\n this.categories = new Backbone.Collection([{\n title: \"Server\",\n items: [{\n title: \"Data types\",\n url: \"admin/view_datatypes_registry\"\n }, {\n title: \"Data tables\",\n url: \"admin/view_tool_data_tables\"\n }, {\n title: \"Display applications\",\n url: \"admin/display_applications\"\n }, {\n title: \"Manage jobs\",\n url: \"admin/jobs\"\n }, {\n title: \"Local data\",\n url: \"data_manager\"\n }]\n }, {\n title: \"User Management\",\n items: [{\n title: \"Users\",\n url: \"admin/users\",\n target: \"__use_router__\"\n }, {\n title: \"Quotas\",\n url: \"admin/quotas\",\n target: \"__use_router__\",\n enabled: self.config.enable_quotas\n }, {\n title: \"Groups\",\n url: \"admin/groups\",\n target: \"__use_router__\"\n }, {\n title: \"Roles\",\n url: \"admin/roles\",\n target: \"__use_router__\"\n }, {\n title: \"Forms\",\n url: \"admin/forms\",\n target: \"__use_router__\"\n }, {\n title: \"API keys\",\n url: \"userskeys/all_users\"\n }, {\n title: \"Impersonate a user\",\n url: \"admin/impersonate\",\n enabled: self.config.allow_user_impersonation\n }]\n }, {\n title: \"Tool Management\",\n items: [{\n title: \"Install new tools\",\n url: \"admin_toolshed/browse_tool_sheds\",\n enabled: self.settings.is_tool_shed_installed\n }, {\n title: \"Install new tools (Beta)\",\n url: \"admin_toolshed/browse_toolsheds\",\n enabled: self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install\n }, {\n title: \"Monitor installation\",\n url: \"admin_toolshed/monitor_repository_installation\",\n enabled: self.settings.installing_repository_ids\n }, {\n title: \"Manage tools\",\n url: \"admin/repositories\",\n enabled: self.settings.is_repo_installed,\n target: \"__use_router__\"\n }, {\n title: \"Manage metadata\",\n url: \"admin_toolshed/reset_metadata_on_selected_installed_repositories\",\n enabled: self.settings.is_repo_installed\n }, {\n title: \"Manage whitelist\",\n url: \"admin/sanitize_whitelist\"\n }, {\n title: \"Manage dependencies\",\n url: \"admin/manage_tool_dependencies\"\n }, {\n title: \"View lineage\",\n url: \"admin/tool_versions\",\n target: \"__use_router__\"\n }, {\n title: \"View migration stages\",\n url: \"admin/review_tool_migration_stages\"\n }, {\n title: \"View error logs\",\n url: \"admin/tool_errors\"\n }]\n }]);\n this.setElement(this._template());\n },\n\n render: function render() {\n var self = this;\n this.$el.empty();\n this.categories.each(function (category) {\n var $section = $(self._templateSection(category.attributes));\n var $entries = $section.find(\".ui-side-section-body\");\n _.each(category.get(\"items\"), function (item) {\n if (item.enabled === undefined || item.enabled) {\n var $link = $(\"\").attr({ href: self.root + item.url }).text((0, _localization2.default)(item.title));\n if (item.target == \"__use_router__\") {\n $link.on(\"click\", function (e) {\n e.preventDefault();\n self.page.router.push(item.url);\n });\n } else {\n $link.attr(\"target\", \"galaxy_main\");\n }\n $entries.append($(\"
\").addClass(\"ui-side-section-body-title\").append($link));\n }\n });\n self.$el.append($section);\n });\n this.page.$(\"#galaxy_main\").prop(\"src\", this.root + \"admin/center?message=\" + this.message + \"&status=\" + this.status);\n },\n\n _templateSection: function _templateSection(options) {\n return [\"
\", \"
\" + (0, _localization2.default)(options.title) + \"
\", '
', \"
\"].join(\"\");\n },\n\n _template: function _template() {\n return '
';\n },\n\n toString: function toString() {\n return \"adminPanel\";\n }\n});\n\nexports.default = AdminPanel;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n\n/***/ 30:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _jquery = __webpack_require__(0);\n\nvar _jquery2 = _interopRequireDefault(_jquery);\n\nvar _queryStringParsing = __webpack_require__(8);\n\nvar _queryStringParsing2 = _interopRequireDefault(_queryStringParsing);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar $ = _jquery2.default;\n\n\nvar Router = Backbone.Router.extend({\n // TODO: not many client routes at this point - fill and remove from server.\n // since we're at root here, this may be the last to be routed entirely on the client.\n initialize: function initialize(page, options) {\n this.page = page;\n this.options = options;\n },\n\n /** helper to push a new navigation state */\n push: function push(url, data) {\n data = data || {};\n data.__identifer = Math.random().toString(36).substr(2);\n if (!$.isEmptyObject(data)) {\n url += url.indexOf(\"?\") == -1 ? \"?\" : \"&\";\n url += $.param(data, true);\n }\n Galaxy.params = data;\n this.navigate(url, { trigger: true });\n },\n\n /** override to parse query string into obj and send to each route */\n execute: function execute(callback, args, name) {\n Galaxy.debug(\"router execute:\", callback, args, name);\n var queryObj = _queryStringParsing2.default.parse(args.pop());\n args.push(queryObj);\n if (callback) {\n if (this.authenticate(args, name)) {\n callback.apply(this, args);\n } else {\n this.access_denied();\n }\n }\n },\n\n authenticate: function authenticate(args, name) {\n return true;\n },\n\n access_denied: function access_denied() {\n this.page.display(new _uiMisc2.default.Message({\n status: \"danger\",\n message: \"You must be logged in with proper credentials to make this request.\",\n persistent: true\n }));\n }\n});\n\nexports.default = Router;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n\n/***/ 44:\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _formView = __webpack_require__(9);\n\nvar _formView2 = _interopRequireDefault(_formView);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** Generic form view */\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n this.model = new Backbone.Model(options);\n this.url = this.model.get(\"url\");\n this.redirect = this.model.get(\"redirect\");\n this.setElement(\"
\");\n this.render();\n },\n\n render: function render() {\n var self = this;\n $.ajax({\n url: Galaxy.root + this.url,\n type: \"GET\"\n }).done(function (response) {\n var options = $.extend({}, self.model.attributes, response);\n var form = new _formView2.default({\n title: options.title,\n message: options.message,\n status: options.status || \"warning\",\n icon: options.icon,\n inputs: options.inputs,\n buttons: {\n submit: new _uiMisc2.default.Button({\n tooltip: options.submit_tooltip,\n title: options.submit_title || \"Save\",\n icon: options.submit_icon || \"fa-save\",\n cls: \"btn btn-primary ui-clear-float\",\n onclick: function onclick() {\n self._submit(form);\n }\n })\n }\n });\n self.$el.empty().append(form.$el);\n }).fail(function (response) {\n self.$el.empty().append(new _uiMisc2.default.Message({\n message: \"Failed to load resource \" + self.url + \".\",\n status: \"danger\",\n persistent: true\n }).$el);\n });\n },\n\n _submit: function _submit(form) {\n var self = this;\n $.ajax({\n url: Galaxy.root + self.url,\n data: JSON.stringify(form.data.create()),\n type: \"PUT\",\n contentType: \"application/json\"\n }).done(function (response) {\n var success_message = {\n message: response.message,\n status: \"success\",\n persistent: false\n };\n if (self.redirect) {\n window.location = Galaxy.root + self.redirect + \"?\" + $.param(success_message);\n } else {\n form.data.matchModel(response, function (input, input_id) {\n form.field_list[input_id].value(input.value);\n });\n self._showMessage(form, success_message);\n }\n }).fail(function (response) {\n self._showMessage(form, {\n message: response.responseJSON.err_msg,\n status: \"danger\",\n persistent: false\n });\n });\n },\n\n _showMessage: function _showMessage(form, options) {\n var $panel = form.$el.parents().filter(function () {\n return [\"auto\", \"scroll\"].indexOf($(this).css(\"overflow\")) != -1;\n }).first();\n $panel.animate({ scrollTop: 0 }, 500);\n form.message.update(options);\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ })\n\n},[171]);\n\n\n// WEBPACK FOOTER //\n// admin.bundled.js","import jQuery from \"jquery\";\nvar $ = jQuery;\nimport GalaxyApp from \"galaxy\";\nimport AdminPanel from \"./panels/admin-panel\";\nimport FormWrapper from \"mvc/form/form-wrapper\";\nimport GridView from \"mvc/grid/grid-view\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport QueryStringParsing from \"utils/query-string-parsing\";\nimport Router from \"layout/router\";\nimport Utils from \"utils/utils\";\nimport Page from \"layout/page\";\n\nwindow.app = function app(options, bootstrapped) {\n window.Galaxy = new GalaxyApp.GalaxyApp(options, bootstrapped);\n Galaxy.debug(\"admin app\");\n\n /** Routes */\n var AdminRouter = Router.extend({\n routes: {\n \"(/)admin(/)users\": \"show_users\",\n \"(/)admin(/)roles\": \"show_roles\",\n \"(/)admin(/)groups\": \"show_groups\",\n \"(/)admin(/)tool_versions\": \"show_tool_versions\",\n \"(/)admin(/)quotas\": \"show_quotas\",\n \"(/)admin(/)repositories\": \"show_repositories\",\n \"(/)admin(/)forms\": \"show_forms\",\n \"(/)admin(/)form(/)(:form_id)\": \"show_form\"\n },\n\n authenticate: function(args, name) {\n return Galaxy.user && Galaxy.user.id && Galaxy.user.get(\"is_admin\");\n },\n\n show_users: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/users_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_roles: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/roles_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_groups: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/groups_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_repositories: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin_toolshed/browse_repositories`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_tool_versions: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/tool_versions_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_quotas: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}admin/quotas_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_forms: function() {\n this.page.display(\n new GridView({\n url_base: `${Galaxy.root}forms/forms_list`,\n url_data: Galaxy.params,\n dict_format: true\n })\n );\n },\n\n show_form: function(form_id) {\n var id = `?id=${QueryStringParsing.get(\"id\")}`;\n var form_defs = {\n reset_user_password: {\n title: \"Reset passwords\",\n url: `admin/reset_user_password${id}`,\n icon: \"fa-user\",\n submit_title: \"Save new password\",\n redirect: \"admin/users\"\n },\n manage_roles_and_groups_for_user: {\n url: `admin/manage_roles_and_groups_for_user${id}`,\n icon: \"fa-users\",\n redirect: \"admin/users\"\n },\n manage_users_and_groups_for_role: {\n url: `admin/manage_users_and_groups_for_role${id}`,\n redirect: \"admin/roles\"\n },\n manage_users_and_roles_for_group: {\n url: `admin/manage_users_and_roles_for_group${id}`,\n redirect: \"admin/groups\"\n },\n manage_users_and_groups_for_quota: {\n url: `admin/manage_users_and_groups_for_quota${id}`,\n redirect: \"admin/quotas\"\n },\n create_role: {\n url: \"admin/create_role\",\n redirect: \"admin/roles\"\n },\n create_group: {\n url: \"admin/create_group\",\n redirect: \"admin/groups\"\n },\n create_quota: {\n url: \"admin/create_quota\",\n redirect: \"admin/quotas\"\n },\n rename_role: {\n url: `admin/rename_role${id}`,\n redirect: \"admin/roles\"\n },\n rename_group: {\n url: `admin/rename_group${id}`,\n redirect: \"admin/groups\"\n },\n rename_quota: {\n url: `admin/rename_quota${id}`,\n redirect: \"admin/quotas\"\n },\n edit_quota: {\n url: `admin/edit_quota${id}`,\n redirect: \"admin/quotas\"\n },\n set_quota_default: {\n url: `admin/set_quota_default${id}`,\n redirect: \"admin/quotas\"\n },\n create_form: {\n url: \"forms/create_form\",\n redirect: \"admin/forms\"\n },\n edit_form: {\n url: `forms/edit_form${id}`,\n redirect: \"admin/forms\"\n }\n };\n this.page.display(new FormWrapper.View(form_defs[form_id]));\n }\n });\n\n $(() => {\n _.extend(options.config, { active_view: \"admin\" });\n Utils.setWindowTitle(\"Administration\");\n Galaxy.page = new Page.View(\n _.extend(options, {\n Left: AdminPanel,\n Router: AdminRouter\n })\n );\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/admin.js","import _l from \"utils/localization\";\n\nvar AdminPanel = Backbone.View.extend({\n initialize: function(page, options) {\n var self = this;\n this.page = page;\n this.root = options.root;\n this.config = options.config;\n this.settings = options.settings;\n this.message = options.message;\n this.status = options.status;\n this.model = new Backbone.Model({\n title: _l(\"Administration\")\n });\n this.categories = new Backbone.Collection([\n {\n title: \"Server\",\n items: [\n {\n title: \"Data types\",\n url: \"admin/view_datatypes_registry\"\n },\n {\n title: \"Data tables\",\n url: \"admin/view_tool_data_tables\"\n },\n {\n title: \"Display applications\",\n url: \"admin/display_applications\"\n },\n {\n title: \"Manage jobs\",\n url: \"admin/jobs\"\n },\n {\n title: \"Local data\",\n url: \"data_manager\"\n }\n ]\n },\n {\n title: \"User Management\",\n items: [\n {\n title: \"Users\",\n url: \"admin/users\",\n target: \"__use_router__\"\n },\n {\n title: \"Quotas\",\n url: \"admin/quotas\",\n target: \"__use_router__\",\n enabled: self.config.enable_quotas\n },\n {\n title: \"Groups\",\n url: \"admin/groups\",\n target: \"__use_router__\"\n },\n {\n title: \"Roles\",\n url: \"admin/roles\",\n target: \"__use_router__\"\n },\n {\n title: \"Forms\",\n url: \"admin/forms\",\n target: \"__use_router__\"\n },\n {\n title: \"API keys\",\n url: \"userskeys/all_users\"\n },\n {\n title: \"Impersonate a user\",\n url: \"admin/impersonate\",\n enabled: self.config.allow_user_impersonation\n }\n ]\n },\n {\n title: \"Tool Management\",\n items: [\n {\n title: \"Install new tools\",\n url: \"admin_toolshed/browse_tool_sheds\",\n enabled: self.settings.is_tool_shed_installed\n },\n {\n title: \"Install new tools (Beta)\",\n url: \"admin_toolshed/browse_toolsheds\",\n enabled: self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install\n },\n {\n title: \"Monitor installation\",\n url: \"admin_toolshed/monitor_repository_installation\",\n enabled: self.settings.installing_repository_ids\n },\n {\n title: \"Manage tools\",\n url: \"admin/repositories\",\n enabled: self.settings.is_repo_installed,\n target: \"__use_router__\"\n },\n {\n title: \"Manage metadata\",\n url: \"admin_toolshed/reset_metadata_on_selected_installed_repositories\",\n enabled: self.settings.is_repo_installed\n },\n {\n title: \"Manage whitelist\",\n url: \"admin/sanitize_whitelist\"\n },\n {\n title: \"Manage dependencies\",\n url: \"admin/manage_tool_dependencies\"\n },\n {\n title: \"View lineage\",\n url: \"admin/tool_versions\",\n target: \"__use_router__\"\n },\n {\n title: \"View migration stages\",\n url: \"admin/review_tool_migration_stages\"\n },\n {\n title: \"View error logs\",\n url: \"admin/tool_errors\"\n }\n ]\n }\n ]);\n this.setElement(this._template());\n },\n\n render: function() {\n var self = this;\n this.$el.empty();\n this.categories.each(category => {\n var $section = $(self._templateSection(category.attributes));\n var $entries = $section.find(\".ui-side-section-body\");\n _.each(category.get(\"items\"), item => {\n if (item.enabled === undefined || item.enabled) {\n var $link = $(\"\")\n .attr({ href: self.root + item.url })\n .text(_l(item.title));\n if (item.target == \"__use_router__\") {\n $link.on(\"click\", e => {\n e.preventDefault();\n self.page.router.push(item.url);\n });\n } else {\n $link.attr(\"target\", \"galaxy_main\");\n }\n $entries.append(\n $(\"
\")\n .addClass(\"ui-side-section-body-title\")\n .append($link)\n );\n }\n });\n self.$el.append($section);\n });\n this.page\n .$(\"#galaxy_main\")\n .prop(\"src\", `${this.root}admin/center?message=${this.message}&status=${this.status}`);\n },\n\n _templateSection: function(options) {\n return [\n \"
\",\n `
${_l(options.title)}
`,\n '
',\n \"
\"\n ].join(\"\");\n },\n\n _template: function() {\n return '
';\n },\n\n toString: function() {\n return \"adminPanel\";\n }\n});\n\nexport default AdminPanel;\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/panels/admin-panel.js","import jQuery from \"jquery\";\nvar $ = jQuery;\nimport QUERY_STRING from \"utils/query-string-parsing\";\nimport Ui from \"mvc/ui/ui-misc\";\n\nvar Router = Backbone.Router.extend({\n // TODO: not many client routes at this point - fill and remove from server.\n // since we're at root here, this may be the last to be routed entirely on the client.\n initialize: function(page, options) {\n this.page = page;\n this.options = options;\n },\n\n /** helper to push a new navigation state */\n push: function(url, data) {\n data = data || {};\n data.__identifer = Math.random()\n .toString(36)\n .substr(2);\n if (!$.isEmptyObject(data)) {\n url += url.indexOf(\"?\") == -1 ? \"?\" : \"&\";\n url += $.param(data, true);\n }\n Galaxy.params = data;\n this.navigate(url, { trigger: true });\n },\n\n /** override to parse query string into obj and send to each route */\n execute: function(callback, args, name) {\n Galaxy.debug(\"router execute:\", callback, args, name);\n var queryObj = QUERY_STRING.parse(args.pop());\n args.push(queryObj);\n if (callback) {\n if (this.authenticate(args, name)) {\n callback.apply(this, args);\n } else {\n this.access_denied();\n }\n }\n },\n\n authenticate: function(args, name) {\n return true;\n },\n\n access_denied: function() {\n this.page.display(\n new Ui.Message({\n status: \"danger\",\n message: \"You must be logged in with proper credentials to make this request.\",\n persistent: true\n })\n );\n }\n});\n\nexport default Router;\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/router.js","/** Generic form view */\nimport Form from \"mvc/form/form-view\";\nimport Ui from \"mvc/ui/ui-misc\";\nvar View = Backbone.View.extend({\n initialize: function(options) {\n this.model = new Backbone.Model(options);\n this.url = this.model.get(\"url\");\n this.redirect = this.model.get(\"redirect\");\n this.setElement(\"
\");\n this.render();\n },\n\n render: function() {\n var self = this;\n $.ajax({\n url: Galaxy.root + this.url,\n type: \"GET\"\n })\n .done(response => {\n var options = $.extend({}, self.model.attributes, response);\n var form = new Form({\n title: options.title,\n message: options.message,\n status: options.status || \"warning\",\n icon: options.icon,\n inputs: options.inputs,\n buttons: {\n submit: new Ui.Button({\n tooltip: options.submit_tooltip,\n title: options.submit_title || \"Save\",\n icon: options.submit_icon || \"fa-save\",\n cls: \"btn btn-primary ui-clear-float\",\n onclick: function() {\n self._submit(form);\n }\n })\n }\n });\n self.$el.empty().append(form.$el);\n })\n .fail(response => {\n self.$el.empty().append(\n new Ui.Message({\n message: `Failed to load resource ${self.url}.`,\n status: \"danger\",\n persistent: true\n }).$el\n );\n });\n },\n\n _submit: function(form) {\n var self = this;\n $.ajax({\n url: Galaxy.root + self.url,\n data: JSON.stringify(form.data.create()),\n type: \"PUT\",\n contentType: \"application/json\"\n })\n .done(response => {\n var success_message = {\n message: response.message,\n status: \"success\",\n persistent: false\n };\n if (self.redirect) {\n window.location = `${Galaxy.root + self.redirect}?${$.param(success_message)}`;\n } else {\n form.data.matchModel(response, (input, input_id) => {\n form.field_list[input_id].value(input.value);\n });\n self._showMessage(form, success_message);\n }\n })\n .fail(response => {\n self._showMessage(form, {\n message: response.responseJSON.err_msg,\n status: \"danger\",\n persistent: false\n });\n });\n },\n\n _showMessage: function(form, options) {\n var $panel = form.$el\n .parents()\n .filter(function() {\n return [\"auto\", \"scroll\"].indexOf($(this).css(\"overflow\")) != -1;\n })\n .first();\n $panel.animate({ scrollTop: 0 }, 500);\n form.message.update(options);\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-wrapper.js"],"sourceRoot":""} \ No newline at end of file diff --git a/static/scripts/bundled/libs.bundled.js.map b/static/scripts/bundled/libs.bundled.js.map index fa69096aac94..5f91be94fffc 100644 --- a/static/scripts/bundled/libs.bundled.js.map +++ b/static/scripts/bundled/libs.bundled.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///libs.bundled.js","webpack:///webpack/bootstrap 9e33f3005600f7d7eb1e","webpack:///./galaxy/scripts/libs/jquery/jquery.js","webpack:///./galaxy/scripts/libs/underscore.js","webpack:///./galaxy/scripts/libs/backbone.js","webpack:///./galaxy/scripts/utils/utils.js","webpack:///./galaxy/scripts/utils/localization.js","webpack:///./galaxy/scripts/mvc/base-mvc.js","webpack:///./galaxy/scripts/mvc/ui/ui-misc.js","webpack:///./galaxy/scripts/mvc/ui/ui-modal.js","webpack:///./galaxy/scripts/utils/query-string-parsing.js","webpack:///./galaxy/scripts/mvc/form/form-view.js","webpack:///./galaxy/scripts/mvc/grid/grid-view.js","webpack:///./galaxy/scripts/ui/editable-text.js","webpack:///./galaxy/scripts/mvc/webhooks.js","webpack:///./galaxy/scripts/mvc/dataset/data.js","webpack:///./galaxy/scripts/viz/visualization.js","webpack:///./galaxy/scripts/viz/trackster/util.js","webpack:///./galaxy/scripts/mvc/ui/ui-portlet.js","webpack:///./galaxy/scripts/layout/panel.js","webpack:///./galaxy/scripts/galaxy.js","webpack:///./galaxy/scripts/layout/page.js","webpack:///./galaxy/scripts/utils/config.js","webpack:///./galaxy/scripts/mvc/ui/popup-menu.js","webpack:///./galaxy/scripts/mvc/ui/ui-tabs.js","webpack:///./galaxy/scripts/mvc/ui/ui-buttons.js","webpack:///./galaxy/scripts/libs/jquery/jquery.event.hover.js","webpack:///./galaxy/scripts/libs/jquery/jquery.event.drag.js","webpack:///./galaxy/scripts/libs/jquery/jquery.mousewheel.js","webpack:///./galaxy/scripts/libs/jquery/jquery.form.js","webpack:///./galaxy/scripts/libs/jquery/jquery.rating.js","webpack:///./galaxy/scripts/libs/jquery/select2.js","webpack:///./galaxy/scripts/libs/jquery/jquery-ui.js","webpack:///./galaxy/scripts/libs/farbtastic.js","webpack:///./galaxy/scripts/libs/bootstrap-tour.js","webpack:///./galaxy/scripts/libs/toastr.js","webpack:///./galaxy/scripts/ui/autocom_tagging.js","webpack:///./galaxy/scripts/layout/modal.js","webpack:///./galaxy/scripts/mvc/tours.js","webpack:///./galaxy/scripts/utils/add-logging.js","webpack:///./galaxy/scripts/mvc/user/user-model.js","webpack:///./galaxy/scripts/mvc/ui/ui-frames.js","webpack:///./galaxy/scripts/mvc/ui/icon-button.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-default.js","webpack:///./galaxy/scripts/mvc/ui/ui-options.js","webpack:///./galaxy/scripts/mvc/tool/tools.js","webpack:///./galaxy/scripts/mvc/tool/tool-form.js","webpack:///./galaxy/scripts/mvc/tool/tool-form-base.js","webpack:///./galaxy/scripts/utils/deferred.js","webpack:///./galaxy/scripts/mvc/ui/ui-table.js","webpack:///./galaxy/scripts/mvc/ui/ui-list.js","webpack:///./galaxy/scripts/mvc/form/form-data.js","webpack:///./galaxy/scripts/mvc/citation/citation-model.js","webpack:///./galaxy/scripts/polyfills.js","webpack:///./galaxy/scripts/libs/jquery/jquery.migrate.js","webpack:///./galaxy/scripts/libs/jquery/jquery.autocomplete.js","webpack:///./galaxy/scripts/libs/jquery.sparklines.js","webpack:///./galaxy/scripts/libs/jquery/jstorage.js","webpack:///./galaxy/scripts/libs/jquery/jquery.complexify.js","webpack:///./galaxy/scripts/libs/bootstrap.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./galaxy/scripts/onload.js","webpack:///./galaxy/scripts/utils/async-save-text.js","webpack:///./galaxy/scripts/ui/popupmenu.js","webpack:///./galaxy/scripts/nls/locale.js","webpack:///./galaxy/scripts/utils/metrics-logger.js","webpack:///./galaxy/scripts/layout/masthead.js","webpack:///./galaxy/scripts/layout/menu.js","webpack:///./galaxy/scripts/layout/generic-nav-view.js","webpack:///./galaxy/scripts/layout/scratchbook.js","webpack:///./galaxy/scripts/mvc/grid/grid-model.js","webpack:///./galaxy/scripts/mvc/grid/grid-template.js","webpack:///./galaxy/scripts/mvc/ui/ui-slider.js","webpack:///./galaxy/scripts/mvc/ui/ui-drilldown.js","webpack:///./galaxy/scripts/viz/trackster.js","webpack:///./galaxy/scripts/viz/trackster/tracks.js","webpack:///./galaxy/scripts/viz/viz_views.js","webpack:///./galaxy/scripts/viz/trackster/slotting.js","webpack:///./galaxy/scripts/viz/trackster/painters.js","webpack:///./galaxy/scripts/viz/trackster/filters.js","webpack:///./galaxy/scripts/mvc/form/form-section.js","webpack:///./galaxy/scripts/mvc/form/form-repeat.js","webpack:///./galaxy/scripts/mvc/form/form-input.js","webpack:///./galaxy/scripts/mvc/form/form-parameters.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-content.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-library.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-ftp.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-genomespace.js","webpack:///./galaxy/scripts/mvc/tool/tool-genomespace.js","webpack:///./galaxy/scripts/mvc/ui/ui-color-picker.js","webpack:///./galaxy/scripts/libs/bibtex.js","webpack:///./galaxy/scripts/mvc/citation/citation-view.js","webpack:///./galaxy/scripts/viz/bbi-data-manager.js","webpack:///./galaxy/scripts/libs/bbi/bigwig.js","webpack:///./galaxy/scripts/libs/bbi/spans.js","webpack:///./galaxy/scripts/libs/bbi/jszlib.js","webpack:///./galaxy/scripts/libs/bbi/jquery-ajax-native.js","webpack:///./galaxy/scripts/mvc/user/user-quotameter.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","result","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","s","3","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","setTimeout","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","w","this","noGlobal","isArrayLike","obj","jQuery","isWindow","winnow","elements","qualifier","not","isFunction","grep","elem","nodeType","risSimple","test","filter","indexOf","sibling","cur","dir","createOptions","options","each","match","rnotwhite","_","flag","completed","removeEventListener","ready","Data","expando","uid","dataAttr","key","data","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","dataUser","set","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","css","initial","unit","cssNumber","initialInUnit","rcssNum","exec","style","start","end","getAll","context","tag","ret","querySelectorAll","nodeName","merge","setGlobalEval","elems","refElements","dataPriv","buildFragment","scripts","selection","ignored","tmp","wrap","contains","j","fragment","createDocumentFragment","nodes","rhtml","rtagName","wrapMap","_default","innerHTML","htmlPrefilter","lastChild","childNodes","firstChild","textContent","createTextNode","inArray","ownerDocument","rscriptType","returnTrue","returnFalse","safeActiveElement","activeElement","on","types","selector","fn","one","origFn","event","off","apply","arguments","guid","add","manipulationTarget","content","disableScript","restoreScript","rscriptTypeMasked","removeAttribute","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","events","hasData","access","handle","extend","fixInput","rcheckableType","checked","defaultValue","domManip","collection","args","callback","concat","first","hasScripts","node","doc","iNoClone","value","support","checkClone","rchecked","index","self","eq","html","map","clone","_evalUrl","globalEval","rcleanScript","remove","keepData","cleanData","parentNode","removeChild","actualDisplay","appendTo","body","display","detach","defaultDisplay","elemdisplay","iframe","documentElement","contentDocument","write","close","curCSS","computed","width","minWidth","maxWidth","getStyles","getPropertyValue","pixelMarginRight","rnumnonpx","rmargin","addGetHookIf","conditionFn","hookFn","vendorPropName","emptyStyle","capName","toUpperCase","slice","cssPrefixes","setPositiveNumber","subtract","matches","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","boxSizingReliable","parseFloat","showHide","show","hidden","values","isHidden","Tween","easing","init","createFxNow","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","createTween","animation","Animation","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","rfxtypes","isEmptyObject","done","hide","propFilter","specialEasing","camelCase","isArray","cssHooks","expand","properties","stopped","prefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","originalProperties","originalOptions","stop","gotoEnd","rejectWith","proxy","fx","timer","progress","complete","fail","getClass","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","selected","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","contents","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","prev","responseFields","dataFilter","split","throws","state","buildParams","prefix","traditional","v","rbracket","getWindow","defaultView","arr","class2type","toString","hasOwn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","last","len","sort","splice","copy","copyIsArray","isPlainObject","random","isReady","msg","noop","Array","isNumeric","realStringObj","code","indirect","eval","trim","text","string","makeArray","results","second","invert","callbackExpect","arg","Date","Symbol","iterator","Sizzle","seed","nid","nidselect","groups","newSelector","newContext","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","id","getElementsByClassName","qsa","compilerCache","rbuggyQSA","rescape","tokenize","ridentifier","toSelector","join","rsibling","testContext","qsaError","select","createCache","cache","keys","Expr","cacheLength","markFunction","assert","div","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","uniqueCache","outerCache","newCache","dirruns","uniqueID","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","find","dirrunsUnique","pop","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","sortOrder","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","els","hasCompare","parent","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","attr","specified","duplicates","detectDuplicates","sortStable","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","until","truncate","is","siblings","rneedsContext","rsingleTag","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","reverse","Callbacks","firing","memory","fired","locked","firingIndex","once","stopOnFalse","disable","lock","fireWith","tuples","then","fns","newDefer","tuple","returned","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","readyState","doScroll","chainable","emptyGet","raw","bulk","acceptData","owner","register","writable","stored","camel","removeData","_data","_removeData","camelKey","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","handleObjIn","eventHandle","t","handleObj","special","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","fix","handlerQueue","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","sel","isNaN","fixHooks","keyHooks","original","charCode","keyCode","mouseHooks","eventDoc","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","Event","load","noBubble","trigger","blur","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","timeStamp","isSimulated","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","relatedTarget","rxhtmlTag","rnoInnerhtml","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","append","prepend","insertBefore","before","after","replaceWith","replaceChild","prependTo","insertAfter","replaceAll","insert","HTML","BODY","view","opener","getComputedStyle","swap","old","computeStyleTests","cssText","container","divStyle","pixelPositionVal","reliableMarginLeftVal","marginLeft","boxSizingReliableVal","marginRight","pixelMarginRightVal","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginLeft","reliableMarginRight","marginDiv","rdisplayswap","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","origName","isFinite","getBoundingClientRect","left","margin","padding","border","suffix","expanded","parts","propHooks","eased","step","linear","swing","cos","PI","timerId","rrun","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","checkOn","optSelected","optDisabled","radioValue","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","rspaces","valHooks","optionSet","rfocusMorph","onlyHandlers","bubbleType","ontype","eventPath","isTrigger","parentWindow","simulate","hover","fnOver","fnOut","focusin","attaches","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","allTypes","originAnchor","active","lastModified","etag","url","isLocal","protocol","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","urlAnchor","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","abort","finalText","method","crossDomain","host","param","hasContent","beforeSend","send","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","visible","getClientRects","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onabort","onreadystatechange","responseType","responseText","binary","text script","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","_jQuery","_$","$","noConflict","createReduce","iteratee","memo","currentKey","optimizeCb","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","min","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","proto","ObjProto","previousUnderscore","ArrayProto","FuncProto","Function","nativeIsArray","nativeKeys","nativeBind","nativeCreate","create","Ctor","_wrapped","VERSION","argCount","other","accumulator","identity","isObject","Infinity","createAssigner","keysFunc","undefinedOnly","baseCreate","MAX_ARRAY_INDEX","pow","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","findIndex","findKey","negate","every","some","any","includes","include","fromIndex","guard","invoke","isFunc","pluck","where","findWhere","lastComputed","shuffle","rand","shuffled","sample","sortBy","criteria","right","group","behavior","groupBy","indexBy","countBy","partition","pass","take","rest","tail","drop","compact","flatten","shallow","strict","startIndex","output","isArguments","without","difference","uniq","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","mid","floor","lastIndexOf","range","ceil","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","partial","boundArgs","bindAll","memoize","hasher","address","throttle","previous","later","leading","trailing","debounce","immediate","timestamp","callNow","wrapper","compose","times","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","functions","methods","names","extendOwn","assign","pick","oiteratee","omit","defaults","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","isEqual","isEmpty","isString","isElement","Int8Array","isNumber","isNull","isUndefined","constant","propertyOf","accum","getTime","escapeMap","&","<","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","oldSettings","variable","render","chain","instance","_chain","mixin","valueOf","toJSON","Backbone","previousBackbone","emulateHTTP","emulateJSON","addMethod","attribute","defaultVal","addUnderscoreMethods","Class","_isModel","modelMatcher","model","Events","eventSplitter","eventsApi","internalOn","listening","_events","onApi","ctx","_listeners","listenTo","_listenId","listeningTo","_listeningTo","thisId","objId","offApi","listeners","stopListening","ids","_callback","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","Model","cid","cidPrefix","changed","initialize","validationError","idAttribute","sync","_validate","unset","silent","changes","changing","_changing","_previousAttributes","_pending","clear","hasChanged","changedAttributes","previousAttributes","fetch","resp","serverAttrs","wrapError","save","validate","isNew","patch","destroy","urlError","isValid","Collection","models","comparator","_reset","setOptions","addOptions","at","singular","removed","_removeModels","added","merged","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","_onModelEvent","prevId","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","eventName","listener","_createElement","_setAttributes","methodMap","stringify","_method","textStatus","errorThrown","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","_extractParameters","execute","navigate","optional","decodeURIComponent","History","checkUrl","routeStripper","rootStripper","pathStripper","started","atRoot","pathname","getSearch","matchRoot","decodeFragment","decodeURI","getHash","getPath","path","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iWindow","contentWindow","_checkUrlInterval","loadUrl","detachEvent","title","_updateHash","protoProps","staticProps","child","__super__","deepeach","dict","new_dict","linkify","inputText","replacedText","replacePattern1","replacePattern2","replacePattern3","isJSON","sanitize","textify","lst","substr","__utils__get__","cache_key","debug","request","ajaxConfig","response_text","cssGetAttribute","classname","cssLoadFile","Galaxy","optionsDefault","roundToDecimalPlaces","number","numPlaces","placesMultiplier","round","bytesToString","normal_font","numberPlaces","tb","gb","mb","kb","rounded","__utils__uid__","hours","getHours","minutes","getMinutes","getDate","getMonth","getFullYear","appendScriptStyle","getQueryString","search","setWindowTitle","config","brand","_localization2","default","_localization","localeStrings","locale","navigator","language","userLanguage","__root","localize","strToLocalize","cacheNonLocalized","_interopRequireDefault","_interopRequireWildcard","newObj","mixinHash1","propsHash","lastArg","wrapTemplate","jsonNamespace","templateFn","templateVars","_l","buildComparator","attribute_name","ascending","_underscore","_backbone","_addLogging","_addLogging2","LoggableMixin","logger","_logNamespace","SessionStorageModel","initialAttrs","_checkEnabledSessionStorage","_read","sessionStorage","alert","_create","_update","_delete","setItem","DOMException","userAgent","getItem","removeItem","_log","SearchableModelMixin","searchAttributes","searchAliases","searchAttribute","attrKey","searchFor","attrVal","_searchArrayAttribute","term","matchesAll","terms","HiddenUntilActivatedViewMixin","hiddenUntilActivated","$activator","HUAVOptions","$elementShown","showFn","showSpeed","hasBeenShown","onshowFirstTime","onshow","onhide","DraggableViewMixin","draggable","$dragHandle","toggleDraggable","draggableOff","draggableOn","dragStartHandler","_dragStartHandler","dragEndHandler","_dragEndHandler","dataTransfer","effectAllowed","setData","SelectableViewMixin","selectable","$selector","_renderSelected","toggleSelector","hideSelector","showSelector","fxSpeed","toggleSelect","deselect","_utils","_uiSelectDefault","_uiSelectDefault2","_uiSlider","_uiSlider2","_uiOptions","_uiOptions2","_uiDrilldown","_uiDrilldown2","_uiButtons","_uiButtons2","_uiModal","_uiModal2","Label","new_title","Message","message","cls","persistent","fade","messageForDisplay","UnescapedMessage","Input","placeholder","readonly","area","color","new_val","datalist","autocomplete","change","_onchange","attr_name","Hidden","$info","$hidden","Upload","$file","$text","$wait","_readFile","files","reader","FileReader","readAsText","Button","ButtonDefault","ButtonIcon","ButtonCheck","ButtonMenu","ButtonLink","Modal","RadioButton","Checkbox","Radio","Select","Slider","Drilldown","backdrop","closing_events","closing_callback","title_separator","buttonList","$backdrop","canceled","_template","$header","$dialog","$body","$footer","$buttons","buttons","counter","$button","getButton","enableButton","disableButton","showButton","hideButton","queryString","keyRegex","pairString","pair","_uiPortlet","_uiPortlet2","_uiMisc","_uiMisc2","_formSection","_formSection2","_formData","_formData2","initial_errors","icon","always_refresh","hide_operations","onchange","new_model","matchModel","input_id","input_list","field","field_list","new_options","label","emit","is_dynamic","unwait","highlight","input_element","element_list","portlet","$panel","errors","error_messages","matchResponse","Manager","_renderForm","current_check","checksum","refresh_on_change","new_check","section","inputs","operations","collapsible","collapsed","onchange_title","_utils2","_gridModel","_gridModel2","_gridTemplate","_gridTemplate2","_popupMenu","_popupMenu2","grid","grid_config","dict_format","add_tag_to_grid_filter","tag_name","tag_value","add_filter_condition","url_base","items","url_data","k","embedded","init_grid","use_panels","handle_refresh","refresh_frames","currHistoryPanel","loadCurrentHistory","allow_title_display","footer","use_hide_message","init_grid_elements","init_grid_controls","init_refresh_on_change","submit_operation","keyup","set_sort_condition","column_key","text_input_obj","text_input","remove_filter_condition","set_categorical_filter","check_all_items","checkboxes","check_count","update_checked","rating","set_page","popup","operation","_add_operation","operation_config","allowed","allow_popup","addItem","url_args","confirmation_text","confirm","onclick","encode_id","findItemByHtml","add_filter","filter_element","go_page_one","remove_filter","col_key","cur_sort","new_sort","substring","sort_arrow","new_value","category_filter","cur_value","filter_value","new_page","page_num","cur_page","operation_button","operation_name","item_ids","href_parts","href_parms_str","href_parms","get_url_data","can_async_op","update_grid","go_to","advanced_search","_jquery","_jquery2","make_text_editable","config_dict","num_cols","num_rows","use_textarea","on_finish","help_text","input_elt","button_elt","set_text","new_text","cur_text","rows","cols","tooltip","WebhookModel","activate","Webhooks","WebhookView","me","toolId","toolVersion","urlRoot","webhook","webhooks","_uiFrames","_iconButton","_iconButton2","DatasetMetadata","Dataset","hda_ldda","metadata","_set_metadata","new_key","get_metadata","TabularDataset","chunk_url","first_data_chunk","at_eof","url_viz","get_next_chunk","next_chunk","rval","ck_data","DatasetCollection","TabularDatasetChunkedView","row_count","loading_chunk","TabularButtonTracksterView","expand_to_container","scroll_elt","attempt_to_fetch","scrolled_to_bottom","loading_indicator","_renderChunk","data_table","cellpadding","column_names","header_container","header_row","first_chunk","scroll","_renderCell","cell_contents","colspan","$cell","column_types","_renderRow","line","cells","row","num_columns","TopLevelTabularDatasetChunkedView","EmbeddedTabularDatasetChunkedView","innerHeight","scrollHeight","chrom","dataset_id","genome_build","file_ext","modal","frame","log","str","btn_viz","IconButtonView","IconButton","icon_class","mouseover tr","btn_viz_pars","gene_region","createTabularDatasetChunkedView","dataset_config","parent_elt","_data2","_util","_util2","_config","_config2","_gridView","_gridView2","_uiTabs","_uiTabs2","CustomToJSON","to_json_keys","to_json_mappers","select_datasets","success_fn","history_grid","library_grid","tabs","Cancel","Add","requests","data_type","track_defs","CanvasManager","default_font","dummy_canvas","new_canvas","dummy_context","getContext","font","char_width_px","measureText","patterns","load_pattern","Image","createPattern","get_pattern","canvas","manager","Cache","num_elements","obj_cache","key_ary","get_elt","key_str","stale","move_key_to_end","set_elt","most_recently_added","GenomeDataManager","dataset","genome","init_data","min_region_size","filters_manager","data_mode_compatible","entry","mode","can_subset","initial_entries","add_data","entries","set_data","region","data_is_ready","ready_deferred","query_type","ss_deferred","ServerStateDeferred","ajax_settings","go","search_features","query","load_data","resolution","extra_params","filter_names","filter_cols","get_data","is_deferred","entry_region","is_subregion","subset_entry","last_request","DEEP_DATA_REQ","BROAD_DATA_REQ","get_more_data","req_type","cur_data","_mark_stale","query_low","start_val","max_high","query_region","data_manager","new_data_request","new_data_available","max_low","can_get_more_detailed_data","dataset_type","get_more_detailed_data","detail_multiplier","num_samples","get_genome_wide_data","all_data_available","gw_data","chrom_info","chrom_data","GenomeRegion","genome_wide_data","subregion","subset_fns","bigwig","data_point","refseq","seq_start","subregion_data","same","GenomeReferenceDataManager","dataset_placeholder","data_url","Genome","chroms_info","dbkey","get_chroms_info","get_chrom_region","chr_name","get_chrom_len","str_val","from_str","pieces","start_end","compute_overlap","a_region","first_chrom","second_chrom","first_start","second_start","first_end","second_end","overlap_results","DIF_CHROMS","BEFORE","OVERLAP_START","CONTAINS","AFTER","CONTAINED_BY","OVERLAP_END","chrom_len","overlaps","GenomeRegionCollection","BrowserBookmark","note","BrowserBookmarkCollection","BackboneTrack","default_value","ConfigSettingCollection","from_models_and_saved_values","prefs","preloaded_data","BackboneTrackCollection","Visualization","vis_json","GenomeVisualization","drawables","bookmarks","viewport","tracks","add_tracks","dummy","obj_type","content_visible","TrackBrowserRouter","new_loc","change_location","commatize","rgx","_go","get_random_color","colors","new_color","nr","ng","nb","other_color","or","og","ob","n_brightness","o_brightness","brightness","r","g","ok","num_tries","r1","g1","b1","r2","g2","b2","abs","scrollable","nopadding","collapsible_button","$title_text","$title_icon","$content","$operations","collapse","hideOperation","showOperation","setOperation","setIcon","enable","MIN_PANEL_WIDTH","MAX_PANEL_WIDTH","SidePanel","saved_size","hiddenByTool","$center","$toggleButton","panel","components","_templatePanel","_templateHeader","_templateBody","_templateFooter","mousedown .unified-panel-footer > .drag","click .unified-panel-footer > .panel-collapse","_mousedownDragHandler","move","delta","prevX","oldWidth","newWidth","draggingLeft","resize","newSize","whichSide","handle_minwidth_hint","hint","force_panel","op","LeftPanel","RightPanel","CenterPanel","$frame","_iframeChangeHandler","fullpath","onbeforeunload","GalaxyApp","bootstrapped","_init","_baseMvc","_baseMvc2","_userModel","_userModel2","_metricsLogger","_metricsLogger2","NAMESPACE_KEY","DEBUGGING_KEY","localDebugging","localStorage","storageErr","_processOptions","session_csrf_token","_initConfig","_patchGalaxy","_initLogger","loggerOptions","_initLocale","_initUser","user","_setUpListeners","defaultOptions","patchExisting","patchWith","consoleLogger","consoleLevel","MetricsLogger","ALL","consoleNamespaceWhitelist","consoleFlattenMessages","userJSON","User","lastAjax","debugging","setting","debuggingNamespaces","csv","newSettings","_masthead","_masthead2","_panel","_panel2","_panelids","message_box_visible","message_box_content","message_box_class","show_inactivity_warning","inactivity_box_content","center","masthead","$messagebox","$inactivebox","panels","panel_id","panel_class_name","panel_class","panel_instance","renderMessageBox","renderInactivityBox","renderPanels","_checkCommunicationServerOnline","level","verificationLink","communication_server_host","port","communication_server_port","preferences","$chat_icon_element","communication_server","ConfigSetting","set_value","to_key_value_dict","get_value","set_default_value","saved_values","ConfigSettingCollectionView","container_div","tip","new_color_icon","tip_inner","farb_obj","farbtastic","fixed_farb_obj","setColor","help","render_in_modal","cancel_fn","ok_fn","update_from_form","check_enter_esc","OK","PopupMenu","menu","_renderAndShow","clickEvent","_getShownPosition","_setUpCloseBehavior","li","_templateOptions","divider","menuWidth","x","closePopup","findIndexByHtml","make_popupmenu","button_element","initial_options","convertedOptions","optionVal","optionKey","newOption","convertLinksToOptions","$parent","$link","linkHref","linkTarget","confirmText","fromExistingDom","$buttonElement","$menuElement","menuElementLinkSelector","make_popup_menus","menuSelector","buttonSelectorBuildFn","popupMenusCreated","fromDom","$nav","_add","_remove","_change","del","delAll","showTab","hideTab","tab_model","_template_tab","placement","$tmpl","$href","wait_text","wait_cls","percentage","$icon","$title","$progress","$progress_bar","icons","total","$menu","pull","onunload","$root","submodel","suboptions","addMenu","hoverHandler","dist2","hovered","_hover","fn1","fn2","fn3","drag","$event","$special","distance","datakey","def","dontstart","textselect","touched","dd","propagates","mousedown","interactions","interaction","dragging","hijack","live","droppable","ia","cancelled","subject","startX","startY","deltaX","deltaY","originalX","originalY","offsetX","offsetY","available","member","unselectable","locate","$dispatch","touchHooks","touchstart","touchmove","touchend","touchcancel","touches","changedTouches","draginit","dragstart","dragend","__WEBPACK_AMD_DEFINE_FACTORY__","orgEvent","absDelta","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","pageHeight","lowestDelta","shouldAdjustOldDeltas","normalizeOffset","boundingRect","deltaFactor","nullLowestDeltaTimeout","nullLowestDelta","adjustOldDeltas","toFix","toBind","mousewheel","version","onmousewheel","getLineHeight","getPageHeight","$elem","unmousewheel","doAjaxSubmit","ajaxSubmit","captureSubmittingElement","form","clk","clk_x","clk_y","offsetLeft","offsetTop","opera","postError","feature","fileapi","formdata","FormData","hasProp","attr2","deepSerialize","extraData","part","serialized","fileUploadIframe","getDoc","doSubmit","checkState","io","SERVER_ABORT","timeoutHandle","$form","skipEncodingOverride","encoding","enctype","timedOut","CLIENT_TIMEOUT_ABORT","extraInputs","iframeTarget","$io","submitFn","aborted","callbackProcessed","iframeSrc","errMsg","isXml","XMLDocument","domCheckCount","docRoot","responseXML","content-type","Number","dt","scr","textarea","ta","pre","toXml","httpData","sub","execCommand","ignore","csrf_token","csrf_param","forceSync","ActiveXObject","loadXML","action","veto","beforeSerialize","qx","formToArray","semantic","beforeSubmit","q","callbacks","resetForm","clearForm","includeHidden","oldSuccess","replaceTarget","oldError","oldComplete","fileInputs","hasFileInputs","mp","multipart","fileAPI","jqxhr","shouldUseFrame","closeKeepAlive","serializedData","uploadProgress","upload","loaded","lengthComputable","formData","ajaxForm","delegation","ajaxFormUnbind","jmax","fieldValue","required","$input","formSerialize","fieldSerialize","successful","ops","clearFields","clearInputs","re","$sel","Zepto","__webpack_provided_window_dot_jQuery","calls","control","eid","raters","rater","meta","stars","serial","readOnly","cancel","cancelValue","star","half","stw","starWidth","spi","spw","margin-left","selfTriggered","fill","drain","draw","starson","wantCallBack","lastipt","each2","reinsertElement","stripDiacritics","DIACRITICS","equal","measureScrollbar","$template","MEASURE_SCROLLBAR_TEMPLATE","dim","clientWidth","clientHeight","splitVal","separator","getSideBorderPadding","outerWidth","installKeyUpChangeEvent","installFilteredMouseMove","lastpos","lastMousePosition","y","quietMillis","installDebouncedScroll","threshold","setSelectionRange","createTextRange","getCursorInfo","selectionStart","selectionEnd","createRange","moveStart","killEvent","killEventImmediately","measureTextWidth","sizer","currentStyle","fontSize","fontFamily","fontStyle","textTransform","whiteSpace","syncCssClasses","adapter","adapted","replacements","markMatch","markup","escapeMarkup","tl","defaultEscapeMarkup","replace_map","/","ajaxUrl","select2","ajaxDefaults","deprecated","page","hasError","local","dataText","dataItem","process","filtered","datum","childDatum","tags","checkFormatter","formatter","formatterName","countResults","defaultTokenizer","selectCallback","dupe","createSearchChoice","tokenSeparators","cleanupJQueryElements","SuperClass","Select2","KEY","AbstractSelect2","SingleSelect2","MultiSelect2","nextUid","$document","scrollBarDimensions","TAB","ENTER","ESC","SPACE","LEFT","UP","RIGHT","DOWN","SHIFT","CTRL","ALT","PAGE_UP","PAGE_DOWN","HOME","END","BACKSPACE","DELETE","isArrow","isControl","metaKey","isFunctionKey","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","prepareOpts","createContainer","liveRegion","role","aria-live","containerId","containerEventName","adaptContainerCssClass","containerCss","containerCssClass","elementTabIndex","dropdown","adaptDropdownCssClass","dropdownCssClass","queryCount","resultsPage","initContainer","highlightUnderEvent","_touchEvent","touchMoved","clearTouchMoved","selectHighlighted","loadMoreIfNeeded","updateResults","nextSearchTerm","initSelection","monitorSource","maximumInputLength","autofocus","searchInputPlaceholder","_sync","propertyObserver","disconnect","optionToData","idKey","populateResults","populate","depth","compound","innerContainer","formatted","sortResults","formatResultCssClass","formatResult","formatMatches","placeholderOption","more","elm","getPlaceholder","getPlaceholderOption","createSearchChoicePosition","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","mutations","observe","subtree","triggerSelect","choice","triggerChange","details","blurOnChange","isInterfaceEnabled","enabledInterface","enableInterface","_enabled","_readonly","opened","positionDropdown","bodyOffset","above","changeDirection","resultsListNode","$dropdown","outerHeight","dropHeight","$window","windowWidth","windowHeight","viewPortRight","viewportBottom","dropTop","dropLeft","enoughRoomBelow","enoughRoomAbove","dropWidth","enoughRoomOnRight","aboveNow","focusSearch","dropdownAutoWidth","bottom","dropdownCss","shouldOpen","clearDropdownAlignmentPreference","opening","mask","orient","selectOnBlur","noFocus","that","clearSearch","externalSearch","getMaximumSelectionSize","maximumSelectionSize","ensureHighlightVisible","hb","rb","topOffset","findHighlightableChoices","moveHighlight","choices","removeHighlight","_touchMoved","countSelectableResults","loadMorePadding","postprocessResults","formatLoadMore","postRender","queryNumber","lastTerm","showSearchInput","maxSelSize","formatSelectionTooBig","minimumInputLength","formatInputTooShort","showSearch","formatInputTooLong","formatSearching","formatAjaxError","formatNoMatches","highlighted","onSelect","firstOption","initContainerWidth","resolveContainerWidth","focusser","minimumResultsForSearch","shouldFocusInput","isFocused","elementLabel","idSuffix","originalTitle","openOnEnter","altKey","ctrlKey","shiftKey","allowClear","setPlaceholder","isPlaceholderOptionSelected","updateSelection","is_match","noHighlightUpdate","oldData","cssClass","formatSelection","formatSelectionCssClass","ordered","selectChoice","searchContainer","_this","keydowns","selectedChoice","unselect","resizeSearch","clearPlaceholder","getMaxSearchWidth","getVal","addSelectedChoice","tokenizer","closeOnSelect","enableChoice","enabledItem","disabledItem","setVal","minimumWidth","containerLeft","searchWidth","sideBorderPadding","buildChangeDetails","onSortStart","onSortEnd","multiple","allowedMethods","valueMethods","propertyMethods","methodsMap","multi","single","selectedObject","currentSearchTerm","msMaxTouchPoints","locales","limit","pageNumber","util","abstract","u","ui","COMMA","ESCAPE","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","_focus","scrollParent","ie","removeUniqueId","innerWidth","focusable","tabbable","minHeight","borderWidth","selectstart","ie6","disableSelection","enableSelection","plugin","plugins","hasScroll","isOverAxis","isOver","widget","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","widgetEventPrefix","widgetName","widgetBaseClass","widgetFullName","bridge","f","defaultElement","uuid","eventNamespace","_getCreateOptions","bindings","hoverable","_on","_trigger","_getCreateEventData","_destroy","_setOptions","_setOption","_off","_delay","_hoverable","_focusable","focusout","effect","effects","uiBackCompat","mouseup","_mouseInit","_mouseDown","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseStarted","_mouseUp","_mouseDownEvent","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","_mouseDrag","_mouseStop","h","scrollbarWidth","getScrollInfo","scrollWidth","getWithinInfo","of","within","E","collision","S","T","N","C","my","offsetFractions","marginTop","targetWidth","targetHeight","elemWidth","elemHeight","collisionPosition","collisionWidth","collisionHeight","bgiframe","horizontal","vertical","important","fit","flip","flipfit","background","autoFocus","minLength","pending","isMultiLine","_isMultiLine","valueMethod","isNewMenu","keydown","_move","_keyEvent","_value","_searchTimeout","keypress","selectedItem","cancelBlur","searching","_initSource","menufocus","menuselect","_search","cancelSearch","_response","__response","_normalize","_suggest","_close","_renderMenu","refresh","_resizeMenu","_renderItemData","_renderItem","isFirstItem","isLastItem","escapeRegex","messages","noResults","primary","secondary","_determineButtonType","hasTitle","buttonElement","_resetButton","submenu","menus","activeMenu","mousedown .ui-menu-item > a","click .ui-state-disabled > a","click .ui-menu-item:has(a)","mouseenter .ui-menu-item","mouseleave .ui-menu","collapseAll","_keydown","previousPage","nextPage","_activate","previousFilter","filterTimer","aria-hidden","aria-expanded","_itemRole","listbox","_scrollIntoView","_startOpening","_hasScroll","_open","mouse","orientation","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_valueMin","handles","_start","_valueMax","_trimAlignValue","_slide","_stop","_refreshValue","elementSize","elementOffset","_normValueFromMouse","_clickOffset","_values","toFixed","_farbtastic","fb","linkTo","updateValue","unpack","rgb","hsl","RGBToHSL","updateDisplay","setHSL","HSLToRGB","pack","initWidget","browser","msie","radius","wheelWidth","square","markerSize","solidFill","cnvMask","ctxMask","cnvOverlay","ctxOverlay","translate","drawCircle","drawMask","color1","d1","nudge","angle1","lineWidth","d2","angle2","x1","sin","y1","x2","y2","am","tan","xm","ym","color2","corr","grad","createLinearGradient","addColorStop","fillStyle","beginPath","moveTo","quadraticCurveTo","lineTo","strokeStyle","stroke","restore","calculateMask","sizex","sizey","outputPixel","isx","isy","sq","getImageData","sz","buffer","putImageData","drawImage","cache_last","c_last","a_last","packDX","fillRect","drawMarkers","lw","angle","c1","c2","circles","clearRect","arc","backgroundColor","widgetCoords","mousemove","circleDrag","hue","atan2","sat","lum","dec2hex","m1","m2","hueToRGB","Tour","storage","_error","_options","steps","autoscroll","keyboard","backdropContainer","backdropPadding","redirect","orphan","basePath","afterSetState","afterGetState","afterRemoveState","onStart","tour","onEnd","onShow","onShown","onHide","onHidden","onNext","onPrev","onPause","onResume","onRedirectError","_force","_inited","_current","overlay","$element","$background","backgroundShown","overlayElementShown","addSteps","_i","_len","addStep","getStep","reflexElement","force","ended","_debug","setCurrentStep","_initMouseNavigation","_initKeyboardNavigation","_onResize","showStep","_makePromise","_callOnPromiseDone","hideStep","_showNextStep","_showPrevStep","goTo","endHelper","_setState","_clearTimer","_getState","restart","_removeState","pause","_paused","_duration","_timer","resume","_isLast","hideStepHelper","popover","reflex","_reflexEvent","_hideBackdrop","showStepHelper","skipToPrevious","showPopoverAndOverlay","_isRedirect","_redirect","_isJustPathHashDifferent","_isOrphan","_showBackdrop","getCurrentStep","_showOverlayElement","_showPopover","redraw","keyName","QUOTA_EXCEEDED_ERR","_state","showNextStepHelper","showPrevStepHelper","currentPath","_isHostDifferent","_isPathDifferent","currentURL","_getProtocol","_getHost","_getPath","_equal","_getQuery","_getHash","namespaceURI","$tip","isOrphan","shouldAddSmart","smartPlacement","_reposition","_center","$navigation","$next","$prev","$resume","offsetBottom","offsetRight","originalLeft","originalTop","tipOffset","_replaceArrow","dimension","$this","_hideOverlayElement","_hideBackground","elementData","_applyBackdropPadding","_getParams","paramsObject","obj1","obj2","define","optionsOverride","toastType","iconClass","getOptions","iconClasses","info","subscribe","warning","$toastElement","$container","getContainer","hideMethod","hideDuration","hideEasing","removeToast","getDefaults","tapToDismiss","toastClass","showMethod","showDuration","showEasing","extendedTimeOut","positionClass","timeOut","titleClass","messageClass","closeHtml","newestOnTop","publish","hideToast","override","endTime","delayedhideToast","intervalId","stickAround","toastId","$titleElement","$messageElement","$closeElement","closeButton","toastr","init_tag_click_function","tag_elt","click_func","tag_str","tag_name_and_value","autocomplete_tagging","init_delete_tag_image","delete_img","delete_tag_img_rollover","delete_tag_img","tag_button","tag_name_elt","prev_button","get_toggle_link_text_fn","toggle_link","ajax_delete_tag_url","tag_area","build_tag_button","tag_click_fn","editable","num_tags","input_size","in_form","use_toggle_link","item_id","add_tag_img","add_tag_img_rollover","ajax_autocomplete_tag_url","ajax_retag_url","ajax_add_tag_url","this_obj","tag_input_field","add_tag_button","after_toggle_fn","new_tag_button","tag_buttons","last_tag_button","zz","new_tag","cacheFlush","format_item_func","row_position","search_term","autocomplete_options","selectFirst","formatItem","autoFill","autocomplete_verheul","is_active","handle_document_click","hide_modal","show_modal","extra_buttons","init_fn","setContent","show_message","show_in_overlay","$overlay","dialog","$extraButtons","_bootstrapTour","gxy_root","tour_opts","hooked_tour_from_data","preclick","postclick","textinsert","TourItem","Tours","giveTour","tour_id","tourdata","ToursView","tpl","tourpage_template","tourtags","Untagged","tours","tourtagorder","addLogging","addTo","LOGGING_FNS","logFn","email","total_disk_usage","nice_total_disk_usage","quota_percent","is_admin","isAnonymous","isAdmin","loadFromApi","idOrCurrent","CURRENT_ID_STR","userFn","newModel","clearSessionStorage","userInfo","getCurrentUserFromApi","currentUser","FrameView","$option","cell","top_min","frame_max","top_max","frame_z","frame_counter","frame_uid","frame_list","frame_shadow","_frameInit","_frameResize","_panelRefresh","Close","frame_id","_toPixelCoord","_frameInsert","_panelAnimationComplete","DOMMouseScroll","mousedown .frame","mousedown .frame-background","mousedown .frame-scroll-up","mousedown .frame-scroll-down","mousedown .f-close","_eventFrameMouseDown","_frameIdentify","xy","_frameDragStart","_eventFrameMouseMove","event_xy_new","event_xy_delta","_frameScreen","min_dim","_toGridCoord","_frameOffset","_eventFrameMouseUp","_frameDragStop","_eventFrameClose","_eventHide","_eventPanelScroll","srcElement","_panelScroll","_eventPanelScroll_up","_eventPanelScroll_down","_frameFocus","_frameGrid","grid_location","px","sign","_toGrid","_toPixel","_isCollision","_locationRank","loc","top_new","screen_location","grid_rank","place_list","place","_framePlace","has_focus","on_click","menu_options","is_menu_button","tooltip_config","new_elem","IconButtonCollection","IconButtonMenuView","elt","create_icon_buttons_menu","global_config","button_config","data2","error_text","empty_text","searchable","individual","pagesize","_changeData","_changeDisabled","_changeWait","_changeVisible","_changeValue","_renderSearchable","_renderClassic","$select","_getValue","$resize","$resize_icon","currentY","currentHeight","all_button","_match","matched_tags","found","_setValue","exists","sorter","keep","setOnChange","Base","$message","$options","_templateOption","_messageShow","BaseIcons","_toolForm","VisibilityMixin","is_visible","ToolParameter","ToolParameterCollection","DataToolParameter","IntegerToolParameter","get_samples","d3","domain","ticks","FloatToolParameter","SelectToolParameter","subModelTypes","integer","Tool","description","outputs","remove_inputs","tool","incompatible_inputs","only_samplable_inputs","valid_inputs","apply_search_results","set_input_value","set_input_values","inputs_dict","input_name","_run","rerun","target_dataset","regions","target_dataset_id","get_inputs_dict","input_dict","additional_params","payload","tool_id","run_deferred","ToolCollection","ToolSectionLabel","ToolSection","clear_search_results","cur_label","all_hidden","ToolSearch","search_hint_string","min_chars_for_search","clear_btn_url","clear_key","do_search","ga","clear_search","ToolPanel","tool_search","tools","layout","parse_elt","elt_dict","model_class","panel_elt","BaseView","update_visible","ToolLinkView","templates","tool_link","formStyle","ToolSectionLabelView","ToolSectionView","update_open","panel_section","section_body","tool_view","label_view","click .toolSectionTitle > a","ToolSearchView","keyup :input","change :input","click #search-clear-btn","focus_and_select","query_changed","evData","ToolPanelView","handle_search_results","search_view","section_title_view","ToolFormView","tool_form","tool_panel_view","tool_form_view","show_tool","_toolFormBase","_toolFormBase2","_webhooks","_webhooks2","listen_to_history","buildmodel","build_url","build_data","job_id","_customize","error_message","err_msg","large","postchange","current_state","tool_version","execute_button","job_remap","job_def","$f","_templateSuccess","jobs","refreshContents","input_found","err_data","_templateError","job_inputs","batch_n","batch_src","job_input_id","input_value","input_field","input_def","batch","njobs","njobs_text","hid","_deferred","_deferred2","_formView","_formView2","_citationModel","_citationModel2","_citationView","_citationView2","_render","fixed_title","_operations","_footer","versions_button","narrow","sustain_version","versions","menu_button","biostar_url","prompt","origin","requirements","requirements_visible","_templateRequirements","sharable_url","function","_templateHelp","citations","$citations","ToolCitationCollection","CitationListView","nreq","requirements_message","req","requirements_link","has_deferred","ondblclick","onconfirm","cls_tr","$thead","$tbody","$tmessage","_row","dblclick","addHeader","appendHeader","align","_commit","_refresh","_onclick","old_value","_ondblclick","v_id","v_name","_templateRow","app","sum","flat_id","flat_dict","result_dict","convert","block_indices","block_prefix","block_label","test_param","selectedCase","matchCase","flat","collapsible_value","p_id","_iterate","visitInputs","new_id","truevalue","falsevalue","cases","_bibtex","parseBibtex","ENTRY_TYPES_","online","Citation","_fields","rawFields","Fields","lowerKey","entryType","EntryType","fields","BaseCitationCollection","HistoryCitationCollection","history_id","warn","lastTime","vendors","requestAnimationFrame","cancelRequestAnimationFrame","currTime","timeToCall","cancelAnimationFrame","features","compatible","CanvasRenderingContext2D","incompatibilities","migrateWarn","warnedAbout","migrateWarnings","migrateMute","migrateTrace","trace","migrateWarnProp","newValue","_definePropertyBroken","migrateVersion","migrateReset","compatMode","attrFn","oldAttr","valueAttrGet","valueAttrSet","rnoType","rnoAttrNodeType","rboolean","ruseDefault","lowerName","attrNode","oldInit","oldFind","oldParseJSON","rspaceAngle","rattrHashTest","rattrHashGlob","querySelector","err1","err2","findProp","uaMatch","ua","chrome","webkit","safari","boxModel","jQuerySub","superclass","rootjQuerySub","internalSwapCall","oldHook","oldFnData","clean","handleScript","jsTags","eventAdd","eventRemove","eventTrigger","oldToggle","oldLive","oldDie","die","oldLoad","ajaxEvents","rajaxEvent","rhoverHack","hoverHack","toggler","lastToggle","oldSelf","oldFnFind","oldDeferred","isResolved","isRejected","Autocompleter","inputClass","loadingClass","resultsClass","selectClass","queryParamName","extraParams","remoteDataType","lineSeparator","cellSeparator","minChars","maxItemsToShow","maxCacheLength","matchSubset","matchInside","mustMatch","selectOnly","showResult","preventDefaultReturn","preventDefaultTab","filterResults","sortFunction","onItemSelect","onNoMatch","onFinish","matchStringConverter","beforeUseConverter","autoWidth","useDelimiter","delimiterChar","delimiterKeyCode","onError","sanitizeResult","sanitizeInteger","stdValue","makeUrlParam","makeUrl","urlAppend","sortValueAlpha","plainTextParser","lines","cacheData_","cacheLength_","selectClass_","keyTimeout_","finishTimeout_","lastKeyPressed_","lastProcessedValue_","lastSelectedValue_","active_","finishOnBlur_","dom","$results","selectCurrent","focusPrev","focusNext","deactivate","onBlurFunction","totalHeight","inputBottom","bottomIfDown","topIfUp","cacheRead","filterLength","searchLength","maxPos","cacheWrite","callHook","hook","activateNow","fetchData","processResults","showResults","fetchRemoteData","remoteData","ajaxCallback","parseRemoteData","setExtraParam","defaultFilter","testValue","patternIndex","filterResult","converter","getValue","enableFinishOnBlur","disableFinishOnBlur","createItemFromResult","$li","selectItem","getItems","numResults","$ul","$first","firstItemClass","lastItemClass","focusItem","hideResults","lcValue","lcFilter","valueLength","getDelimiterOffsets","pad","setValue","selectRange","focusMove","modifier","$items","$item","displayValue","processedDisplayValue","delimiter","extraCaretPos","setCaret","moveEnd","getCaret","stored_range","duplicate","moveToElementText","setEndPoint","preCaretVal","postCaretVal","createClass","SPFormat","clipval","quartile","normalizeValue","normalizeValues","addCSS","ensureArray","formatNumber","RangeMap","MouseHandler","Tooltip","barHighlightMixin","bar","tristate","discrete","bullet","pie","defaultStyles","initStyles","VShape","VCanvas_base","VCanvas_canvas","VCanvas_vml","UNSET_OPTION","shapeCount","common","lineColor","fillColor","defaultPixelsPerValue","composite","tagValuesAttribute","tagOptionsPrefix","enableTagOptions","enableHighlight","highlightLighten","tooltipSkipNull","tooltipPrefix","tooltipSuffix","disableHiddenCheck","numberFormatter","numberDigitGroupCount","numberDigitGroupSep","numberDecimalMark","disableTooltips","disableInteraction","spotColor","highlightSpotColor","highlightLineColor","spotRadius","minSpotColor","maxSpotColor","normalRangeMin","normalRangeMax","normalRangeColor","drawNormalOnTop","chartRangeMin","chartRangeMax","chartRangeMinX","chartRangeMaxX","tooltipFormat","barColor","negBarColor","stackedBarColor","zeroColor","nullColor","zeroAxis","barWidth","barSpacing","chartRangeClip","colorMap","posBarColor","zeroBarColor","tooltipValueLookups","-1","1","thresholdColor","thresholdValue","targetColor","performanceColor","rangeColors","sliceColors","borderColor","boxLineColor","boxFillColor","whiskerColor","outlierLineColor","outlierFillColor","medianColor","showOutliers","outlierIQR","tooltipFormatFieldlistKey","lq","med","uq","lo","ro","rw","SPFormatClass","fre","precre","format","fclass","fieldset","lookups","lookupkey","fieldvalue","prec","lookup","spformat","vl","nf","vals","groupsize","groupsep","decsep","ignoreNull","createStyleSheet","WebkitAppearance","simpledraw","useExisting","interact","mhandler","sparkline","registerCanvas","cleardraw","RangeMapClass","rangelist","range_map","currentPageX","currentPageY","splist","over","displayTooltips","highlightEnabled","registerSparkline","sp","$canvas","mouseclick","removeTooltip","sparklines","currentEl","updatePosition","spcount","needsRefresh","clearRegionHighlight","tooltiphtml","changeEvent","localX","localY","setRegionHighlight","getCurrentRegionTooltip","disableHighlight","sizeStyle","tooltipClassname","sizetipStyle","tooltipOffsetX","tooltipOffsetY","sizetip","updateWindowDims","scrollRight","getSize","mousex","mousey","userValues","userOptions","sparkline_display_visible","pl","extendedOptions","tagOptionType","tagValCache","getTagSetting","mergedOptions","keyval","defaultval","tagOption","_base","currentRegion","initTarget","interactive","canvasWidth","pixelWidth","canvasHeight","pixelHeight","getRegion","newRegion","renderHighlight","changeHighlight","formats","formatlen","showFields","showFieldsKey","newFields","fv","fieldlen","getCurrentRegionFields","calcHighlightColor","mult","rgbnew","highlightColor","lighten","newShapes","shapeids","regionShapes","renderRegion","replaceWithShapes","newShape","replaceWithShape","shapes","vertices","regionMap","xvalues","yvalues","yminmax","hightlightSpotId","lastShapeId","highlightSpot","highlightLine","vertex","highlightSpotId","insertAfterShape","drawLine","canvasTop","highlightLineId","removeShapeId","scanValues","isStr","valcount","maxy","maxyorg","miny","minyorg","maxx","minx","processRangeOptions","drawNormalRange","canvasLeft","rangey","ytop","drawRect","rangex","yvallast","paths","xnext","xpos","xposnext","yvalcount","lineShapes","fillShapes","plen","valueSpots","hlSpotsEnabled","drawShape","getLastShapeId","isStackString","groupMin","groupMax","stackRanges","numValues","vlen","xaxisOffset","clipMin","clipMax","stacked","vlist","slen","svals","yoffset","yMaxCalc","stackMin","stackMax","totalBarWidth","stackTotals","stackRangesNeg","canvasHeightEf","colorMapByIndex","colorMapByValue","calcColor","stacknum","valuenum","newColor","yoffsetNeg","minPlotted","allMin","halfHeight","itemWidth","pheight","valueShapes","regiondata","shapeid","getShapeAt","fieldkey","shape","renderRange","renderPerformance","renderTarget","rn","rangeval","rangewidth","perfval","perfwidth","targetval","targettop","targetheight","p1","t0","newslice","renderSlice","circle","drawPieSlice","quartiles","loutlier","routlier","lwhisker","rwhisker","iqr","q1","q2","q3","unitSize","minValue","maxValue","appendShape","_pxregex","_genShape","startAngle","endAngle","getElement","_insert","_calculatePixelDims","shapetype","shapeargs","verticalAlign","shapeseq","currentTargetShapeId","_getContext","_drawShape","targetX","targetY","isPointInPath","_drawCircle","_drawPieSlice","closePath","_drawRect","sid","shapemap","groupel","insertAdjacentHTML","rendered","prerender","closed","vpath","startx","starty","endx","endy","vel","outerHTML","_reloadData","_backend","_storage_elm","E5","_observer_update","E6","_storage_service","jStorage","_load_storage","_handleTTL","_handlePubSub","_setupObserver","_storageObserver","updateTime","_observer_timeout","jStorage_update","_checkUpdatedKeys","newCrc32List","oldCrc32List","_storage","__jstorage_meta","CRC32","updated","_fireObservers","_observers","jlen","_publishChange","E8","_storage_size","_save","_dropOldEvents","E7","_checkKey","curtime","TTL","nextExpire","deleted","_ttl_timeout","PubSub","pubelm","_pubsubCurrent","_pubsub_last","_fireSubscribers","channel","_pubsub_observers","retire","_publish","murmurhash2_32_gc","charCodeAt","decode","evalJSON","encode","_XMLService","xmlNode","XMLSerializer","serializeToString","E1","E2","xmlString","resultXML","dom_parser","_xmlString","xml_doc","deleteKey","_is_xml","setTTL","ttl","getTTL","flush","storageObj","F","storageSize","currentBackend","storageAvailable","listenKeyChange","reInit","localStorageReallyWorks","BogusQuotaExceededErrorOnIos5","E3","globalStorage","hostname","E4","addBehavior","persisted","complexify","additionalComplexityForCharset","inBanlist","banMode","bannedPasswords","evaluateSecurity","complexity","valid","CHARSETS","strengthScaleFactor","MIN_COMPLEXITY","minimumChars","MAX_COMPLEXITY","COMPLEXIFY_BANLIST","transitionEnd","transEndEventNames","WebkitTransition","MozTransition","OTransition","transition","emulateTransitionEnd","called","Tab","$target","$active","tab","Constructor","hoverState","DEFAULTS","triggers","eventIn","eventOut","enter","leave","fixTitle","getDelegateOptions","autoToken","autoPlace","getPosition","actualWidth","actualHeight","orgPlacement","docScroll","parentWidth","parentHeight","parentLeft","calculatedOffset","getCalculatedOffset","applyPlacement","replaceArrow","arrow","getTitle","$e","$arrow","toggleEnabled","clearMenus","getParent","Dropdown","isActive","Popover","getContent","replace_big_select_inputs","min_length","max_length","select_elts","refresh_select2","select_elt","num_options","select_field","select_val","ref_on_change_vals","last_selected_value","_modal","_modal2","_asyncSaveText","_asyncSaveText2","_popupmenu","_popupmenu2","_autocom_tagging","_autocom_tagging2","_tours","_tours2","_queryStringParsing","async_save_text","onloadWebhooks","anchor","galaxy_main_exists","frames","galaxy_main","et","click_to_edit_elt","text_elt_id","save_url","text_parm_name","on_start","text_elt","old_text","ajax_data","processed_text","element_menu_exists","menu_element","close_popup","link","link_dom","confirmtext","amdi18n","Analyze Data","Workflow","Shared Data","Data Libraries","Histories","Workflows","Visualizations","Pages","New Track Browser","Saved Visualizations","Interactive Environments","Admin","Help","Support","Search","Mailing Lists","Videos","Wiki","How to Cite Galaxy","Interactive Tours","Login","Register","Login or Register","Logged in as","Preferences","Custom Builds","Logout","Saved Histories","Saved Datasets","Saved Pages","Account and saved data","Account registration or login","Support, contact, and community","Administer this Galaxy","Visualize datasets","Access published resources","Chain tools into workflows","Analysis home view","History Lists","Histories Shared with Me","Current History","Create New","Copy History","Share or Publish","Show Structure","Extract Workflow","Delete Permanently","Dataset Actions","Copy Datasets","Dataset Security","Resume Paused Jobs","Collapse Expanded Datasets","Unhide Hidden Datasets","Delete Hidden Datasets","Purge Deleted Datasets","Downloads","Export Tool Citations","Export History to File","Other Actions","Import from File","This history is empty","No matching datasets found","An error occurred while getting updates from the server","Please contact a Galaxy administrator if the problem persists","search datasets","You are currently viewing a deleted history!","You are over your disk quota","Tool execution is on hold until your disk usage drops below your allocated quota","All","None","For all selected","Edit history tags","Edit history Annotation","Click to rename history","Operations on multiple datasets","Hide datasets","Unhide datasets","Delete datasets","Undelete datasets","Permanently delete datasets","This will permanently remove the data in your datasets. Are you sure?","Annotation","This history is empty. Click 'Get Data' on the left tool menu to start","You must be logged in to create histories","Unable to purge dataset","Cannot display datasets removed from disk","This dataset must finish uploading before it can be viewed","This dataset is not yet viewable","View data","Download","Download dataset","Additional files","View details","This is a new dataset and not all of its data are available yet","You do not have permission to view this dataset","The job creating this dataset was cancelled before completion","This job is waiting to run","This dataset is currently uploading","Metadata is being auto-detected","This job is currently running","This job is paused. Use the \"Resume Paused Jobs\" in the history menu to resume","An error occurred with this dataset","No data","An error occurred setting the metadata for this dataset","There was an error getting the data for this dataset","This dataset has been deleted and removed from disk","This dataset has been deleted","This dataset has been hidden","database","Edit attributes","Cannot edit attributes of datasets removed from disk","Undelete dataset to edit attributes","This dataset must finish uploading before it can be edited","This dataset is not yet editable","Delete","Dataset is already deleted","View or report this error","Run this job again","Visualize","Visualize in","Undelete it","Permanently remove it from disk","Unhide it","You may be able to","set it manually or retry auto-detection","Edit dataset tags","Edit dataset annotation","Tool Help","Search Tool Shed","Monitor installing repositories","Manage installed tools","Reset metadata","Download local tool","Tool lineage","Reload a tool's configuration","Review tool migration stages","View Tool Error Logs","Manage Display Whitelist","Manage Tool Dependencies","Users","Groups","API keys","Impersonate a user","Quotas","Roles","Local data","Form Definitions","Enable/Disable Scratchbook","Show/Hide Scratchbook","Tags","Edit annotation","__ja","Search datasets","Edit history annotation","Search Tool Shed (Beta)","Form definitions","Administration","Server","Tools and Tool Shed","User Management","__fr","load your own data","get data from an external source","Include Deleted Datasets","Include Hidden Datasets","__zh","_i18n","userId","usefulToString","asStr","LoggingCache","_typeof","LOG","DEBUG","INFO","WARN","ERROR","METRIC","NONE","logLevel","defaultNamespace","clientPrefix","maxCacheSize","postSize","addTime","cacheKeyPrefix","postUrl","delayPostInMs","getPingData","onServerResponse","_parseLevel","_sending","_waiting","_postSize","_initCache","maxSize","_emitToConsole","upper","logArguments","_addToCache","_buildEntry","_postCache","toISOString","entriesLength","postData","metrics","post","responseJSON","_delayPost","whitelist","metric","_hasStorage","_initStorage","_cache","_fetchAndParse","overage","_unparseAndStore","print","_menu","_menu2","_scratchbook","_scratchbook2","_userQuotameter","_userQuotameter2","$navbarBrandLink","$navbarBrandImage","$navbarBrandTitle","$navbarTabs","$quoteMeter","quotaMeter","UserQuotaMeter","$download_link","logo_url","logo_src","_genericNavView","_genericNavView2","extendedNavItem","GenericNavView","helpTab","support_url","search_url","mailing_lists","screencasts_url","wiki_url","citation_url","terms_url","biostar_url_redirect","userTab","allow_user_creation","noscratchbook","activeView","active_view","$toggle","$note","click .dropdown-toggle","_formatUrl","menuItem","_buildMenuItem","_toggleClick","buildLink","makeModalIframe","persistent_communication_rooms","query_string","$el_chat_modal_header","$el_chat_modal_body","iframe_template","frame_width","frame_height","_uiFrames2","_visualization","_visualization2","_trackster","_trackster2","buttonActive","show_note","note_cls","buttonLoad","history_cache","addDataset","current_dataset","historyId","dataset_ids","_findDataset","history_details","dataset_list","_loadDatasetOffset","new_dataset_id","_loadDataset","new_dataset","is_tabular","addTrackster","viz_id","viz","TracksterUI","frame_config","view_config","stand_alone","latest_revision","create_visualization","$galaxy_main","async_ops","categorical_filters","sort_key","show_item_checkboxes","num_pages","cur_val","condition","condition_index","get_url","tmpl","grid_header","grid_table","info_text","global_actions","show_popup","grid_filters","columns","column","num_rows_rendered","encoded_id","current_item_id","nowrap","column_settings","column_config","attach_popup","label_id_prefix","use_paging","num_page_links","cur_page_num","page_link_range","min_page","min_offset","max_offset","max_range","max_page","page_index","allow_multiple","found_global","global_operation","legend","default_filter_dict","advanced_search_display","show_advanced_search_link","filterable","f_key","d_key","standard_search_display","grid_column_filter","column_label","is_text","temp_column","column_filter","seperator","cf_label","cf","cf_key","cf_arg","filter_key","precise","$slider","pressed","_isParameter","has_slider","slider","header_index","header_id","is_expanded","$subgroup","attach","iterate","has_options","new_header","$group","_tracks","_tracks2","_queryStringParsing2","baseURL","save_viz","annotation","overview_track_name","overview_drawable","viz_config","to_dict","overview","vis_id","vis_info","has_changes","createButtonMenu","new_tracks","track","add_drawable","object_from_template","DrawableGroup","force_right_panel","handle_unsaved_changes","buttonMenu","add_bookmark","bookmarks_container","new_bookmark","position_div","annotation_div","delete_icon_container","viewport_config","drawables_config","bookmarks_config","TracksterView","editor","load_chroms_deferred","overview_drawable_name","change_chrom","set_overview","bookmark","set_up_router","init_keyboard_nav","move_fraction","viewport_container","Leave without Saving","Save","resize_window","galaxy_config","view_existing","choose_existing_or_new","view_new","listTracksParams","dataset_params","View in saved visualization","view_in_saved","View in new visualization","tracks_grid","Add to visualization","init_editor","template_view_new","Create","create_browser","dbkeys_in_genomes","default_dbkey","add_dataset","track_data","places","supportsByteRanges","_viz_views","_viz_views2","_slotting","_slotting2","_painters","_painters2","_filters","_filters2","_tools","_tools2","_bbiDataManager","_bbiDataManager2","html_elt_js_obj_dict","is_container","moveable","handle_class","container_selector","element_js_obj","cur_container","remove_drawable","add_drawable_before","move_drawable","DATA_NOCONVERTER","CONTINUOUS_DATA_MODES","Drawable","obj_dict","id_counter","drag_handle_class","is_overview","action_icons","config_params","config_onchange","build_container_div","header_div","header_view","TrackHeaderView","icons_div","action_icons_def","css_class","on_click_fn","drawable","toggle_icon","hide_contents","show_contents","can_draw","request_draw","_draw","set_name","new_name","old_name","revert_name","update_intro_div","update_icons","get_drawables","DrawableCollection","unpack_drawables","drawables_array","dictified_drawables","replace_drawable","old_drawable","new_drawable","update_html","new_position","get_tracks","track_type","content_div","FiltersManager","parent_div","saved_filters_managers","old_manager","setup_multitrack_filtering","show_composite_track","clear_filters","_restore_filter_managers","clear_tile_cache","tiles_div","num_drawables","composite_icon","filters_icon","CompositeTrack","a_type","get_type","num_feature_tracks","can_composite","FeatureTrack","LineTrack","shared_filters","remove_all","new_filter","filter_name","NumberFilter","init_filters","composite_track","label_tracks","tracks_to_be_redrawn","zoom_factor","min_separation","canvas_manager","requested_redraw","parent_element","top_container","browser_content_div","bottom_container","top_labeltrack","intro_div","nav_container","nav","overview_viewport","overview_close","overview_highlight","overview_box_background","overview_box","default_overview_height","nav_controls","chrom_select","submit_nav","location_span","nav_input","all_features","feature_search_deferreds","dataset_features","hidden_input","zo_link","zoom_out","zi_link","zoom_in","load_chroms","current_x","delta_chrom","move_delta","reset_overview","original_low","current_height","new_scroll","span","update_location","old_low","request_redraw","add_label_track","LabelTrack","resize_timer","get_base_color","trigger_navigate","new_chrom","new_low","new_high","url_parms","reference","ref_track","ReferenceTrack","reference_track","chrom_option","prev_chroms","next_chroms","chrom_start_index","start_index","chrom_pos","fraction","current_chrom_span","data_fetch","redraw_on_move_fn","label_track","track_list","track_options","_redraw","resolution_px_b","left_px","width_px","point","cur_center","new_half","resize_viewport","postdraw_actions","TracksterTool","tool_state","state_dict","ToolParameterView","param_div","update_value","update_event","TracksterToolView","set_visible","param_view","run_tool_row","run_on_dataset_button","run_on_region","run_on_dataset","update_params","url_params","current_track","track_name","tool_region_and_parameters_str","new_track","init_for_tool_data","change_mode","set_filters_manager","set_dataset","success_callback","FilterScaler","default_val","Scaler","gen_val","feature_data","MAX_VALUE","Tile","w_scale","html_elt","predisplay_actions","LineTrackTile","FeatureTrackTile","all_slotted","feature_mapper","incomplete_features","seq_data","has_icons","other_tiles_features_drawn","Track","dataset_check_type","data_url_extra_params","data_query_wait","data_and_mode_compatible","min_height_px","max_height_px","visible_height_px","add_resize_handle","regions_to_use","view_region","bookmarked_regions","No","Yes","on_resize","in_handle","in_drag","drag_control","original_height","new_height","tile_cache","ReadTrack","VariantTrack","msg_html","retry","init_deferred","kind","valid_chroms","predraw_init","msg_elt","stats","min_value","max_value","mean","sd","TiledTrack","filters_available","left_offset","dynamic_tool_div","overlay_div","slotters","max_rows","set_min_max","new_mode","mode_icon","tools_icon","param_space_viz_icon","_gen_tile_cache_key","tile_region","before_draw","clear_after","tile_promise","tile_width","tile_index","tile_promises","tiles","draw_helper","tile","_add_yaxis_label","on_change","pref_name","get_mode","update_auto_mode","display_mode","_get_drawables","show_tile","get_tile_data","data_mode","tile_data","tile_drawn","tracks_data","drawing_modes","drawing_heights","get_canvas_height","tile_low","tile_high","globalAlpha","globalCompositeOperation","draw_tile","canvas_width","_draw_line_track_tile","LinePainter","ref_seq","tile_element","track_height","extra_info","tickDistance","new_div","screenPosition","display_modes","build_config_params","show_group","visible_height","init_deferreds","update_all_min_max","max_height","new_visible","cur_visible","subset","textAlign","str_len","fillText","BBIDataManager","DiagonalHeatmapTrack","DiagonalHeatmapPainter","summary_draw_height","start_end_dct","set_painter_from_config","painter","ArcLinkedFeaturePainter","LinkedFeaturePainter","all_incomplete_features","inc_features","tile_incomplete_features","new_canvas_ctx","new_tile","update_ui_elt","example_feature","applies_to","show_more_rows_icon","incremental_slots","slotter","FeatureSlotter","slot_features","rows_required","dummy_painter","get_required_height","cur_tile","slots","hide_feature","flen","update_attrs","filter_alpha_scaler","alpha_filter","filter_height_scaler","height_filter","draw_results","translation","VariantPainter","deferreds","line_track_tiles","sample_names","font_size","font-size","samples_div_html","line-height","ReadPainter","addable_objects","VcfTrack","drawable_type","update_name","render_action_icons","icon_dict","add_action_icon","set_display_modes","new_modes","init_mode","mode_mapping","SlottedInfo","slot","include_label","_get_draw_coords","draw_start","draw_end","f_name","text_len","_find_slot","draw_coords","slot_num","has_overlap","k_len","s_e","feature_uid","undone","highest_slot","slotted_info","old_draw_coords","new_draw_coords","slotted_coords","dc","first_region","second_region","is_overlap","overlap","dashedLine","dashLen","dX","dY","dashes","sqrt","dashX","dashY","drawDownwardEquilateralTriangle","down_vertex_x","down_vertex_y","side_len","DrawResults","Painter","view_start","view_end","default_prefs","get_start_draw_pos","_chrom_pos_to_draw_pos","get_end_draw_pos","get_draw_pos","overflow_color","in_path","vertical_range","height_px","y_zero","x_scaled","delta_x_pxs","delta_x_px","painter_color","block_color","pref_color","pref_r","pref_g","pref_b","top_overflow","bot_overflow","saturation","new_r","new_g","new_b","overflow_x","FeaturePositionMapper","slot_height","feature_positions","y_translation","map_feature_data","x_start","x_end","get_feature_data","feature_dict","FeaturePainter","alpha_scaler","height_scaler","max_label_length","connector_color","required_height","get_row_height","y_scale","get_top_padding","x_draw_coords","feature_start","feature_end","draw_element","draw_background_connector","draw_individual_connectors","y_start","feature_name","feature_strand","f_start","f_end","thick_start","thick_end","reverse_strand_color","label_color","feature_ts","feature_te","feature_blocks","full_height","thin_height","thick_height","cur_y_start","cur_height","SQUISH_FEATURE_HEIGHT","last_block_start","last_block_end","block","block_start","block_end","block_thick_start","block_thick_end","draw_connector","hscale_factor","ws_height","base_color_fn","show_insertions","_parse_cigar","cigar_str","cigar_ops","blocks","cur_block","base_pos","parsed_cigar","op_len","op_char","cigar","draw_read","strand","read_seq","get_draw_coord","sequence_coord","s_start","s_end","base_offset","seq_offset","gap","detail_block_color","pack_mode","draw_height","rect_y","paint_utils","ReadPainterUtils","drawing_blocks","draw_last","cig_id","cig","cig_op","cig_len","cur_seq","start_pos","show_differences","c_start","draw_deletion","insert_x_coord","seq","x_center","connector","b1_end","b2_start","line_height","longest_feature_length","calculate_longest_feature_length","view_range","block1_start","block1_end","block2_start","block2_end","Color","alpha","toCSS","toHSL","toARGB","mix","weight","w1","w2","LinearRamp","start_color","end_color","start_value","end_value","value_range","map_value","SplitRamp","middle_color","positive_ramp","negative_ramp","pos_color","neg_color","s1","e1","s2","e2","invsqrt2","ramp","rotate","row_height","px_per_base","draw_details","delete_details_thickness","thickness","divider_height","summary_height","show_sample_data","locus_data","ref","alt","sample_gts","allele_counts","variant","draw_x_start","draw_y_start","genotype","get_indel_info","ref_len","alt_len","base_px","feature_height","draw_summary","alt_info","indel_info","allele_frac","snp","Filter","tool_exp_name","create_action_icon","slider_label","filter_label","values_span","values_span_container","slider_div","control_element","get_slider_step","slide","multi_value","slider_row","slider_min","slider_max","invalid","a_val","display_controls_div","transparency_icon","height_icon","_keep_val","to_filter","returnVal","alpha_filter_name","height_filter_name","filters_dict","run_buttons_row","filter_manager","filter_dicts","tool_filter_conditions","get_or_create_dict_item","new_item","active_filters","active_filters_list","run_filter","input_dataset_id","filter_tuple","tool_filters","tool_filter_str","cond","run_tool_url","_formRepeat","_formRepeat2","_formInput","_formInput2","_formParameters","_formParameters2","parameters","_addConditional","_addRepeat","_addSection","_addRow","case_def","section_row","nonhidden","sub_section","_append","sub_section_id","block_index","repeat","ondel","onnew","n_cache","hideOptions","hide_label","text_value","collapsible_preview","fixed","button_new","$list","button_delete","app_options","text_enable","text_disable","cls_enable","cls_disable","$field","$preview","$collapsible","$collapsible_text","$collapsible_icon","$error_text","$error","help_argument","collapsible_state","_uiSelectContent","_uiSelectContent2","_uiSelectLibrary","_uiSelectLibrary2","_uiSelectFtp","_uiSelectFtp2","_uiSelectGenomespace","_uiSelectGenomespace2","_uiColorPicker","_uiColorPicker2","data_column","genomebuild","data_collection","boolean","drill_down","hidden_data","baseurl","library_data","ftpfile","genomespacefile","fieldClass","_fieldSelect","_fieldText","_fieldData","extensions","flavor","is_workflow","SelectClass","_fieldDrilldown","str_value","_fieldSlider","_fieldHidden","_fieldBoolean","_fieldColor","_fieldLibrary","_fieldFtp","_fieldGenomeSpace","_fieldUpload","Batch","DISABLED","ENABLED","LINKED","Configurations","data_multiple","workflow_data","workflow_data_multiple","workflow_data_collection","module_data","module_data_collection","src_labels","hda","hdca","pagelimit","statustimer","button_product","$batch_div","$batch","linked","lastenter","_handleDrop","_changeCurrent","_changeType","id_list","_batch","$batchfield","batchmode","button_type","config_id","button_data","button_width","select_options","drop_data","getData","new_src","history_content_type","current_value","_handleDropStatus","map_over_type","_uiTable","_uiList","_uiList2","Libraries","LibraryDatasets","library_id","libraries","datasets","library_select","ftpfile_list","_toolGenomespace","_toolGenomespace2","browse_button","browseGenomeSpace","filename_textbox","token_textbox","openFileBrowser","successCallback","destination","GS_UI_URL","genomespace_ui_url","GS_UPLOAD_URL","newWin","successCalBack","setCallbackOnGSUploadError","standard","theme","$view","$value","_build","$boxes","_templateCheck","hex","_content","line_def","_templateContent","$line","$box","_templateBox","BibtexParser","arg0","tempStorage","parser","getErrors","STATES_","ENTRY_OR_JUNK","OBJECT_TYPE","ENTRY_KEY","KV_KEY","EQUALS","KV_VALUE","DATA_","CALLBACK_","CHAR_","LINE_","CHAR_IN_LINE_","SKIPWS_","SKIPCOMMENT_","PARSETMP_","SKIPTILLEOL_","VALBRACES_","BRACETYPE_","BRACECOUNT_","STATE_","ERRORS_","inproceedings","proceedings","article","techreport","misc","mastersthesis","book","phdthesis","incollection","unpublished","inbook","manual","periodical","booklet","masterthesis","conference","MACROS_","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","processCharacter_","error_","processEntry_","CHARCONV_","rep","processed","skip","ObjectType","AnotherIteration","ot","Key","EntryKey","Value","{","delim","doneParsingValue","macro","CitationView","formattedReference","authorsAndYear","_asSentence","author","year","pages","volume","journal","booktitle","howpublished","institution","_formatBookInfo","doiUrl","doi","chapter","publisher","series","issn","renderCitation","click .citations-to-bibtex","click .citations-to-formatted","citation","citationView","rawTextarea","citationsElement","showFormatted","showBibtex","partialWarningElement","_bigwig","makeBwg","bb","readWigData","MIN_VALUE","score","spans","jszlib","DASFeature","DASGroup","readInt","ba","xhrObj","bwg_readOffset","M1","M2","M3","M4","BigWig","BigWigView","bwg","cirTreeOffset","cirTreeLength","isSummary","Uint8Array","sa","Int16Array","la","Int32Array","magic","BIG_WIG_MAGIC","BIG_BED_MAGIC","BIG_WIG_MAGIC_BE","BIG_BED_MAGIC_BE","numZoomLevels","chromTreeOffset","unzoomedDataOffset","unzoomedIndexOffset","fieldCount","definedFieldCount","asOffset","totalSummaryOffset","uncompressBufSize","extHeaderOffset","zoomLevels","zl","zlReduction","zlData","zlIndex","reduction","dataOffset","indexOffset","readChromTree","getAutoSQL","as","schema","BBIExtraIndex","bbi","Range","jszlib_inflate_buffer","inflateBuffer","arrayCopy","BED_COLOR_REGEXP","thisB","chromsToIDs","idsToChroms","maxID","udo","bpt","keySize","bptReadNode","cnt","childOffset","ki","chromId","chrName","chr","readWigDataById","cirHeader","cirBlockSize","blocksToFetch","outstanding","fmin","fmax","toks","cirFobRecur","instrument","cachedCirRoot","cirFobRecur2","fetchFeatures","maxCirBlockSpan","blockSpan","fetchRanges","ranges","fr","cirFobStartFetch","attempts","resultBuffer","cirBlockData","isLeaf","startChrom","startBase","endChrom","endBase","blockOffset","blockSize","recurOffsets","b0","createFeature","_chromId","segment","tramp","parseFeatures","fetchStart","fetchSize","bi","fa","Float32Array","itemCount","byteLength","validCnt","maxVal","sumData","summaryOpts","maxScore","blockStart","itemStep","itemSpan","blockType","dfc","ch","bedColumns","featureOpts","itemRgb","thickStart","thickEnd","blockCount","blockSizes","blockStarts","exonFrames","grp","notes","geneId","geneName","geneName2","gg","spanList","bmin","bmax","tsList","ts","codingRegion","tlList","readingFrame","tlOffset","readframe","brf","readframeExplicit","getFirstAdjacent","getFirstAdjacentById","blockToFetch","bestBlockChr","bestBlockOffset","chrx","bestFeature","bestChr","bestPos","fi","bestRecur","getUnzoomedView","getZoomedView","unzoomedView","cirLen","z","zh","_tsFetch","topLevelReductionCache","feats","thresholdSearch","referencePoint","fbThresholdSearchRecur","candidates","chrOrd","candidate","rp","fromRef","initialChr","chrId","header_re","field_re","headerMatch","declType","comment","getExtraIndices","extraIndexCount","extraIndexListOffset","eil","indices","ii","eiType","eiFieldCount","eiOffset","eiField","nodeOffset","valSize","Uint16Array","Uint32Array","lastChildOffset","localeCompare","_min","_max","_Compound","sorted","_rangeOrder","_ranges","s0","insertRange","r0","l0","l1","i0","i1","lapMin","lapMax","coverage","tot","rl","ri","rangeOrder","isContiguous","_pushRanges","lower_bound","lb","ub","rangeOver","ZStream","Inflate","was","InfBlocks","checkfn","hufts","MANY","IB_TYPE","table","blens","codes","InfCodes","bitk","bitb","inftree","InfTree","inflate_trees_fixed","bl","bd","fixed_bl","fixed_bd","fixed_tl","fixed_td","Z_OK","srcOffset","destOffset","arrayCopy_fast","hasSubarray","subarray","BYTES_PER_ELEMENT","byteOffset","arrayCopy_slow","afterUncOffset","inflateInit","DEF_WBITS","next_in","next_in_index","avail_in","oBlockList","totalSize","obuf","next_out","next_out_index","avail_out","inflate","Z_NO_FLUSH","Z_STREAM_END","Z_BUF_ERROR","newob","out","cursor","inflate_mask","cplens","cplext","cpdist","cpdext","istate","inflateEnd","inflateSync","inflateSetDictionary","dictionary","dictLength","inflateReset","total_in","total_out","free","wbits","marker","need","adler","proc","_adler","adler32","set_dictionary","mark","inflateSyncPoint","sync_point","INFBLOCKS_BORDER","inflate_flush","inflate_trees_bits","inflate_trees_dynamic","tl_index","td_index","lbits","dbits","ltree","ltree_index","dtree","dtree_index","tree","tindex","inflate_fast","tree_index","lit","dist","tp","tp_index","ml","md","tp_index_t_3","huft_build","bindex","hp","hn","xp","initWorkArea","nl","nd","vsize","BMAX","testArray","native","xhrId","xhrCallbacks","getNative","warnAtPercent","errorAtPercent","isOverQuota","_render_quota","modelJson","$meter","_templateQuotaMeter","$bar","_render_usage","usage","_templateUsage","meterHtml"],"mappings":"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AAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAA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/9B,QAAA+xD,EAAAz2D,EAAA+kK,kBAAA,EAIA,QAAAC,KACA,GAAAxgJ,GAAAie,EAAA/jC,MAAA4M,MACA25J,EAAA,EAAAC,GAAA,CAGA,IAAAL,EAAArgJ,GAQAygJ,EAAA,MALA,QAAA9qK,GAAAgrK,EAAArqK,OAAA,EAA2CX,GAAA,EAAQA,IACnD8qK,GAAAL,EAAApgJ,EAAA2gJ,EAAAhrK,GAQA8qK,GAAAj6J,KAAAwrD,IAAAxrD,KAAAs6B,IAAA2/H,EAAAzgJ,EAAA1pB,UAAA,EAAAkF,EAAAolK,qBAEAF,EAAAD,EAAAI,GAAA7gJ,EAAA1pB,QAAAkF,EAAAslK,aAGAL,IAAAM,EAAA,IACAN,IAAA,QAAAA,EAEA59J,EAAAhN,KAAAqE,KAAAwmK,EAAAD,GArKA,GAAAI,GAAA,GACAE,EAAA,IACAJ,IAGA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,UAGA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cAGAp5H,GACAu5H,aAAA,EACAF,oBAAA,EACAL,gBAAAxqK,OAAAirK,uBACAV,QAAA,SAkEA,OA/DAriI,GAAArjC,WAAAY,KAAAqH,IACAA,EAAArH,EACAA,MAGAA,EAAAyiC,EAAA57B,OAAAklC,EAAA/rC,GAoDAtB,KAAAuB,KAAA,WACAwiC,EAAA/jC,MAAA4M,OACA05J,EAAAv/J,MAAA/G,QAIAA,KAAAuB,KAAA,WACAwiC,EAAA/jC,MAAAujC,KAAA,2CAAA+iI,SAMClmK,K1Dy+qC4BzE,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,EAASH,I2D5qrCjC,SAAA2iF,EAAA39E,IAoBA,SAAA2jC,GAAe,YAKf,SAAAgjI,KACA,GAAAn7I,GAAA/tB,SAAAE,cAAA,aAEAipK,GACAC,iBAAA,sBACAC,cAAA,gBACAC,YAAA,gCACAC,WAAA,gBAGA,QAAAxoK,KAAAooK,GACA,OAAA1pK,KAAAsuB,EAAAhoB,MAAAhF,GACA,OAAgBkF,IAAAkjK,EAAApoK,IAMhBmlC,EAAAr9B,GAAA2gK,qBAAA,SAAAv2J,GACA,GAAAw2J,IAAA,EAAA3vH,EAAA33C,IACA+jC,GAAA/jC,MAAA2G,IAAAo9B,EAAA56B,QAAAi+J,WAAAtjK,IAAA,WAAuDwjK,GAAA,GACvD,IAAA3+J,GAAA,WAAgC2+J,GAAAvjI,EAAA4T,GAAAznB,QAAA6T,EAAA56B,QAAAi+J,WAAAtjK,KAEhC,OADAvF,YAAAoK,EAAAmI,GACA9Q,MAGA+jC,EAAA,WACAA,EAAA56B,QAAAi+J,WAAAL,OAGChpF,GAqBD,SAAAh6C,GAAe,YAKf,IAAAwjI,GAAA,SAAAzvH,GACA93C,KAAA83C,QAAA/T,EAAA+T,GAGAyvH,GAAA/qK,UAAA6Q,KAAA,WACA,GAAAgzH,GAAArgI,KAAA83C,QACA2wG,EAAApoB,EAAA54G,QAAA,0BACAhhB,EAAA45H,EAAAz9G,KAAA,cAOA,IALAnc,IACAA,EAAA45H,EAAAz9G,KAAA,QACAnc,OAAApE,QAAA,uBAGAg+H,EAAAn/G,OAAA,MAAAwY,SAAA,WAEA,GAAAmS,GAAA48G,EAAAxqI,KAAA,qBACAphB,EAAAknC,EAAAhU,MAAA,eACAkB,cAAA4a,GAKA,IAFAw0F,EAAAnwG,QAAArzB,IAEAA,EAAA0zB,qBAAA,CAEA,GAAAi3I,GAAAzjI,EAAAt9B,EAEAzG,MAAA4zD,SAAAysE,EAAAn/G,OAAA,MAAAunI,GACAzoJ,KAAA4zD,SAAA4zG,IAAAtmJ,SAAA,WACAm/G,EAAAnwG,SACAlyB,KAAA,eACAizB,cAAA4a,SAKA07H,EAAA/qK,UAAAo3D,SAAA,SAAA9b,EAAAjlB,EAAAlqB,GAMA,QAAA4e,KACAkgJ,EACAnuI,YAAA,UACArb,KAAA,8BACAqb,YAAA,UAEAwe,EAAA7e,SAAA,UAEAmuI,GACAtvH,EAAA,GAAA9qC,YACA8qC,EAAA7e,SAAA,OAEA6e,EAAAxe,YAAA,QAGAwe,EAAA52B,OAAA,mBACA42B,EAAArwB,QAAA,eAAAwR,SAAA,UAGAtwB,OAxBA,GAAA8+J,GAAA50I,EAAA5U,KAAA,aACAmpJ,EAAAz+J,GACAo7B,EAAA56B,QAAAi+J,YACAK,EAAA/tI,SAAA,OAwBA0tI,GACAK,EACA9gK,IAAAo9B,EAAA56B,QAAAi+J,WAAAtjK,IAAAyjB,GACA8/I,qBAAA,KACA9/I,IAEAkgJ,EAAAnuI,YAAA,MAOA,IAAA5G,GAAAqR,EAAAr9B,GAAAghK,GAEA3jI,GAAAr9B,GAAAghK,IAAA,SAAA77I,GACA,MAAA7rB,MAAAuB,KAAA,WACA,GAAA8+H,GAAAt8F,EAAA/jC,MACAoC,EAAAi+H,EAAAj+H,KAAA,SAEAA,IAAAi+H,EAAAj+H,KAAA,SAAAA,EAAA,GAAAmlK,GAAAvnK,OACA,gBAAA6rB,IAAAzpB,EAAAypB,QAIAkY,EAAAr9B,GAAAghK,IAAAC,YAAAJ,EAMAxjI,EAAAr9B,GAAAghK,IAAA1jI,WAAA,WAEA,MADAD,GAAAr9B,GAAAghK,IAAAh1I,EACA1yB,MAOA+jC,EAAAlmC,UAAA0I,GAAA,6EAAA1J,GACAA,EAAA4xB,iBACAsV,EAAA/jC,MAAA0nK,IAAA,WAGC3pF,GAsBD,SAAAh6C,GAAe,YAKf,IAAAmnH,GAAA,SAAApzG,EAAAx2C,GACAtB,KAAAhC,KACAgC,KAAAsB,QACAtB,KAAAklB,QACAllB,KAAA7C,QACA6C,KAAA4nK,WACA5nK,KAAA+6H,SAAA,KAEA/6H,KAAA2N,KAAA,UAAAmqC,EAAAx2C,GAGA4pJ,GAAA2c,UACAv5J,WAAA,EACAyiE,UAAA,MACAtqE,UAAA,EACA4pC,SAAA,gGACAngB,QAAA,cACA6rB,MAAA,GACAnkB,MAAA,EACAnuB,MAAA,EACAopB,UAAA,QAGAq4H,EAAA1uJ,UAAAmR,KAAA,SAAA3P,EAAA85C,EAAAx2C,GACAtB,KAAAklB,SAAA,EACAllB,KAAAhC,OACAgC,KAAA+6H,SAAAh3F,EAAA+T,GACA93C,KAAAsB,QAAAtB,KAAAkhI,WAAA5/H,EAIA,QAFAwmK,GAAA9nK,KAAAsB,QAAA4uB,QAAA1b,MAAA,KAEA/Y,EAAAqsK,EAAA1rK,OAAiCX,KAAK,CACtC,GAAAy0B,GAAA43I,EAAArsK,EAEA,aAAAy0B,EACAlwB,KAAA+6H,SAAAx0H,GAAA,SAAAvG,KAAAhC,KAAAgC,KAAAsB,QAAAmF,SAAAs9B,EAAAryB,MAAA1R,KAAA4O,OAAA5O,WACO,cAAAkwB,EAAA,CACP,GAAA63I,GAAA,SAAA73I,EAAA,qBACA83I,EAAA,SAAA93I,EAAA,mBAEAlwB,MAAA+6H,SAAAx0H,GAAAwhK,EAAA,IAAA/nK,KAAAhC,KAAAgC,KAAAsB,QAAAmF,SAAAs9B,EAAAryB,MAAA1R,KAAAioK,MAAAjoK,OACAA,KAAA+6H,SAAAx0H,GAAAyhK,EAAA,IAAAhoK,KAAAhC,KAAAgC,KAAAsB,QAAAmF,SAAAs9B,EAAAryB,MAAA1R,KAAAkoK,MAAAloK,QAIAA,KAAAsB,QAAAmF,SACAzG,KAAAm5H,SAAAp1F,EAAA57B,UAAkCnI,KAAAsB,SAAiB4uB,QAAA,SAAAzpB,SAAA,KACnDzG,KAAAmoK,YAGAjd,EAAA1uJ,UAAAslI,YAAA,WACA,MAAAopB,GAAA2c,UAGA3c,EAAA1uJ,UAAA0kI,WAAA,SAAA5/H,GAUA,MATAA,GAAAyiC,EAAA57B,UAAyBnI,KAAA8hI,cAAA9hI,KAAA+6H,SAAA34H,OAAAd,GAEzBA,EAAAs2B,OAAA,gBAAAt2B,GAAAs2B,QACAt2B,EAAAs2B,OACAvqB,KAAA/L,EAAAs2B,MACA9nB,KAAAxO,EAAAs2B,QAIAt2B,GAGA4pJ,EAAA1uJ,UAAA4rK,mBAAA,WACA,GAAA9mK,MACA+rC,EAAArtC,KAAA8hI,aAMA,OAJA9hI,MAAAm5H,UAAAp1F,EAAAxiC,KAAAvB,KAAAm5H,SAAA,SAAAh3H,EAAA+G,GACAmkC,EAAAlrC,IAAA+G,IAAA5H,EAAAa,GAAA+G,KAGA5H,GAGA4pJ,EAAA1uJ,UAAAyrK,MAAA,SAAA9nK,GACA,GAAAoJ,GAAApJ,YAAAH,MAAA6V,YACA1V,EAAA4jC,EAAA5jC,EAAAmuB,eAAAtuB,KAAAhC,MAAAgC,KAAAooK,sBAAAhmK,KAAA,MAAApC,KAAAhC,KAMA,IAJAd,aAAAqM,EAAApM,SAEAoM,EAAAq+J,WAAA,MAEAr+J,EAAAjI,QAAAs2B,QAAAruB,EAAAjI,QAAAs2B,MAAAvqB,KAAA,MAAA9D,GAAA8D,MAEA9D,GAAApM,QAAAoB,WAAA,WACA,MAAAgL,EAAAq+J,YAAAr+J,EAAA8D,QACK9D,EAAAjI,QAAAs2B,MAAAvqB,OAGL69I,EAAA1uJ,UAAA0rK,MAAA,SAAA/nK,GACA,GAAAoJ,GAAApJ,YAAAH,MAAA6V,YACA1V,EAAA4jC,EAAA5jC,EAAAmuB,eAAAtuB,KAAAhC,MAAAgC,KAAAooK,sBAAAhmK,KAAA,MAAApC,KAAAhC,KAMA,IAJAd,aAAAqM,EAAApM,SAEAoM,EAAAq+J,WAAA,OAEAr+J,EAAAjI,QAAAs2B,QAAAruB,EAAAjI,QAAAs2B,MAAA9nB,KAAA,MAAAvG,GAAAuG,MAEAvG,GAAApM,QAAAoB,WAAA,WACA,OAAAgL,EAAAq+J,YAAAr+J,EAAAuG,QACKvG,EAAAjI,QAAAs2B,MAAA9nB,OAGLo7I,EAAA1uJ,UAAA6Q,KAAA,WACA,GAAAxQ,GAAAknC,EAAAhU,MAAA,WAAA/vB,KAAAhC,KAEA,IAAAgC,KAAA6+B,cAAA7+B,KAAAklB,QAAA,CAGA,GAFAllB,KAAA+6H,SAAA7qG,QAAArzB,GAEAA,EAAA0zB,qBAAA,MAEA,IAAA6uG,GAAAp/H,KAAAotE,KAEAptE,MAAA8mI,aAEA9mI,KAAAsB,QAAAgN,WAAA8wH,EAAAnmG,SAAA,OAEA,IAAA83C,GAAA,kBAAA/wE,MAAAsB,QAAAyvE,UACA/wE,KAAAsB,QAAAyvE,UAAAp1E,KAAAqE,KAAAo/H,EAAA,GAAAp/H,KAAA+6H,SAAA,IACA/6H,KAAAsB,QAAAyvE,UAEAs3F,EAAA,eACAC,EAAAD,EAAAtnK,KAAAgwE,EACAu3F,KAAAv3F,IAAA1uE,QAAAgmK,EAAA,YAEAjpC,EACA50H,SACAnH,KAAc8d,IAAA,EAAA+T,KAAA,EAAA3qB,QAAA,UACd0uB,SAAA83C,GAEA/wE,KAAAsB,QAAAuxB,UAAAusG,EAAA/0H,SAAArK,KAAAsB,QAAAuxB,WAAAusG,EAAAntG,YAAAjyB,KAAA+6H,SAEA,IAAArzG,GAAA1nB,KAAAuoK,cACAC,EAAAppC,EAAA,GAAApyH,YACAy7J,EAAArpC,EAAA,GAAAnyH,YAEA,IAAAq7J,EAAA,CACA,GAAA/4F,GAAAvvE,KAAA+6H,SAAA75G,SAEAwnJ,EAAA33F,EACA43F,EAAA9qK,SAAA+M,gBAAA+kB,WAAA9xB,SAAAyM,KAAAqlB,UACAi5I,EAAA,QAAA5oK,KAAAsB,QAAAuxB,UAAAh3B,OAAAgsH,WAAAt4C,EAAAgR,aACAsoF,EAAA,QAAA7oK,KAAAsB,QAAAuxB,UAAAh3B,OAAAy7D,YAAAiY,EAAA6vC,cACA0pD,EAAA,QAAA9oK,KAAAsB,QAAAuxB,UAAA,EAAA08C,EAAAvtC,SAAA9M,IAEA67C,GAAA,UAAAA,GAAArpD,EAAAvG,IAAAuG,EAAAvZ,OAAAs6J,EAAAE,EAAAE,EAAA,MACA,OAAA93F,GAAArpD,EAAAvG,IAAAwnJ,EAAAF,EAAA,WACA,SAAA13F,GAAArpD,EAAAihB,MAAA6/H,EAAAI,EAAA,OACA,QAAA73F,GAAArpD,EAAAwN,KAAAszI,EAAAM,EAAA,QACA/3F,EAEAquD,EACA9lG,YAAAovI,GACAzvI,SAAA83C,GAGA,GAAAg4F,GAAA/oK,KAAAgpK,oBAAAj4F,EAAArpD,EAAA8gJ,EAAAC,EAEAzoK,MAAAipK,eAAAF,EAAAh4F,GACA/wE,KAAA+6H,SAAA7qG,QAAA,YAAAlwB,KAAAhC,QAIAktJ,EAAA1uJ,UAAAysK,eAAA,SAAAjnI,EAAA+uC,GACA,GAAA1uE,GACA+8H,EAAAp/H,KAAAotE,MACAliE,EAAAk0H,EAAA,GAAApyH,YACAmB,EAAAixH,EAAA,GAAAnyH,aAGA4/G,EAAAh0F,SAAAumG,EAAA/7H,IAAA,kBACA4vB,EAAA4F,SAAAumG,EAAA/7H,IAAA,kBAGAwrB,OAAAg+F,OAAA,GACAh+F,MAAAoE,OAAA,GAEA+O,EAAA7gB,IAAA6gB,EAAA7gB,IAAA0rG,EACA7qF,EAAA9M,KAAA8M,EAAA9M,KAAAjC,EAEAmsG,EACAp9F,UACA/I,SAAA,KAGA,IAAAuvI,GAAAppC,EAAA,GAAApyH,YACAy7J,EAAArpC,EAAA,GAAAnyH,YAOA,IALA,OAAA8jE,GAAA03F,GAAAt6J,IACA9L,GAAA,EACA2/B,EAAA7gB,IAAA6gB,EAAA7gB,IAAAhT,EAAAs6J,GAGA,aAAA1nK,KAAAgwE,GAAA,CACA,GAAA9J,GAAA,CAEAjlC,GAAA9M,KAAA,IACA+xC,GAAA,EAAAjlC,EAAA9M,KACA8M,EAAA9M,KAAA,EAEAkqG,EAAAp9F,UAEAwmI,EAAAppC,EAAA,GAAApyH,YACAy7J,EAAArpC,EAAA,GAAAnyH,cAGAjN,KAAAkpK,aAAAjiG,EAAA/7D,EAAAs9J,IAAA,YAEAxoK,MAAAkpK,aAAAT,EAAAt6J,EAAAs6J,EAAA,MAGApmK,IAAA+8H,EAAAp9F,WAGAkpH,EAAA1uJ,UAAA0sK,aAAA,SAAAjiG,EAAAm5D,EAAAvsG,GACA7zB,KAAAmpK,QAAA9lK,IAAAwwB,EAAAozC,EAAA,MAAAA,EAAAm5D,GAAA,SAGA8qB,EAAA1uJ,UAAAsqI,WAAA,WACA,GAAA1H,GAAAp/H,KAAAotE,MACArxB,EAAA/7C,KAAAopK,UAEAhqC,GAAAnhH,KAAA,kBAAAje,KAAAsB,QAAAmI,KAAA,eAAAsyC,GACAqjF,EAAA9lG,YAAA,kCAGA4xH,EAAA1uJ,UAAAsT,KAAA,WAKA,QAAAgC,KACA,MAAA+uG,EAAA+mD,YAAAxoC,EAAA50H,SALA,GAAAq2G,GAAA7gH,KACAo/H,EAAAp/H,KAAAotE,MACAvwE,EAAAknC,EAAAhU,MAAA,WAAA/vB,KAAAhC,KAQA,IAFAgC,KAAA+6H,SAAA7qG,QAAArzB,IAEAA,EAAA0zB,qBAYA,MAVA6uG,GAAA9lG,YAAA,MAEAyK,EAAA56B,QAAAi+J,YAAApnK,KAAAo/H,KAAA1lG,SAAA,QACA0lG,EACAz4H,IAAAo9B,EAAA56B,QAAAi+J,WAAAtjK,IAAAgO,GACAu1J,qBAAA,KACAv1J,IAEA9R,KAAA+6H,SAAA7qG,QAAA,aAAAlwB,KAAAhC,MAEAgC,MAGAkrJ,EAAA1uJ,UAAA2rK,SAAA,WACA,GAAAkB,GAAArpK,KAAA+6H,UACAsuC,EAAAzmJ,KAAA,0BAAAymJ,GAAAzmJ,KAAA,yBACAymJ,EAAAzmJ,KAAA,sBAAAymJ,EAAAzmJ,KAAA,cAAAA,KAAA,aAIAsoI,EAAA1uJ,UAAAqiC,WAAA,WACA,MAAA7+B,MAAAopK,YAGAle,EAAA1uJ,UAAA+rK,YAAA,WACA,GAAA38I,GAAA5rB,KAAA+6H,SAAA,EACA,OAAAh3F,GAAA57B,UAAsB,kBAAAyjB,GAAAqJ,sBAAArJ,EAAAqJ,yBACtB/pB,MAAA0gB,EAAA5e,YACAmB,OAAAyd,EAAA3e,cACKjN,KAAA+6H,SAAA/4F,WAGLkpH,EAAA1uJ,UAAAwsK,oBAAA,SAAAj4F,EAAArpD,EAAA8gJ,EAAAC,GACA,gBAAA13F,GAAoC5vD,IAAAuG,EAAAvG,IAAAuG,EAAAvZ,OAAA+mB,KAAAxN,EAAAwN,KAAAxN,EAAAxc,MAAA,EAAAs9J,EAAA,GACpC,OAAAz3F,GAAoC5vD,IAAAuG,EAAAvG,IAAAsnJ,EAAAvzI,KAAAxN,EAAAwN,KAAAxN,EAAAxc,MAAA,EAAAs9J,EAAA,GACpC,QAAAz3F,GAAoC5vD,IAAAuG,EAAAvG,IAAAuG,EAAAvZ,OAAA,EAAAs6J,EAAA,EAAAvzI,KAAAxN,EAAAwN,KAAAszI,IACArnJ,IAAAuG,EAAAvG,IAAAuG,EAAAvZ,OAAA,EAAAs6J,EAAA,EAAAvzI,KAAAxN,EAAAwN,KAAAxN,EAAAxc,QAGpCggJ,EAAA1uJ,UAAA4sK,SAAA,WACA,GACAC,GAAArpK,KAAA+6H,SACAj8H,EAAAkB,KAAAsB,OAKA,OAHA+nK,GAAAzmJ,KAAA,yBACA,kBAAA9jB,GAAAi9C,MAAAj9C,EAAAi9C,MAAApgD,KAAA0tK,EAAA,IAAAvqK,EAAAi9C,QAKAmvG,EAAA1uJ,UAAA4wE,IAAA,WACA,MAAAptE,MAAAo/H,KAAAp/H,KAAAo/H,MAAAr7F,EAAA/jC,KAAAsB,QAAA+uC,WAGA66G,EAAA1uJ,UAAA2sK,MAAA,WACA,MAAAnpK,MAAAspK,OAAAtpK,KAAAspK,QAAAtpK,KAAAotE,MAAAnvD,KAAA,mBAGAitI,EAAA1uJ,UAAA24C,SAAA,WACAn1C,KAAA+6H,SAAA,GAAA7wH,aACAlK,KAAA8P,OACA9P,KAAA+6H,SAAA,KACA/6H,KAAAsB,QAAA,OAIA4pJ,EAAA1uJ,UAAAupE,OAAA,WACA/lE,KAAAklB,SAAA,GAGAgmI,EAAA1uJ,UAAAmsB,QAAA,WACA3oB,KAAAklB,SAAA,GAGAgmI,EAAA1uJ,UAAA+sK,cAAA,WACAvpK,KAAAklB,SAAAllB,KAAAklB,SAGAgmI,EAAA1uJ,UAAAoS,OAAA,SAAA/R,GACA,GAAA0M,GAAA1M,EAAAknC,EAAAlnC,EAAAyxB,eAAAtuB,KAAAhC,MAAAgC,KAAAooK,sBAAAhmK,KAAA,MAAApC,KAAAhC,MAAAgC,IACAuJ,GAAA6jE,MAAA1zC,SAAA,MAAAnwB,EAAA2+J,MAAA3+J,KAAA0+J,MAAA1+J,IAGA2hJ,EAAA1uJ,UAAA84C,QAAA,WACAt1C,KAAA8P,OAAAirH,SAAAj0H,IAAA,IAAA9G,KAAAhC,MAAAgtB,WAAA,MAAAhrB,KAAAhC,MAOA,IAAA00B,GAAAqR,EAAAr9B,GAAAgtD,OAEA3vB,GAAAr9B,GAAAgtD,QAAA,SAAA7nC,GACA,MAAA7rB,MAAAuB,KAAA,WACA,GAAA8+H,GAAAt8F,EAAA/jC,MACAoC,EAAAi+H,EAAAj+H,KAAA,cACAd,EAAA,gBAAAuqB,KAEAzpB,IAAAi+H,EAAAj+H,KAAA,aAAAA,EAAA,GAAA8oJ,GAAAlrJ,KAAAsB,IACA,gBAAAuqB,IAAAzpB,EAAAypB,QAIAkY,EAAAr9B,GAAAgtD,QAAAi0G,YAAAzc,EAMAnnH,EAAAr9B,GAAAgtD,QAAA1vB,WAAA,WAEA,MADAD,GAAAr9B,GAAAgtD,QAAAhhC,EACA1yB,OAGC+9E,GAsBD,SAAAh6C,GAAe,YAwEf,SAAAylI,KACAzlI,EAAAilB,GAAAj/C,SACAg6B,EAAAn1B,GAAArN,KAAA,SAAA1E,GACA,GAAA0yE,GAAAk6F,EAAA1lI,EAAA/jC,MACAuvE,GAAA71C,SAAA,UACA61C,EAAAr/C,QAAArzB,EAAAknC,EAAAhU,MAAA,qBACAlzB,EAAA0zB,sBACAg/C,EAAAj2C,YAAA,QAAApJ,QAAA,yBAIA,QAAAu5I,GAAAppC,GACA,GAAA55H,GAAA45H,EAAAz9G,KAAA,cAEAnc,KACAA,EAAA45H,EAAAz9G,KAAA,QACAnc,KAAA,IAAA1F,KAAA0F,MAAApE,QAAA,qBAGA,IAAAktE,GAAA9oE,GAAAs9B,EAAAt9B,EAEA,OAAA8oE,MAAAnzE,OAAAmzE,EAAA8wD,EAAAn/G,SAxFA,GAAA8nC,GAAA,qBACAp6C,EAAA,yBACA86J,EAAA,SAAA5xH,GACA/T,EAAA+T,GAAAvxC,GAAA,oBAAAvG,KAAA4O,QAGA86J,GAAAltK,UAAAoS,OAAA,SAAA/R,GACA,GAAAwjI,GAAAt8F,EAAA/jC,KAEA,KAAAqgI,EAAAv5G,GAAA,yBAEA,GAAAyoD,GAAAk6F,EAAAppC,GACAspC,EAAAp6F,EAAA71C,SAAA,OAIA,IAFA8vI,KAEAG,EAAA,CAQA,GAPA,gBAAA9rK,UAAA+M,kBAAA2kE,EAAA9nD,QAAA,eAAArrB,QAEA2nC,EAAA,oCAAA9R,YAAA8R,EAAA/jC,OAAAuG,GAAA,QAAAijK,GAGAj6F,EAAAr/C,QAAArzB,EAAAknC,EAAAhU,MAAA,qBAEAlzB,EAAA0zB,qBAAA,MAEAg/C,GACAh2C,YAAA,QACArJ,QAAA,qBAEAmwG,EAAAv7G,QAGA,WAGA4kJ,EAAAltK,UAAA4xH,QAAA,SAAAvxH,GACA,gBAAAkE,KAAAlE,EAAAqyB,SAAA,CAEA,GAAAmxG,GAAAt8F,EAAA/jC,KAKA,IAHAnD,EAAA4xB,iBACA5xB,EAAA6xB,mBAEA2xG,EAAAv5G,GAAA,yBAEA,GAAAyoD,GAAAk6F,EAAAppC,GACAspC,EAAAp6F,EAAA71C,SAAA,OAEA,KAAAiwI,MAAA,IAAA9sK,EAAAqyB,QAEA,MADA,KAAAryB,EAAAoR,OAAAshE,EAAAtxD,KAAArP,GAAAkW,QACAu7G,EAAAjwG,OAGA,IAAAo5H,GAAAzlH,EAAA,yCAAAwrC,EAEA,IAAAi6E,EAAAptJ,OAAA,CAEA,GAAAkN,GAAAkgJ,EAAAlgJ,MAAAkgJ,EAAAxoJ,OAAA,UAEA,KAAAnE,EAAAqyB,SAAA5lB,EAAA,GAAAA,IACA,IAAAzM,EAAAqyB,SAAA5lB,EAAAkgJ,EAAAptJ,OAAA,GAAAkN,KACAA,MAAA,GAEAkgJ,EAAAhgJ,GAAAF,GAAAwb,WA+BA,IAAA4N,GAAAqR,EAAAr9B,GAAA00G,QAEAr3E,GAAAr9B,GAAA00G,SAAA,SAAAvvF,GACA,MAAA7rB,MAAAuB,KAAA,WACA,GAAA8+H,GAAAt8F,EAAA/jC,MACAoC,EAAAi+H,EAAAj+H,KAAA,WAEAA,IAAAi+H,EAAAj+H,KAAA,WAAAA,EAAA,GAAAsnK,GAAA1pK,OACA,gBAAA6rB,IAAAzpB,EAAAypB,GAAAlwB,KAAA0kI,MAIAt8F,EAAAr9B,GAAA00G,SAAAusD,YAAA+B,EAMA3lI,EAAAr9B,GAAA00G,SAAAp3E,WAAA,WAEA,MADAD,GAAAr9B,GAAA00G,SAAA1oF,EACA1yB,MAOA+jC,EAAAlmC,UACA0I,GAAA,6BAAAijK,GACAjjK,GAAA,uDAAA1J,GAAsEA,EAAA6xB,oBACtEnoB,GAAA,6BAAAqI,EAAA86J,EAAAltK,UAAAoS,QACArI,GAAA,+BAAAqI,EAAA,gBAAA86J,EAAAltK,UAAA4xH,UAECrwC,GAsBD,SAAAh6C,GAAe,YAKf,IAAA6lI,GAAA,SAAA9xH,EAAAx2C,GACAtB,KAAA2N,KAAA,UAAAmqC,EAAAx2C,GAGA,KAAAyiC,EAAAr9B,GAAAgtD,QAAA,SAAAr2D,OAAA,8BAEAusK,GAAA/B,SAAA9jI,EAAA57B,UAAgC47B,EAAAr9B,GAAAgtD,QAAAi0G,YAAAE,UAChC92F,UAAA,QACA7gD,QAAA,QACA9oB,QAAA,GACAipC,SAAA,2HAOAu5H,EAAAptK,UAAAunC,EAAA57B,UAAiC47B,EAAAr9B,GAAAgtD,QAAAi0G,YAAAnrK,WAEjCotK,EAAAptK,UAAAqZ,YAAA+zJ,EAEAA,EAAAptK,UAAAslI,YAAA,WACA,MAAA8nC,GAAA/B,UAGA+B,EAAAptK,UAAAsqI,WAAA,WACA,GAAA1H,GAAAp/H,KAAAotE,MACArxB,EAAA/7C,KAAAopK,WACAhiK,EAAApH,KAAA6pK,YAEAzqC,GAAAnhH,KAAA,kBAAAje,KAAAsB,QAAAmI,KAAA,eAAAsyC,GACAqjF,EAAAnhH,KAAA,oBAAAje,KAAAsB,QAAAmI,KAAA,eAAArC,GAEAg4H,EAAA9lG,YAAA,iCAIA8lG,EAAAnhH,KAAA,kBAAAxU,QAAA21H,EAAAnhH,KAAA,kBAAAnO,QAGA85J,EAAAptK,UAAAqiC,WAAA,WACA,MAAA7+B,MAAAopK,YAAAppK,KAAA6pK,cAGAD,EAAAptK,UAAAqtK,WAAA,WACA,GAAAR,GAAArpK,KAAA+6H,SACAj8H,EAAAkB,KAAAsB,OAEA,OAAA+nK,GAAAzmJ,KAAA,kBACA,kBAAA9jB,GAAAsI,QACAtI,EAAAsI,QAAAzL,KAAA0tK,EAAA,IACAvqK,EAAAsI,UAGAwiK,EAAAptK,UAAA2sK,MAAA,WACA,MAAAnpK,MAAAspK,OAAAtpK,KAAAspK,QAAAtpK,KAAAotE,MAAAnvD,KAAA,WAGA2rJ,EAAAptK,UAAA4wE,IAAA,WAEA,MADAptE,MAAAo/H,OAAAp/H,KAAAo/H,KAAAr7F,EAAA/jC,KAAAsB,QAAA+uC,WACArwC,KAAAo/H,KAOA,IAAA1sG,GAAAqR,EAAAr9B,GAAA02H,OAEAr5F,GAAAr9B,GAAA02H,QAAA,SAAAvxG,GACA,MAAA7rB,MAAAuB,KAAA,WACA,GAAA8+H,GAAAt8F,EAAA/jC,MACAoC,EAAAi+H,EAAAj+H,KAAA,cACAd,EAAA,gBAAAuqB,KAEAzpB,IAAAi+H,EAAAj+H,KAAA,aAAAA,EAAA,GAAAwnK,GAAA5pK,KAAAsB,IACA,gBAAAuqB,IAAAzpB,EAAAypB,QAIAkY,EAAAr9B,GAAA02H,QAAAuqC,YAAAiC,EAMA7lI,EAAAr9B,GAAA02H,QAAAp5F,WAAA,WAEA,MADAD,GAAAr9B,GAAA02H,QAAA1qG,EACA1yB,OAGCI,K3DgrrC4BzE,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,G4DrgtCxB,GAAAkpE,EAGAA,GAAA,WACA,MAAAzkE,QAGA,KAEAykE,KAAAj/B,SAAA,qBAAAtuB,MAAA,QACC,MAAAra,GAED,gBAAAhB,UACA4oE,EAAA5oE,QAOAL,EAAAD,QAAAkpE,G5D4gtCM,SAAUjpE,EAAQD,G6DhitCxBC,EAAAD,QAAA,WACA,SAAA8B,OAAA,oC7DwitCM,SAAU7B,EAAQD,EAASH,GAEjC,cAC4B,SAASgF,EAAQ29E,EAAsCr8E,EAAGqvC,EAAUhN,GA8BhG,QAASsc,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,G8DxitCvF,QAAS2pK,GAA0BC,EAAYC,EAAYC,GACvD,QAASC,GAAgBpyH,GACrB,GAAIqyH,GAAapmI,EAAE+T,GACfx2C,GACAulD,YAAa,kBACbs+D,eAAgBglD,EAAWrjJ,GAAG,cAC9Bq5F,mBAAmB,EACnBjF,kBAAmB,mBAEvB,OAAOpjE,GAAQ+qC,QAAQvhF,GAItBlB,EAAOsG,GAAGm8E,cAKIvlF,KAAfysK,IACAA,EAAa,QAEEzsK,KAAf0sK,IACAA,EAAa,KAGjBC,EAAcA,GAAelmI,EAAE,UAE/BkmI,EAAY1oK,KAAK,WACb,GAAI4oK,GAAapmI,EAAE/jC,MAAMS,IAAI,cAEzB2pK,EAAcD,EAAWlsJ,KAAK,UAAU7hB,MACxCguK,GAAcL,GAAcK,EAAcJ,GAI1CG,EAAWzwI,SAAS,oBAWxBwwI,EAAgBC,MAKxB,QAASh7G,KACLprB,EAAE,oCACGj9B,IAAI,UACJsgD,OAAO,WACJ,GAAIijH,GAAetmI,EAAE/jC,MACjBsqK,EAAaD,EAAaz9J,MAG1B29J,EAAqBF,EAAaznJ,KAAK,2BAE3C,IAAI2nJ,EAAoB,CACpBA,EAAqBA,EAAmB/1J,MAAM,IAC9C,IAAIg2J,GAAsBH,EAAaznJ,KAAK,sBAC5C,KACmD,IAA/CmhB,EAAE/9B,QAAQskK,EAAYC,KACkC,IAAxDxmI,EAAE/9B,QAAQwkK,EAAqBD,GAE/B,OAGRxmI,EAAEloC,QAAQq0B,QAAQ,qBAClB6T,EAAElmC,UAAUqyB,QAAQ,qBACpBm6I,EAAanrK,IAAI,GAAGk4E,KAAKpxD,WAIjC+d,EAAE,uCACGj9B,IAAI,SACJspB,MAAM,WACH,GAAIi6I,GAAetmI,EAAE/jC,MACjBsqK,EAAaD,EAAaz9J,MAG1B29J,EAAqBF,EAAaznJ,KAAK,2BAE3C,IAAI2nJ,EAAoB,CACpBA,EAAqBA,EAAmB/1J,MAAM,IAC9C,IAAIg2J,GAAsBH,EAAaznJ,KAAK,sBAC5C,KACmD,IAA/CmhB,EAAE/9B,QAAQskK,EAAYC,KACkC,IAAxDxmI,EAAE/9B,QAAQwkK,EAAqBD,GAE/B,OAGRxmI,EAAEloC,QAAQq0B,QAAQ,qBAClBm6I,EAAanrK,IAAI,GAAGk4E,KAAKpxD,WAIjC+d,EAAE,cACGj9B,IAAI,SACJspB,MAAM,WACH,MAAOugC,SAAQ5sB,EAAE/jC,MAAM4iB,KAAK,cA7HxC,GAAAmoD,GAAA3vE,EAAA,I9DmitCI4vE,EAAU3qB,EAAuB0qB,G8D/htCrC0/F,EAAArvK,EAAA,I9DmitCIsvK,EAAUrqH,EAAuBoqH,G8DjitCrCE,EAAAvvK,EAAA,K9DqitCIwvK,EAAkBvqH,EAAuBsqH,G8DnitC7CE,EAAAzvK,EAAA,K9DuitCI0vK,EAAczqH,EAAuBwqH,G8DpitCzCE,EAAA3vK,EAAA,I9DwitCI4vK,EAAoB3qH,EAAuB0qH,G8DtitC/CE,EAAA7vK,EAAA,I9D0itCI8vK,EAAU7qH,EAAuB4qH,G8DzitCrCE,EAAA/vK,EAAA,E9D6itC2BilD,GAAuB8qH,E8DjktClDtvK,QAAOkoC,EAAI3jC,EACXvE,OAAO6F,EAAIA,EACX7F,OAAOk1C,SAAWA,EAKlBl1C,OAAO8vE,OAAPX,EAAAtrB,QAIAh+C,EAAEyG,OAAOtM,OAAT6uK,EAAAhrH,SAEA7jD,OAAOuvK,gBAAPR,EAAAlrH,QAEA7jD,OAAOkzE,eAAiB+7F,EAAAprH,QAAUqvB,eAClClzE,OAAOm0E,iBAAmB86F,EAAAprH,QAAUswB,iBAEpCn0E,OAAO2nI,wBAAPwnC,EAAAtrH,QAqHA7jD,OAAOszD,uBAAyBA,EAEhCprB,EAAElmC,UAAUiE,MAAM,WA6Dd,QAASupK,SACe/tK,KAAhBsgD,OAAO/4B,KAEPkf,EAAE/E,QAAW4e,OAAO/4B,KAApB,0BAAmD,SAAAuvC,GAC/C1yD,EAAEH,KAAK6yD,EAAU,SAAAD,GACTA,EAAQP,UAAYO,EAAQp3D,SAC5BgnC,EAAE,aAAe/lC,KAAM,oBAClBoZ,KAAK+8C,EAAQp3D,QACbsN,SAAS,QACd05B,EAAE,YAAc/lC,KAAM,aACjBoZ,KAAK+8C,EAAQxnD,QACbtC,SAAS,aAK1B9L,WAAW8sK,EAAgB,KA3EnCl8G,IAGIprB,EAAEr9B,GAAGgtD,UAEL3vB,EAAE,iCAAiC2vB,SAAUqd,UAAW,WAIxDhtC,EAAE,WAAW2vB,WAGjBsc,mBAGA85F,EAA0B,GAAI,MAI9B/lI,EAAE,KAAK3T,MAAM,WACT,GAAIk7I,GAASvnI,EAAE/jC,MACXurK,EAAqBrqJ,OAAOsqJ,QAAUtqJ,OAAOsqJ,OAAOC,WACxD,IAA6B,eAAzBH,EAAO1oJ,KAAK,YAA+B2oJ,EAAoB,CAC/D,GAAIvmJ,GAAOsmJ,EAAO1oJ,KAAK,SACG,GAAtBoC,EAAK/jB,QAAQ,KACb+jB,GAAQ,IAERA,GAAQ,IAEZA,GAAQ,kBACRsmJ,EAAO1oJ,KAAK,OAAQoC,GACpBsmJ,EAAO1oJ,KAAK,SAAU,SAE1B,MAAO0oJ,IAGX,IAAII,GAAK5wI,KAAKC,MAAM+mB,eAAeQ,QAAQ,oBAC3C,IAAIopH,IACAA,EAAKR,EAAAxrH,QAAM6nF,sBAAsBmkC,KACvBA,EAAGtyC,OACLv9H,QAAUA,OAAO0N,OAAS1N,OAAOslB,IAAK,CAKtC,GAAI64G,GAAO,GAAIhB,MACXt3H,EAAEyG,QAEMixH,MAAOsyC,EAAGtyC,OAEd8xC,EAAAxrH,QAAM4nF,WAGdtN,GAAKrsH,OACLqsH,EAAK2C,UAwBjB0uC,Q9DwjtCyB1vK,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzJ,SAAUI,EAAQD,EAASH,GAEjC,Y+DtxtCA,SAASgwK,GACLO,EACAC,EACAC,EACAC,EACAh5G,EACAE,EACAD,EACAg5G,EACA94G,OAGiB31D,KAAbw1D,IACAA,EAAW,QAEEx1D,KAAby1D,IACAA,EAAW,GAIfhvB,MAAM4nI,GAAqBv7I,MAAM,WAE7B,KAAI2T,EAAE,oBAAoB3nC,OAAS,GAAnC,CAGA,GAEI2wB,GAFAi/I,EAAWjoI,MAAM6nI,GACjBK,EAAWD,EAAS50J,MAIpB2V,GADAimC,EACIjvB,EAAE,yBACDnhB,MAAO4wC,KAAMT,EAAUU,KAAMX,IAC7B17C,KAAK2sB,EAAE5sB,KAAK80J,IAEbloI,EAAE,+BAA+BnhB,MACjC1Z,MAAO66B,EAAE5sB,KAAK80J,GACdtoI,KAAMmvB,IAGd/lC,EAAEnK,KAAK,KAAM,mBACbmK,EAAEoD,KAAK,WACH4T,EAAE/jC,MAAM+J,SACRiiK,EAAS3+J,OACL4lD,GACAA,EAAUlmC,KAGlBA,EAAEsiC,MAAM,SAASxyD,GACb,GAAkB,KAAdA,EAAEqyB,QAEF6U,EAAE/jC,MAAMkwB,QAAQ,YACb,IAAkB,KAAdrzB,EAAEqyB,QAAgB,CAEzB,GAAIg9I,KACJA,GAAUJ,GAAkB/nI,EAAE/jC,MAAM4M,MACpCm3B,EAAE/jC,MAAMkwB,QAAQ,QAChB6T,EAAElH,MACEf,IAAK+vI,EACLzpK,KAAM8pK,EACNxsK,MAAO,WACHqiD,8BAA8B6pH,EAA9B,YAGJ3uI,QAAS,SAASkvI,GAES,KAAnBA,EACAH,EAAS50J,KAAK+0J,GAEdH,EAASviK,KAAK,iBAEdwpD,GACAA,EAAUlmC,SAO1Bg/I,GACAA,EAASh/I,GAGbi/I,EAASl8J,OACTid,EAAEkF,YAAY+5I,GACdj/I,EAAEjI,QACFiI,EAAEvT,Y/DostCVjd,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G+DlytCX,IAAAwpD,GAAAt3D,EAAA,G/DuytCIu3D,EAEJ,SAAgCxyD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,IAFjDuyD,G+DpytClC3uB,W/D+3tCJxoC,GAAQmkD,Q+D9xtCO0rH,G/DkytCT,SAAU5vK,EAAQD,EAASH,GAEjC,cAC4B,SAASsG,GgE53tCrC,QAASqtE,GAAeC,EAAgBC,GAIpC,GAAIm9F,GAAsBp9F,EAAe5sE,KAAK,eAC9C4sE,GAAe5sE,KAAK,eAAgB6sE,GAGhCm9F,GAIJp9F,EAAezrC,KAAK,mBAAoB,SAAA1mC,GAgEpC,MA9DAknC,GAAE,oBAAoBh6B,SAGtBxL,WAAW,WAEP,GAAI8tK,GAAetoI,mCAAmCirC,EAAepsD,KAAK,MAAvD,gBACfthB,EAAU0tE,EAAe5sE,KAAK,eAC9BV,GAAEiiC,KAAKriC,IAAY,GACnByiC,EAAE,wBAAwB15B,SAASgiK,GAEvCtoI,EAAExiC,KAAKD,EAAS,SAACgtD,EAAGx5C,GAChB,GAAIA,EAAG,CAEH,GAAImmE,GAASnmE,EAAEmmE,QAAUnmE,CACzBu3J,GAAa56I,OACTsS,EAAE,aAAatS,OACXsS,EAAE,OACGnhB,KAAK,OAAQ9N,EAAEgnB,KACfryB,KAAK6kD,GACLl+B,MAAM6qD,SAInBoxF,GAAa56I,OACTsS,EAAE,aACG9K,SAAS,QACTxH,OAAOsS,EAAE,oBAAoBt6B,KAAK6kD,MAInD,IAAIjiB,GAAUtI,EAAE,uFACXtS,OAAO46I,GACPhiK,SAAS,QAEVukE,EAAI/xE,EAAEwyB,MAAQgd,EAAQnhC,QAAU,CACpC0jE,GAAItiE,KAAKy4B,IAAI6pC,EAAG7qC,EAAElmC,UAAU0xB,aAAewU,EAAEloC,QAAQqP,QAAU64B,EAAEsI,GAASnhC,QAAU,GACpF0jE,EAAItiE,KAAKC,IAAIqiE,EAAG7qC,EAAElmC,UAAU0xB,aAAe,GAE3C8c,EAAQhpC,KACJ8d,IAAKtkB,EAAE4yB,MACPyF,KAAM05C,KAEX,IAEHrwE,WAAW,WAGP,GAAI+tK,GAAc,SAAA1gJ,GACdmY,EAAEnY,GAAI2X,KAAK,oBAAqB,WAC5BQ,EAAE,oBAAoBh6B,SACtB6hB,EAAG4X,OAAO,uBAGlB8oI,GAAYvoI,EAAEloC,OAAOgC,WACrByuK,EAAYvoI,EAAEloC,OAAOslB,IAAItjB,UACzB,KAAK,GAAI6sI,GAAW7uI,OAAOslB,IAAIqqJ,OAAOpvK,OAAQsuI,KAAc,CAGxD4hC,EADYvoI,EAAEloC,OAAOslB,IAAIqqJ,OAAO9gC,GAAU7sI,aAG/C,KAEI,IAef,QAASmyE,GAAiB9uD,GAGtBA,EAASA,GAAUrjB,SACnBkmC,EAAE7iB,GACGjD,KAAK,kBACL1c,KAAK,WACF,GAAID,MACA6sE,EAAOpqC,EAAE/jC,KAGbmuE,GAAKlwD,KAAK,KAAK1c,KAAK,WAChB,GAAIgrK,GAAOxoI,EAAE/jC,MACTwsK,EAAWD,EAAKrtK,IAAI,GACpButK,EAAcD,EAAShqK,aAAa,WACpCwiB,EAAOwnJ,EAAShqK,aAAa,QAC7B0Q,EAASs5J,EAAShqK,aAAa,SAM/BlB,GAAQirK,EAAKn1J,QAHZ4N,GAIG8W,IAAK9W,EACLi2D,OAAQ,SAASp0E,GAEb,IAAK4lK,GAAe97G,QAAQ87G,GAAc,CAGtC,GAAIv5J,EAEA,MADArX,QAAO0kC,KAAKvb,EAAM9R,IACX,CAGPq5J,GAAKn8I,YAGTvpB,GAAM4nB,mBAjBK,MAwB/B,IAAImU,GAAMmB,EAAE7iB,GAAQjD,KAAV,IAAmBkwD,EAAKvrD,KAAK,aAIvCggB,GAAI3kB,KAAK,KAAKslB,KAAK,QAAS,SAAA1mC,GAExB,MADAA,GAAE6xB,mBACK,IAIXqgD,EAAensC,EAAKthC,GACpBshC,EAAI3J,SAAS,SACbk1C,EAAKpkE,WhE2utCjBxN,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GgE54tCX,IAAAwpD,GAAAt3D,EAAA,GhEi5tCIu3D,EAEJ,SAAgCxyD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,IAFjDuyD,GgE94tClC3uB,WhEuiuCJxoC,GAAQmkD,SgEp4tCJqvB,eAAgBA,EAChBiB,iBAAkBA,KhEu4tCOr0E,KAAKJ,EAASH,EAAoB,KAGtD,CAEH,SAAUI,EAAQD,GiEnjuCxB,GAAAmxK,IAAazsH,QAAU0sH,gBAAA,EAAAC,UAAA,EAAAC,eAAA,EAAAC,kBAAA,EAAAC,WAAA,EAAAC,WAAA,EAAAC,gBAAA,EAAAC,OAAA,EAAAxqG,eAAA,EAAAyqG,qBAAA,EAAAC,wBAAA,EAAAC,4BAAA,EAAAC,OAAA,EAAAC,MAAA,EAAAC,SAAA,EAAAC,QAAA,EAAAC,iBAAA,EAAAC,QAAA,EAAAC,MAAA,EAAAC,sBAAA,EAAAC,qBAAA,EAAAxjG,MAAA,EAAAyjG,OAAA,EAAAC,UAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,aAAA,EAAAC,iBAAA,EAAAC,QAAA,EAAAC,mBAAA,EAAAC,kBAAA,EAAAC,eAAA,EAAAC,0BAAA,EAAAC,iCAAA,EAAAC,mCAAA,EAAAC,0BAAA,EAAAC,sBAAA,EAAAC,8BAAA,EAAAC,8BAAA,EAAAC,sBAAA,EAAAC,iBAAA,EAAAC,4BAAA,EAAAC,mBAAA,EAAAC,cAAA,EAAAC,gBAAA,EAAAC,oBAAA,EAAAC,kBAAA,EAAAC,oBAAA,EAAAC,sBAAA,EAAAC,mBAAA,EAAAC,iBAAA,EAAAC,oBAAA,EAAAC,sBAAA,EAAAC,8BAAA,EAAAC,0BAAA,EAAAC,0BAAA,EAAAC,0BAAA,EAAAC,WAAA,EAAAC,yBAAA,EAAAC,0BAAA,EAAAC,iBAAA,EAAAC,oBAAA,EAAAz8G,UAAA,EAAA08G,yBAAA,EAAAC,8BAAA,EAAAC,2DAAA,EAAAC,iEAAA,EAAAC,mBAAA,EAAAC,gDAAA,EAAAC,gCAAA,EAAAC,oFAAA,EAAAC,KAAA,EAAAC,MAAA,EAAAC,oBAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAAC,2BAAA,EAAAC,mCAAA,EAAAC,iBAAA,EAAAC,mBAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,+BAAA,EAAAC,yEAAA,EAAAl9G,SAAA,EAAAm9G,YAAA,EAAAC,0EAAA,EAAAC,6CAAA,EAAAC,2BAAA,EAAAC,6CAAA,EAAAC,8DAAA,EAAAC,oCAAA,EAAAC,aAAA,EAAAC,UAAA,EAAAC,oBAAA,EAAAC,oBAAA,EAAAC,gBAAA,EAAAC,mEAAA,EAAAC,mDAAA,EAAAC,iEAAA,EAAAC,8BAAA,EAAAC,uCAAA,EAAAC,mCAAA,EAAAC,iCAAA,EAAAC,kFAAA,EAAAC,uCAAA,EAAAC,WAAA,EAAAC,2DAAA,EAAAC,wDAAA,EAAAC,uDAAA,EAAAC,iCAAA,EAAAC,gCAAA,EAAA1iB,QAAA,EAAA2iB,UAAA,EAAAC,mBAAA,EAAAC,wDAAA,EAAAC,uCAAA,EAAAC,8DAAA,EAAAC,oCAAA,EAAAC,QAAA,EAAAC,8BAAA,EAAAC,6BAAA,EAAAC,sBAAA,EAAAC,WAAA,EAAAC,gBAAA,EAAAC,eAAA,EAAAC,mCAAA,EAAAC,aAAA,EAAAC,sBAAA,EAAAC,2CAAA,EAAAC,qBAAA,EAAAC,2BAAA,EAAAC,aAAA,EAAAC,oBAAA,EAAAC,mCAAA,EAAAC,0BAAA,EAAAC,kBAAA,EAAAC,uBAAA,EAAAC,gBAAA,EAAAC,iCAAA,EAAAC,gCAAA,EAAAC,wBAAA,EAAAC,4BAAA,EAAAC,4BAAA,EAAAC,OAAA,EAAAC,QAAA,EAAAC,YAAA,EAAAC,sBAAA,EAAA1zK,MAAA,EAAA2zK,QAAA,EAAAC,OAAA,EAAAC,cAAA,EAAAC,oBAAA,EAAAC,8BAAA,EAAAC,yBAAA,EAAAC,MAAA,EAAAC,mBAAA,GAAmpJC,MAASvJ,eAAA,QAAAC,SAAA,SAAAC,cAAA,QAAAC,iBAAA,WAAAC,UAAA,QAAAC,UAAA,SAAAC,eAAA,MAAAC,MAAA,MAAAxqG,cAAA,MAAAyqG,oBAAA,oBAAAC,uBAAA,WAAAC,2BAAA,aAAAC,MAAA,MAAAC,KAAA,MAAAC,QAAA,OAAAC,OAAA,KAAAC,gBAAA,WAAAC,OAAA,KAAAE,qBAAA,iBAAAC,oBAAA,cAAAxjG,KAAA,OAAAyjG,MAAA,OAAAC,SAAA,KAAAC,oBAAA,UAAAE,YAAA,KAAAC,gBAAA,UAAAC,OAAA,QAAAC,kBAAA,YAAAC,iBAAA,cAAAC,cAAA,WAAAC,yBAAA,iBAAAC,gCAAA,kBAAAC,kCAAA,oBAAAC,yBAAA,iBAAAC,qBAAA,aAAAC,6BAAA,qBAAAC,6BAAA,gBAAAC,qBAAA,QAAAC,gBAAA,WAAAC,2BAAA,iBAAAC,kBAAA,WAAAC,aAAA,QAAAC,eAAA,cAAAC,mBAAA,cAAAC,iBAAA,QAAAC,mBAAA,YAAAC,qBAAA,QAAAC,kBAAA,YAAAC,gBAAA,aAAAC,mBAAA,gBAAAC,qBAAA,eAAAC,6BAAA,iBAAAC,yBAAA,kBAAAC,yBAAA,kBAAAC,yBAAA,oBAAAC,UAAA,SAAAC,wBAAA,gBAAAC,yBAAA,oBAAAC,gBAAA,YAAAC,mBAAA,cAAAz8G,SAAA,WAAA08G,wBAAA,YAAAC,6BAAA,wBAAA2F,kBAAA,cAAAvF,+CAAA,mBAAAC,+BAAA,qBAAAE,IAAA,KAAAC,KAAA,KAAAC,mBAAA,OAAAC,oBAAA,cAAAkF,0BAAA,mBAAAhF,0BAAA,sBAAAC,kCAAA,kBAAAK,8BAAA,eAAAC,wEAAA,mCAAAl9G,QAAA,SAAAo9G,yEAAA,0CAAAC,4CAAA,8BAAAK,YAAA,SAAAC,SAAA,SAAAC,mBAAA,gBAAAE,eAAA,QAAAI,6BAAA,aAAAG,gCAAA,YAAAE,sCAAA,oBAAAC,UAAA,QAAAG,sDAAA,8BAAAC,gCAAA,mBAAAC,+BAAA,oBAAA1iB,OAAA,SAAA2iB,SAAA,SAAAC,kBAAA,UAAAK,OAAA,OAAAE,4BAAA,aAAAC,qBAAA,iBAAAC,UAAA,QAAAE,cAAA,OAAAC,kCAAA,cAAAC,YAAA,UAAAM,mBAAA,gBAAA0B,0BAAA,uBAAAzB,kCAAA,kBAAAC,yBAAA,iBAAAC,iBAAA,aAAAC,sBAAA,iBAAAC,eAAA,QAAAC,gCAAA,iBAAAC,+BAAA,iBAAAC,uBAAA,YAAAC,2BAAA,eAAAC,2BAAA,aAAAC,MAAA,OAAAC,OAAA,OAAAC,WAAA,SAAAC,qBAAA,SAAA1zK,KAAA,MAAA2zK,OAAA,OAAAC,MAAA,MAAAC,aAAA,UAAAU,mBAAA,SAAAC,eAAA,KAAAC,OAAA,OAAAC,sBAAA,iBAAAC,kBAAA,QAAAb,mBAAA,UAAmjIc,MAAShK,eAAA,qBAAAC,SAAA,WAAAC,cAAA,oBAAAC,iBAAA,0BAAAC,UAAA,cAAAC,UAAA,YAAAC,eAAA,iBAAAC,MAAA,QAAAxqG,cAAA,gBAAAyqG,oBAAA,sCAAAC,uBAAA,8BAAAC,2BAAA,6BAAAC,MAAA,QAAAC,KAAA,OAAAC,QAAA,aAAAC,OAAA,YAAAC,gBAAA,qBAAAC,OAAA,SAAAC,KAAA,iBAAAC,qBAAA,uBAAAC,oBAAA,qBAAAxjG,KAAA,cAAAyjG,MAAA,mBAAAC,SAAA,iBAAAC,oBAAA,qCAAAC,eAAA,0BAAAC,YAAA,cAAAC,gBAAA,kCAAAC,OAAA,cAAAC,kBAAA,0BAAAC,iBAAA,8BAAAC,cAAA,qBAAAC,yBAAA,iCAAAC,gCAAA,qCAAAC,kCAAA,gCAAAC,yBAAA,eAAAC,qBAAA,iCAAAC,6BAAA,gCAAAC,6BAAA,iCAAAC,qBAAA,6BAAAC,gBAAA,2BAAAC,2BAAA,gCAAAC,kBAAA,iBAAAC,aAAA,mBAAAC,eAAA,sBAAAC,mBAAA,sBAAAC,iBAAA,uBAAAC,mBAAA,uBAAAC,qBAAA,2BAAAC,kBAAA,kCAAAC,gBAAA,6BAAAC,mBAAA,uBAAAC,qBAAA,mCAAAC,6BAAA,+BAAAC,yBAAA,+BAAAC,yBAAA,gCAAAC,yBAAA,gCAAAC,UAAA,cAAAC,wBAAA,oCAAAC,yBAAA,wCAAAC,gBAAA,iBAAAC,mBAAA,6BAAAz8G,SAAA,WAAA08G,wBAAA,0BAAAC,6BAAA,qDAAAC,0DAAA,+EAAAC,gEAAA,oFAAAC,kBAAA,yBAAAC,+CAAA,sDAAAC,+BAAA,gDAAAC,mFAAA,6GAAAC,IAAA,OAAAC,KAAA,QAAAC,mBAAA,0BAAAC,oBAAA,uCAAAC,0BAAA,sCAAAC,0BAAA,qCAAAC,kCAAA,qDAAAC,gBAAA,6BAAAC,kBAAA,sCAAAC,kBAAA,gCAAAC,oBAAA,0CAAAC,8BAAA,+CAAAC,wEAAA,4FAAAl9G,QAAA,iBAAAm9G,WAAA,aAAAC,yEAAA,oGAAAC,4CAAA,oDAAA8E,qBAAA,8BAAAC,mCAAA,gDAAAC,2BAAA,wCAAAC,0BAAA,qCAAAhF,0BAAA,yCAAAC,4CAAA,mEAAAC,6DAAA,oFAAAC,mCAAA,2CAAAC,YAAA,mBAAAC,SAAA,cAAAC,mBAAA,gCAAAC,mBAAA,wBAAAC,eAAA,mBAAAC,kEAAA,sGAAAC,kDAAA,0DAAAC,gEAAA,2EAAAC,6BAAA,yCAAAC,sCAAA,kDAAAC,kCAAA,sCAAAC,gCAAA,6BAAAC,iFAAA,0HAAAC,sCAAA,iDAAAC,UAAA,gBAAAC,0DAAA,uFAAAC,uDAAA,mFAAAC,sDAAA,uDAAAC,gCAAA,mCAAAC,+BAAA,gCAAA1iB,OAAA,SAAA2iB,SAAA,sBAAAC,kBAAA,uBAAAC,uDAAA,yEAAAC,sCAAA,2DAAAC,6DAAA,6EAAAC,mCAAA,8CAAAC,OAAA,YAAAC,6BAAA,sCAAAC,4BAAA,gCAAAC,qBAAA,mCAAAC,UAAA,aAAAC,eAAA,iBAAAC,cAAA,YAAAC,kCAAA,qCAAAC,YAAA,iBAAAC,qBAAA,iCAAAC,0CAAA,+DAAAC,oBAAA,yCAAAC,0BAAA,2CAAAuB,KAAA,YAAAC,kBAAA,0BAAqhQe,MAASzG,wBAAA,OAAAC,6BAAA,YAAA2F,kBAAA,QAAAvF,+CAAA,aAAAC,+BAAA,WAAAE,IAAA,IAAAC,KAAA,QAAAC,mBAAA,QAAAG,0BAAA,YAAAC,kCAAA,UAAAK,8BAAA,UAAAC,wEAAA,sBAAAl9G,QAAA,MAAAo9G,yEAAA,sBAAAC,4CAAA,eAAAK,YAAA,KAAAC,SAAA,KAAAC,mBAAA,QAAAE,eAAA,OAAAI,6BAAA,UAAAG,gCAAA,UAAAE,sCAAA,UAAAC,UAAA,OAAAI,gCAAA,WAAAC,+BAAA,UAAA1iB,OAAA,KAAA2iB,SAAA,MAAAC,kBAAA,OAAAK,OAAA,KAAAE,4BAAA,OAAAC,qBAAA,OAAAC,UAAA,KAAAE,cAAA,MAAAC,kCAAA,WAAAC,YAAA,QAAkqC3H,GAAA/+J,KAAA,SAAAoyC,GAE/6jBA,IAEAA,EADAlkD,OAAAo7K,OAAAp7K,OAAAo7K,MAAAp3H,OACAhkD,OAAAo7K,MAAAp3H,OACIhiD,SAAA+M,gBAAA6Z,KACJ5mB,SAAA+M,gBAAA6Z,KAEA,OAGA,IAAAvR,GAAAlT,KAAA,KAAA+/C,IAAA//C,KAAAigD,MAGA,IAAA/sC,EACA,OAAAtU,KAAAsU,GACAlT,KAAApB,GAAAsU,EAAAtU,IAGG8tK,EAAA/+J,OAAenS,EAAAD,QAAAmxK,GjEyjuCZ,SAAUlxK,EAAQD,EAASH,GAEjC,cAC4B,SAASgF,GkEljuCrC,QAAS6pE,GAAc3oE,GACnBA,EAAUA,KACV,IAAIiI,GAAOvJ,IAUX,OAPAuJ,GAAK2tK,OAASr7K,OAAOwsE,cAAgBxsE,OAAOwsE,aAAaqB,KAAO7tE,OAAOwsE,aAAaqB,KAAK/wD,GAAK,KAC9FpP,EAAK2tK,OAAS3tK,EAAK2tK,QAAU51K,EAAQ41K,QAAU,KAG/C3tK,EAAKwgE,cAAgBzoE,EAAQyoE,eAAiB,KAE9CxgE,EAAK++D,MAAMhnE,GACJiI,EAsPX,QAAS4tK,GAAex/J,GACpB,GAAIy/J,GAAQv2J,OAAOlJ,EAInB,OAHa,mBAATy/J,IACAA,EAAQt8I,KAAKyd,UAAU5gC,IAEpBy/J,EAoFX,QAASC,GAAa/1K,GAElB,MADWtB,MACCsoE,MAAMhnE,OlEuttCtB/E,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GAGX,IAAIouK,GAA4B,kBAAXz/J,SAAoD,gBAApBA,QAAOC,SAAwB,SAAU3X,GAAO,aAAcA,IAAS,SAAUA,GAAO,MAAOA,IAAyB,kBAAX0X,SAAyB1X,EAAI0V,cAAgBgC,QAAU1X,IAAQ0X,OAAOrb,UAAY,eAAkB2D,GkEviuCtQ8pE,GAAcC,IAAM,EACpBD,EAAcstG,IAAM,EACpBttG,EAAcutG,MAAQ,GACtBvtG,EAAcwtG,KAAO,GACrBxtG,EAAcytG,KAAO,GACrBztG,EAAc0tG,MAAQ,GAItB1tG,EAAc2tG,OAAS,GACvB3tG,EAAc4tG,KAAO,IAGrB5tG,EAAcL,gBAEVkuG,SAAU7tG,EAAc4tG,KAExB7tG,aAAcC,EAAc4tG,KAE5BE,iBAAkB,SAIlB5tG,0BAA2B,KAE3BC,wBAAwB,EAExB4tG,aAAc,UAGdC,aAAc,IAEdC,SAAU,IAEVC,SAAS,EAETC,eAAgB,QAGhBC,QAAS,eAETC,cAAe,IAGfC,gBAAaj7K,GAEbk7K,qBAAkBl7K,IAKtB2sE,EAAcztE,UAAU8rE,MAAQ,SAAehnE,GAC3C,GAAIiI,GAAOvJ,IACXuJ,GAAKjI,UACL,KAAK,GAAIgtD,KAAK2b,GAAcL,eACpBK,EAAcL,eAAentE,eAAe6xD,KAC5C/kD,EAAKjI,QAAQgtD,GAAKhtD,EAAQ7E,eAAe6xD,GAAKhtD,EAAQgtD,GAAK2b,EAAcL,eAAetb,GAgBhG,OAbA/kD,GAAKjI,QAAQw2K,SAAWvuK,EAAKkvK,YAAYlvK,EAAKjI,QAAQw2K,UACtDvuK,EAAKjI,QAAQ0oE,aAAezgE,EAAKkvK,YAAYlvK,EAAKjI,QAAQ0oE,cAI1DzgE,EAAKmvK,UAAW,EAEhBnvK,EAAKovK,SAAW,KAEhBpvK,EAAKqvK,UAAYrvK,EAAKjI,QAAQ42K,SAE9B3uK,EAAKsvK,aAEEtvK,GAIX0gE,EAAcztE,UAAUq8K,WAAa,WACjC,IACI74K,KAAK0Z,MAAQ,GAAI29J,IACbyB,QAAS94K,KAAKsB,QAAQ22K,aACtB91K,IAAKnC,KAAKsB,QAAQ82K,eAAiBp4K,KAAKk3K,SAE9C,MAAO13K,GACLQ,KAAK+4K,eAAe,OAAQ,iBAAkB,uCAAwCv5K,IACtFQ,KAAKsB,QAAQw2K,SAAW7tG,EAAc4tG,OAK9C5tG,EAAcztE,UAAUi8K,YAAc,SAAqBrsG,GACvD,GAAIpuE,OAAA,KAAcouE,EAAd,YAAAkrG,EAAclrG,EAClB,IAAa,WAATpuE,EACA,MAAOouE,EAEX,IAAa,WAATpuE,EAAmB,CACnB,GAAIg7K,GAAQ5sG,EAAMpgE,aAClB,IAAIi+D,EAAcxtE,eAAeu8K,GAC7B,MAAO/uG,GAAc+uG,GAG7B,KAAM,IAAI37K,OAAJ,sBAAgC+uE,IAK1CnC,EAAcztE,UAAUsvD,KAAO,SAAcsgB,EAAO1+C,EAAWurJ,GAE3D,GAAI1vK,GAAOvJ,IAEX,OADA0tB,GAAYA,GAAankB,EAAKjI,QAAQy2K,iBACjC3rG,GAAU6sG,GAMf7sG,EAAQ7iE,EAAKkvK,YAAYrsG,GACrBA,GAAS7iE,EAAKjI,QAAQw2K,UACtBvuK,EAAK2vK,YAAY9sG,EAAO1+C,EAAWurJ,GAGnC1vK,EAAKwgE,eAAiBqC,GAAS7iE,EAAKjI,QAAQ0oE,cAC5CzgE,EAAKwvK,eAAe3sG,EAAO1+C,EAAWurJ,GAEnC1vK,GAbIA,GAkBf0gE,EAAcztE,UAAU08K,YAAc,SAAqB9sG,EAAO1+C,EAAWurJ,GACzEj5K,KAAK+4K,eAAe,QAAS,iBACzB,eACA/xK,UACAhH,KAAKsB,QAAQ62K,QACbn4K,KAAK0Z,MAAMtd,UAGf,IAAImN,GAAOvJ,IAEX,KACoBuJ,EAAKmQ,MAAMxS,IAAIqC,EAAK4vK,YAAY/sG,EAAO1+C,EAAWurJ,KACjD1vK,EAAKqvK,WAClBrvK,EAAK6vK,aAGX,MAAO55K,GACL+J,EAAKwvK,eAAe,OAAQ,iBACxB,mDACArrJ,EACAurJ,IAEJ1vK,EAAKwvK,eAAe,QAAS,iBAAkBv5K,IAEnD,MAAO+J,IAIX0gE,EAAcztE,UAAU28K,YAAc,SAAqB/sG,EAAO1+C,EAAWurJ,GACzEj5K,KAAK+4K,eAAe,QAAS,iBAAkB,eAAgB/xK,WAC/D,IAAIi1D,IACAmQ,MAAOA,EACP1+C,UAAW1tB,KAAKsB,QAAQ02K,aAAetqJ,EACvChlB,KAAMuwK,EAKV,OAHIj5K,MAAKsB,QAAQ62K,UACbl8G,EAAMpkC,MAAO,GAAIjgB,OAAOyhK,eAErBp9G,GAQXgO,EAAcztE,UAAU48K,WAAa,SAAoB93K,GAKrD,GAJAA,EAAUA,MACVtB,KAAK+4K,eAAe,OAAQ,iBAAkB,aAAcz3K,EAAStB,KAAK44K,aAGrE54K,KAAKsB,QAAQ+2K,SAAWr4K,KAAK04K,SAC9B,MAAOt4K,GAAOmpB,QAGlB,IAAIhgB,GAAOvJ,KACPk4K,EAAW52K,EAAQkqB,OAASjiB,EAAKqvK,UAGrCt8G,EAAU/yD,EAAKmQ,MAAMxa,IAAIg5K,GAErBoB,EAAgBh9G,EAAQlgE,OAG5Bm9K,EAA+C,kBAA7BhwK,GAAKjI,QAAQi3K,YAA6BhvK,EAAKjI,QAAQi3K,gBAQzE,OAHAgB,GAASC,QAAU1+I,KAAKyd,UAAU+jB,GAElC/yD,EAAKmvK,UAAW,EACTt4K,EACFq5K,KAAKlwK,EAAKjI,QAAQ+2K,QAASkB,GAC3BhqK,OAAO,WACJhG,EAAKmvK,UAAW,IAEnB3mK,KAAK,SAACguB,EAAKjD,EAAQwpB,GAEhB/8C,EAAKqvK,UAAYrvK,EAAKjI,QAAQ22K,aAG9B1uK,EAAKuiD,KAAK,QAAS,iBACf,oBACA/rB,EAAI3V,WACJ2V,EAAIjD,OACJiD,EAAI25I,cAAgB35I,EAAIc,iBAK/BhxB,KAAK,SAAAmE,GAC2C,kBAAlCzK,GAAKjI,QAAQk3K,kBACpBjvK,EAAKjI,QAAQk3K,iBAAiBxkK,GAGlCzK,EAAKmQ,MAAM3P,OAAOuvK,GAGlB/vK,EAAKqvK,UAAYrvK,EAAKjI,QAAQ42K,YAM1CjuG,EAAcztE,UAAUm9K,WAAa,WAEjC,GAAIpwK,GAAOvJ,IACXuJ,GAAKovK,SAAWp6K,WAAW,WACvBgL,EAAKovK,SAAW,MACjBpvK,EAAKjI,QAAQg3K,gBAapBruG,EAAcztE,UAAUu8K,eAAiB,SAAwB3sG,EAAO1+C,EAAWurJ,GAE/E,GAAI1vK,GAAOvJ,KAEP45K,EAAYrwK,EAAKjI,QAAQ6oE,yBAC7B,KAAK5gE,EAAKwgE,cACN,MAAOxgE,EAGX,IAAIqwK,IAA+C,IAAlCA,EAAU34K,QAAQysB,GAC/B,MAAOnkB,EAGX,IAAIb,GAAOmO,MAAMra,UAAUyP,MAAMtQ,KAAKs9K,EAAc,EAOpD,OANAvwK,GAAK6J,QAAQmb,GACTnkB,EAAKjI,QAAQ8oE,yBACb1hE,GAAQA,EAAKgB,IAAIytK,GAAgB/9J,KAAK,OAItCgzD,GAASnC,EAAc2tG,QAA6C,kBAA5BruK,GAAKwgE,cAAcq3D,KACpD73H,EAAKwgE,cAAcq3D,KAAKr6H,MAAMwC,EAAKwgE,cAAerhE,GAClD0jE,GAASnC,EAAc0tG,OAA6C,kBAA7BpuK,GAAKwgE,cAAcrqE,MAC1D6J,EAAKwgE,cAAcrqE,MAAMqH,MAAMwC,EAAKwgE,cAAerhE,IACnD0jE,GAASnC,EAAcytG,MAA2C,kBAA5BnuK,GAAKwgE,cAAci0E,KAChEz0I,EAAKwgE,cAAci0E,KAAKj3I,MAAMwC,EAAKwgE,cAAerhE,GAC3C0jE,GAASnC,EAAcwtG,MAA2C,kBAA5BluK,GAAKwgE,cAAcq3D,KAChE73H,EAAKwgE,cAAcq3D,KAAKr6H,MAAMwC,EAAKwgE,cAAerhE,GAC3C0jE,GAASnC,EAAcutG,OAA6C,kBAA7BjuK,GAAKwgE,cAAc1sB,MACjE9zC,EAAKwgE,cAAc1sB,MAAMt2C,MAAMwC,EAAKwgE,cAAerhE,GACV,kBAA3Ba,GAAKwgE,cAAcjS,KACjCvuD,EAAKwgE,cAAcjS,IAAI/wD,MAAMwC,EAAKwgE,cAAerhE,GAE9Ca,IAMX0gE,EAAcztE,UAAUs7D,IAAM,WAC1B93D,KAAK8rD,KAAK,EAAG9rD,KAAKsB,QAAQy2K,iBAAkBlhK,MAAMra,UAAUyP,MAAMtQ,KAAKqL,UAAW,KAItFijE,EAAcztE,UAAU6gD,MAAQ,WAC5Br9C,KAAK8rD,KAAKme,EAAcutG,MAAOx3K,KAAKsB,QAAQy2K,iBAAkBlhK,MAAMra,UAAUyP,MAAMtQ,KAAKqL,UAAW,KAIxGijE,EAAcztE,UAAU4kI,KAAO,WAC3BphI,KAAK8rD,KAAKme,EAAcwtG,KAAMz3K,KAAKsB,QAAQy2K,iBAAkBlhK,MAAMra,UAAUyP,MAAMtQ,KAAKqL,UAAW,KAIvGijE,EAAcztE,UAAUwhJ,KAAO,WAC3Bh+I,KAAK8rD,KAAKme,EAAcytG,KAAM13K,KAAKsB,QAAQy2K,iBAAkBlhK,MAAMra,UAAUyP,MAAMtQ,KAAKqL,UAAW,KAIvGijE,EAAcztE,UAAUkD,MAAQ,WAC5BM,KAAK8rD,KAAKme,EAAc0tG,MAAO33K,KAAKsB,QAAQy2K,iBAAkBlhK,MAAMra,UAAUyP,MAAMtQ,KAAKqL,UAAW,KAIxGijE,EAAcztE,UAAUq9K,OAAS,WAC7B75K,KAAK8rD,KAAKme,EAAc2tG,OAAQ53K,KAAKsB,QAAQy2K,iBAAkBlhK,MAAMra,UAAUyP,MAAMtQ,KAAKqL,UAAW,KAoBzGqwK,EAAaztG,gBAETkvG,QAAS,KAIbzB,EAAa76K,UAAU8rE,MAAQ,SAAehnE,GAC1C,IAAKtB,KAAK85K,cAEN,KAAM,IAAIz8K,OAAM,kCAEpB,KAAKiE,EAAQa,IACT,KAAM,IAAI9E,OAAM,0CAMpB,OAJA2C,MAAKmC,IAAMb,EAAQa,IACnBnC,KAAK+5K,eAEL/5K,KAAK84K,QAAUx3K,EAAQw3K,SAAWzB,EAAaztG,eAAekvG,QACvD94K,MAIXq3K,EAAa76K,UAAUs9K,YAAc,WAGjC,IAGI,MAFA9wG,cAAa7mB,QAFN,eAGP6mB,aAAazmB,WAHN,SAIA,EACT,MAAO1lD,GACL,OAAO,IAKfw6K,EAAa76K,UAAUu9K,aAAe,WAClC,MAAuC,QAAnC/wG,aAAa1mB,QAAQtiD,KAAKmC,KACnBnC,KAAKqP,QAETrP,MAIXq3K,EAAa76K,UAAU0K,IAAM,SAAa+0D,GACtC,GAAI1yD,GAAOvJ,KACPg6K,EAASzwK,EAAK0wK,iBACdC,EAAUF,EAAO59K,OAAS,EAAImN,EAAKuvK,OAMvC,OALIoB,GAAU,GACVF,EAAO3jK,OAAO,EAAG6jK,GAErBF,EAAO19K,KAAK2/D,GACZ1yD,EAAK4wK,iBAAiBH,GACfA,EAAO59K,QAIlBi7K,EAAa76K,UAAUy9K,eAAiB,WACpC,GAAI1wK,GAAOvJ,IACX,OAAO86B,MAAKC,MAAMiuC,aAAa1mB,QAAQ/4C,EAAKpH,OAIhDk1K,EAAa76K,UAAU29K,iBAAmB,SAA0B79G,GAChE,GAAI/yD,GAAOvJ,IACX,OAAOgpE,cAAa7mB,QAAQ54C,EAAKpH,IAAK24B,KAAKyd,UAAU+jB,KASzD+6G,EAAa76K,UAAUJ,OAAS,WAC5B,MAAO4D,MAAKi6K,iBAAiB79K,QAIjCi7K,EAAa76K,UAAU0C,IAAM,SAAassB,GACtC,MAAOxrB,MAAKi6K,iBAAiBhuK,MAAM,EAAGuf,IAI1C6rJ,EAAa76K,UAAUuN,OAAS,SAAgByhB,GAC5C,GAAIwuJ,GAASh6K,KAAKi6K,iBACdhkI,EAAU+jI,EAAO3jK,OAAO,EAAGmV,EAE/B,OADAxrB,MAAKm6K,iBAAiBH,GACf/jI,GAIXohI,EAAa76K,UAAU6S,MAAQ,WAE3B,MADA25D,cAAa7mB,QAAQniD,KAAKmC,IAAK,MACxBnC,MAIXq3K,EAAa76K,UAAU+7C,UAAY,SAAmB/sB,GAClD,MAAOsP,MAAKyd,UAAUv4C,KAAKd,IAAIssB,KAInC6rJ,EAAa76K,UAAU49K,MAAQ,WAE3B36K,QAAQq4D,IAAIh9B,KAAKyd,UAAUv4C,KAAKi6K,iBAAkB,KAAM,QlEykuC5D1+K,EAAQmkD,SkEpkuCJuqB,cAAeA,EACfotG,aAAcA,KlEukuCW17K,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,GAsB/C,QAASsc,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GApBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GmE7jvCX,IAAAo8C,GAAAlqD,EAAA,GACAi/K,GnEikvCch6H,EAAuBiF,GmEjkvCrClqD,EAAA,MnEqkvCIk/K,EAASj6H,EAAuBg6H,GmEpkvCpCE,EAAAn/K,EAAA,KnEwkvCIo/K,EAAgBn6H,EAAuBk6H,GmEvkvC3CE,EAAAr/K,EAAA,KnE2kvCIs/K,EAAmBr6H,EAAuBo6H,GmEzkvC1CnjI,EAAOvG,EAASuG,KAAKnvC,QACrB2rC,WAAY,SAASxyC,GACjB,GAAIiI,GAAOvJ,IACXA,MAAKsB,QAAUA,EACftB,KAAK63C,WAAW73C,KAAKupD,aACrBvpD,KAAK26K,iBAAmB36K,KAAK+jC,EAAE,sBAC/B/jC,KAAK46K,kBAAoB56K,KAAK+jC,EAAE,uBAChC/jC,KAAK66K,kBAAoB76K,KAAK+jC,EAAE,uBAChC/jC,KAAK86K,YAAc96K,KAAK+jC,EAAE,gBAC1B/jC,KAAK+6K,YAAc/6K,KAAK+jC,EAAE,0BAG1B/jC,KAAKyI,WAAa,GAAI6xK,GAAA56H,QAAKjK,WAC3Bz1C,KAAKyI,WACAlC,GAAG,MAAO,SAAAmrC,GACPnoC,EAAKuxK,YAAYrpJ,OAAO,GAAI6oJ,GAAA56H,QAAK6nH,KAAM71H,MAAOA,IAASlB,SAASmH,OAEnEpxC,GAAG,QAAS,WACTgD,EAAKuxK,YAAYzrK,UAEpB9I,GAAG,WAAY,SAAAoC,GACZY,EAAKd,WAAWlH,KAAK,SAAA9C,GACjBkK,EAASlK,OAGhBq2C,MAAM90C,KAAKsB,SAGhBs8C,OAAOia,MAAQ73D,KAAK63D,MAAQ,GAAA2iH,GAAA96H,SACxBj3C,WAAYzI,KAAKyI,aAKrBm1C,OAAOo9H,WAAah7K,KAAKg7K,WAAa,GAAIN,GAAAh7H,QAAWu7H,gBACjDvpI,MAAOkM,OAAO8rB,KACd99C,GAAI5rB,KAAK+6K,cAIbh3I,EAAEloC,QACG0K,GAAG,QAAS,SAAA1J,GACT,GAAIq+K,GAAiBn3I,EAAElnC,EAAEqW,QAAQuU,QAAQ,cACZ,IAAzByzJ,EAAe9+K,SACyB,IAApC2nC,EAAE,uBAAuB3nC,QACzB2nC,EAAE,QAAQtS,OACNsS,EAAE,aACGnhB,KAAK,KAAM,YACX9S,QAGbi0B,EAAE,uBAAuBnhB,KAAK,MAAOs4J,EAAet4J,KAAK,SACzD/lB,EAAE4xB,oBAGTloB,GAAG,eAAgB,WAChB,GAAI6Q,GAAO,EAKX,IAJA7N,EAAKd,WAAWlH,KAAK,SAAAmwC,GACjB,GAAI8pC,GAAI9pC,EAAMxyC,IAAI,mBAAqBwyC,EAAMxyC,IAAI,mBACjDs8E,KAAMpkE,GAAWokE,EAAX,OAEG,KAATpkE,EACA,MAAOA,MAKvBo5B,OAAQ,WAKJ,MAJAxwC,MAAK66K,kBAAkBpxK,KAAvB,WAAuCzJ,KAAKsB,QAAQk+C,OAAb,KAA2Bx/C,KAAKsB,QAAQk+C,OAAY,KAC3Fx/C,KAAK26K,iBAAiB/3J,KAAK,OAAQ5iB,KAAKsB,QAAQ65K,UAChDn7K,KAAK46K,kBAAkBh4J,KAAK,MAAO5iB,KAAKsB,QAAQ85K,UAChDp7K,KAAKg7K,WAAWxqI,SACTxwC,MAIXupD,UAAW,WACP,MACI,2UnEukvCZhuD,GAAQmkD,SmErjvCJpI,KAAMA,KnEwjvCmB37C,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,EAAG3jC,EAAQsB,GAsB1D,QAAS2+C,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GApBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GoEtqvCX,IAAAmyK,GAAAjgL,EAAA,KpE2qvCIkgL,EAAmBj7H,EAAuBg7H,GoE1qvC9CllC,EAAA/6I,EAAA,IpE8qvCIg7I,EAAa/1F,EAAuB81F,GoE7qvCxCx2F,EAAAvkD,EAAA,GpEirvCIqkD,EAAiBY,EAAuBV,GoEhrvC5C2F,EAAAlqD,EAAA,GpEorvCIiyD,EAAUhN,EAAuBiF,GoEnrvCjC7P,EAAa1E,EAAS0E,WAAWttC,QACjCupC,MAAOX,EAAS2C,MAAMvrC,QAClBklC,UACI/N,SAAS,EACTpsB,OAAQ,aAGhB4hC,MAAO,SAASxzC,GAEZA,EAAUA,MACVtB,KAAKimB,OAKL,IAAIs1J,GAAkB,GAAID,GAAA57H,QAAW87H,cACrCx7K,MAAKkH,IAAIq0K,EAAgB/qI,UAKzBxwC,KAAKkH,KACDyR,GAAI,WACJojC,OAAO,EAAA0D,EAAAC,SAAG,gBACV5jB,IAAK,GACL43B,SAAS,EAAAjU,EAAAC,SAAG,wBAMhB1/C,KAAKkH,KACDyR,GAAI,WACJojC,OAAO,EAAA0D,EAAAC,SAAG,YACVgU,SAAS,EAAAjU,EAAAC,SAAG,8BACZv6B,UAAWy4B,OAAO8rB,KAAK/wD,GACvBmjB,IAAK,aAMT97B,KAAKkH,KACDyR,GAAI,SACJojC,OAAO,EAAA0D,EAAAC,SAAG,eACV5jB,IAAK,gBACL43B,SAAS,EAAAjU,EAAAC,SAAG,8BACZyuB,OAEQpyB,OAAO,EAAA0D,EAAAC,SAAG,kBACV5jB,IAAK,iBAGLigB,OAAO,EAAA0D,EAAAC,SAAG,aACV5jB,IAAK,6BAGLigB,OAAO,EAAA0D,EAAAC,SAAG,aACV5jB,IAAK,6BAGLigB,OAAO,EAAA0D,EAAAC,SAAG,kBACV5jB,IAAK,kCAGLigB,OAAO,EAAA0D,EAAAC,SAAG,SACV5jB,IAAK,2BAQjB97B,KAAKkH,KACDyR,GAAI,gBACJojC,OAAO,EAAA0D,EAAAC,SAAG,iBACV5jB,IAAK,sBACL43B,SAAS,EAAAjU,EAAAC,SAAG,sBACZv6B,UAAWy4B,OAAO8rB,KAAK/wD,GACvBw1D,OAEQpyB,OAAO,EAAA0D,EAAAC,SAAG,qBACV5jB,IAAK,0BACL5oB,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,wBACV5jB,IAAK,sBACL5oB,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,4BACV5jB,IAAK,yBACL5oB,OAAQ,kBAQpBkjI,EAAA12F,QAASx4C,KACL40B,IAAK,4BACLnzB,SAAU,SAASyrD,GACfrwB,EAAElmC,UAAUiE,MAAM,WACdiiC,EAAExiC,KAAK6yD,EAAS1e,OAAQ,SAACpsC,EAAOooC,GAC5B,GAAIyiB,GAAUziB,EAAMZ,QACpB,IAAIqjB,EAAQP,SAAU,CAClB,GAAIzzD,IACAwY,GAAIw7C,EAAQv1D,KACZssD,KAAMiJ,EAAQ5U,OAAO2L,KACrBpvB,IAAKq4B,EAAQ5U,OAAOzjB,IACpB43B,QAASS,EAAQ5U,OAAOmU,QACxB9C,QAASuD,EAAQ5U,OAAOu6F,UAAY,GAAIt0G,UAAS2uB,EAAQ5U,OAAOu6F,UAIhEl8F,QAAOolC,KACPplC,OAAOolC,KAAKxX,SAAS/iE,WAAWvB,IAAI/G,GAC7By9C,OAAO4tB,UACd5tB,OAAO4tB,SAAS/iE,WAAWvB,IAAI/G,GAInCktD,EAAA3N,QAAMP,kBAAkBgV,WAU5CvW,OAAO8rB,KAAKxqE,IAAI,aACZc,KAAKkH,KACDyR,GAAI,QACJojC,OAAO,EAAA0D,EAAAC,SAAG,SACV5jB,IAAK,QACL43B,SAAS,EAAAjU,EAAAC,SAAG,0BACZ6G,IAAK,cAMb,IAAIk1H,IACA9iK,GAAI,OACJojC,OAAO,EAAA0D,EAAAC,SAAG,QACVgU,SAAS,EAAAjU,EAAAC,SAAG,mCACZyuB,OAEQpyB,OAAO,EAAA0D,EAAAC,SAAG,WACV5jB,IAAKx6B,EAAQo6K,YACbxoK,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,UACV5jB,IAAKx6B,EAAQq6K,WACbzoK,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,iBACV5jB,IAAKx6B,EAAQs6K,cACb1oK,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,UACV5jB,IAAKx6B,EAAQu6K,gBACb3oK,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,QACV5jB,IAAKx6B,EAAQw6K,SACb5oK,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,sBACV5jB,IAAKx6B,EAAQy6K,aACb7oK,OAAQ,WAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,qBACV5jB,IAAK,UAIjBx6B,GAAQ06K,WACJP,EAAQttG,KAAK7xE,MACTy/C,OAAO,EAAA0D,EAAAC,SAAG,wBACV5jB,IAAKx6B,EAAQ06K,UACb9oK,OAAQ,WAEhB5R,EAAQi4I,aACJkiC,EAAQttG,KAAK57D,SACTwpC,OAAO,EAAA0D,EAAAC,SAAG,kBACV5jB,IAAK,oCACL5oB,OAAQ,WAEhB5R,EAAQi4I,aACJkiC,EAAQttG,KAAK57D,SACTwpC,OAAO,EAAA0D,EAAAC,SAAG,kBACV5jB,IAAKx6B,EAAQ26K,qBACb/oK,OAAQ,WAEhBlT,KAAKkH,IAAIu0K,EAKT,IAAIS,KAmCAA,GAlCCt+H,OAAO8rB,KAAK/wD,IAmCTA,GAAI,OACJojC,OAAO,EAAA0D,EAAAC,SAAG,QACV6G,IAAK,gBACLmN,SAAS,EAAAjU,EAAAC,SAAG,0BACZyuB,OAEQpyB,OAAU,EAAA0D,EAAAC,SAAG,gBAAb,IAAgC9B,OAAO8rB,KAAKxqE,IAAI,WAGhD68C,OAAO,EAAA0D,EAAAC,SAAG,eACV5jB,IAAK,SAGLigB,OAAO,EAAA0D,EAAAC,SAAG,iBACV5jB,IAAK,kBAGLigB,OAAO,EAAA0D,EAAAC,SAAG,UACV5jB,sCAAuC8hB,OAAOurB,mBAC9Cj2D,OAAQ,OACRw7D,SAAS,IAGT3yB,OAAO,EAAA0D,EAAAC,SAAG,mBACV5jB,IAAK,iBACL5oB,OAAQ,SAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,kBACV5jB,IAAK,gBACL5oB,OAAQ,SAGR6oC,OAAO,EAAA0D,EAAAC,SAAG,eACV5jB,IAAK,aACL5oB,OAAQ,UArEhB5R,EAAQ66K,qBAEJxjK,GAAI,OACJojC,OAAO,EAAA0D,EAAAC,SAAG,qBACV6G,IAAK,iBACLmN,SAAS,EAAAjU,EAAAC,SAAG,iCACZyuB,OAEQpyB,OAAO,EAAA0D,EAAAC,SAAG,SACV5jB,IAAK,aACL5oB,OAAQ,cACRkpK,eAAe,IAGfrgI,OAAO,EAAA0D,EAAAC,SAAG,YACV5jB,IAAK,cACL5oB,OAAQ,cACRkpK,eAAe,MAMvBzjK,GAAI,OACJojC,OAAO,EAAA0D,EAAAC,SAAG,SACV6G,IAAK,iBACLmN,SAAS,EAAAjU,EAAAC,SAAG,SACZ5jB,IAAK,aACL5oB,OAAQ,cACRkpK,eAAe,GA6C3Bp8K,KAAKkH,IAAIg1K,EACT,IAAIG,GAAar8K,KAAKd,IAAIoC,EAAQg7K,YAElC,OADAD,IAAcA,EAAWz5K,IAAI,UAAU,IAChC,GAAIxC,GAAOqQ,UAAWhT,UAAUC,aAK3C6pK,EAAMx2H,EAASuG,KAAKnvC,QACpB2rC,WAAY,SAASxyC,GACjBtB,KAAK0xC,MAAQpwC,EAAQowC,MACrB1xC,KAAK63C,WAAW73C,KAAKupD,aACrBvpD,KAAKm/G,UAAYn/G,KAAK+jC,EAAE,aACxB/jC,KAAKu8K,QAAUv8K,KAAK+jC,EAAE,oBACtB/jC,KAAK2xE,MAAQ3xE,KAAK+jC,EAAE,kBACpB/jC,KAAKw8K,MAAQx8K,KAAK+jC,EAAE,kBACpB/jC,KAAKoyC,SAASpyC,KAAK0xC,MAAO,SAAU1xC,KAAKwwC,OAAQxwC,OAGrD+H,QACI00K,yBAA0B,gBAG9BjsI,OAAQ,WACJ,GAAIjnC,GAAOvJ,IAqDX,OApDA+jC,GAAE,YAAYh6B,SACd/J,KAAK23C,IAAI/0B,KAAK,KAAM5iB,KAAK0xC,MAAM/4B,IAAItV,KAC/BywB,WAAa9zB,KAAK0xC,MAAMxyC,IAAI,YAAc,WAAc,WAE5Dc,KAAK0xC,MAAM9uC,IAAI,MAAO5C,KAAK08K,WAAW18K,KAAK0xC,MAAMxyC,IAAI,SACrDc,KAAKw8K,MACA/yK,KAAKzJ,KAAK0xC,MAAMxyC,IAAI,SAAW,IAC/Bo6B,cACAL,SAAS,iBACTA,SAASj5B,KAAK0xC,MAAMxyC,IAAI,aACxBmE,KACGkH,QAAUvK,KAAK0xC,MAAMxyC,IAAI,cAAgB,SAAY,SAE7Dc,KAAKu8K,QACA9yK,KAAKzJ,KAAK0xC,MAAMxyC,IAAI,UAAY,IAChCo6B,cACAL,SAAS,mBACTA,SAASj5B,KAAK0xC,MAAMxyC,IAAI,QACxB+5B,SAASj5B,KAAK0xC,MAAMxyC,IAAI,SAAf,oBAA8Cc,KAAK0xC,MAAMxyC,IAAI,SACtE+5B,SAASj5B,KAAK0xC,MAAMxyC,IAAI,WAAa,UACrC0jB,KAAK,SAAU5iB,KAAK0xC,MAAMxyC,IAAI,WAC9B0jB,KAAK,OAAQ5iB,KAAK0xC,MAAMxyC,IAAI,QAC5B0jB,KAAK,QAAS5iB,KAAK0xC,MAAMxyC,IAAI,YAC7Bw0D,QAAQ,WACb1zD,KAAK0xC,MAAMxyC,IAAI,YAAcc,KAAKu8K,QAAQ7oH,SAAUqd,UAAW,WAC/D/wE,KAAKm/G,UACA7lF,cACAL,SAAS,YACTA,SAASj5B,KAAK0xC,MAAMxyC,IAAI,aAAe,YACvC+5B,SAASj5B,KAAK0xC,MAAMxyC,IAAI,WAAa,UACtCc,KAAK0xC,MAAMxyC,IAAI,SAAWc,KAAK0xC,MAAMxyC,IAAI,cACzCc,KAAK2xE,MAAMtkE,OACX02B,EAAE,cACG12B,OACAvG,MACAP,GAAG,QAAS,WACTw9B,EAAE,cAAcj0B,OAChBvG,EAAKmoC,MAAM9uC,IAAI,aAAa,OAGpC2G,EAAKooE,MAAM7hE,OACXi0B,EAAE,cAAcj0B,QAEpB9P,KAAK2xE,MAAMtiE,QAAQiqB,YAAY,iBAC3Bt5B,KAAK0xC,MAAMxyC,IAAI,UACfwC,EAAEH,KAAKvB,KAAK0xC,MAAMxyC,IAAI,QAAS,SAAAy9K,GAC3BpzK,EAAKooE,MAAMlgD,OAAOloB,EAAKqzK,eAAeD,IACtCA,EAASjuG,SAAWnlE,EAAKooE,MAAMlgD,OAAOsS,EAAE,SAAS9K,SAAS,cAE9D1vB,EAAKooE,MAAM14C,SAAS,iBACpB1vB,EAAKgzK,QAAQ9qJ,OAAOsS,EAAE,QAAQ9K,SAAS,WAEpCj5B,MAIX48K,eAAgB,SAASt7K,GACrB,GAAIiI,GAAOvJ,IAQX,OAPAsB,GAAUI,EAAE2rC,SAAS/rC,OACjBy6C,MAAO,GACPjgB,IAAK,GACL5oB,OAAQ,UACRkpK,eAAe,IAEnB96K,EAAQw6B,IAAMvyB,EAAKmzK,WAAWp7K,EAAQw6B,KAC/BiI,EAAE,SAAStS,OACdsS,EAAE,QACGnhB,KAAK,OAAQthB,EAAQw6B,KACrBlZ,KAAK,SAAUthB,EAAQ4R,QACvBzJ,KAAKnI,EAAQy6C,OACbx1C,GAAG,QAAS,SAAA1J,GACTA,EAAE4xB,iBACFllB,EAAKmoC,MAAM9uC,IAAI,aAAa,GACxBtB,EAAQsvD,QACRtvD,EAAQsvD,UAERhT,OAAOia,MAAM3wD,IAAI5F,OAOrCu7K,aAAc,SAAShgL,GACnB,GAAI0M,GAAOvJ,KACP0xC,EAAQ1xC,KAAK0xC,KAMjB,IALA70C,EAAE4xB,iBACFsV,EAAE,YAAYj0B,OACd4hC,EAAMxhB,QAAQ,WAAY,SAAAzxB,GACtBizC,EAAM/4B,KAAOla,EAAEka,IAAMla,EAAES,IAAI,SAAWT,EAAEmE,IAAI,aAAa,KAExD8uC,EAAMxyC,IAAI,YAMR,IACM49K,GAAT,SAAmBjxH,EAAO/vB,GACtB,MAAOiI,GAAE,UACJtS,OACGsS,EAAE,QACGnhB,KAAK,OAAQg7B,OAAO/4B,KAAOiX,GAC3BryB,KAAKoiD,IAEbpiD,OAETzJ,MAAKu8K,QAAQn/C,SAAWp9H,KAAKu8K,QAAQn/C,QAAQ,WAC7Cp9H,KAAKu8K,QACAn/C,SACG3zH,MAAM,EACNsnE,UAAW,SACX3pE,kBAAmB01K,EAAU,QAAS,8BAAtC,OAA0EA,EACtE,WACA,+BAFJ,0BAKH1/C,QAAQ,QACb7+H,WAAW,WACPgL,EAAKgzK,QAAQn/C,QAAQ,YACtB,SA5BE1rF,GAAMxyC,IAAI,QAGXwyC,EAAM9uC,IAAI,aAAa,GAFvB8uC,EAAMxyC,IAAI,WAAawyC,EAAMxyC,IAAI,aAAe0+C,OAAOia,MAAM3wD,IAAIwqC,EAAMtyB,aAgCnFs9J,WAAY,SAAS5gJ,GACjB,MAAqB,gBAAPA,KAA0C,IAAvBA,EAAI76B,QAAQ,OAAiC,KAAjB66B,EAAIgf,OAAO,GAAY8C,OAAO/4B,KAAOiX,EAAMA,GAI5GytB,UAAW,WACP,MACI,kJpEonvCZhuD,GAAQmkD,SoExmvCJjK,WAAYA,EACZ8xH,IAAKA,KpE2mvCoB5rK,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIjI,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,GAE/CxnC,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GqElkwCX,IAAA+8C,GAAA7qD,EAAA,GrEukwCI8qD,EAEJ,SAAgC/lD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,IAFhD8lD,GqEtkwCnCu1H,EAAiBzqI,EAASuG,KAAKnvC,QAC/B2rC,WAAY,WACR9zC,KAAK43D,MAAQ,MAIjBmlH,gBAAiB,SAASlgL,GAEtB,GAAI8hC,GAAO9iC,OAAO+hD,OAAO2B,OAAO+sB,0BAE5BC,EAAO1wE,OAAO+hD,OAAO2B,OAAOitB,0BAC5BhsC,EAAW6O,OAAOxzC,OAAO+hD,OAAO8rB,KAAKtqD,WAAWohB,UAEhDw8I,EAAiC3tI,OAAOxzC,OAAO+hD,OAAO2B,OAAOy9H,gCAE7DC,eAA4Bz8I,EAA5B,mCAAuEw8I,EAEvE3+K,EAASsgC,EAAT,IAAiB4tC,EAAO0wG,EACxBC,EAAwB,KACxBC,EAAsB,KAEtBC,gEAAgF/+K,EAAhF,cA2DJ,OA/CI0lC,GAAE,eAAe3nC,OAAS,GAC1B2nC,EAAE,eAAeh6B,SAGrByxK,EAAe5jH,MAAQ,GAAI1R,GAAAxG,QAAMpI,MAC7BhtC,KAAM8yK,EACNjvK,OAXe,IAYfjD,MAXc,IAYd+9C,gBAAgB,EAChBE,iBAAiB,EACjB5C,IAbc,wBAiBlBi1H,EAAe5jH,MAAMvqD,OACrB6vK,EAAwBn5I,EAAE,6BAC1Bo5I,EAAsBp5I,EAAE,2BAExBm5I,EAAsBjkJ,SAAS,qBAC/BkkJ,EAAoBlkJ,SAAS,qBAC7BikJ,EAAsBj/J,KAAK,MAAMlU,SACjCmzK,EAAsB/kJ,WAAW,6BACjC+kJ,EAAsBzrJ,OA/BlB,uPAiCJsS,EAAE,gBAAgB3T,MAAM,SAAAvzB,GACpBknC,EAAE,eAAe1gC,IAAI,UAAW,UAGpC0gC,EAAE,0BAA0B3T,MAAM,SAAAvzB,GAC1BknC,EAAE,0BAA0BrK,SAAS,cACrCqK,EAAE,6BAA6B74B,MAAM,UACrC64B,EAAE,2BAA2B51B,OAAO,SACpC41B,EAAE,0BACGzK,YAAY,aACZL,SAAS,eACd8K,EAAE,0BAA0BnhB,KAAK,QAAS,YAC1CmhB,EAAE,0BAA0B1gC,IAAI,cAAe,WAE/C0gC,EAAE,6BAA6B74B,MAASmyK,SACxCt5I,EAAE,2BAA2B51B,OAAUmvK,SACvCv5I,EAAE,0BACGzK,YAAY,eACZL,SAAS,aACd8K,EAAE,0BAA0BnhB,KAAK,QAAS,YAC1CmhB,EAAE,0BAA0B1gC,IAAI,cAAe,YAGhDrD,MAIXwwC,OAAQ,WACJ,GAAIjnC,GAAOvJ,IASX,QANI2Y,GAAI,mBACJuyC,KAAM,eACNwI,QAAS,cACTp0B,SAAS,EACTsxB,QAASrnD,EAAKwzK,mBrEwkwC1BxhL,GAAQmkD,SqEjkwCJ87H,eAAgBA,KrEokwCS7/K,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUrvC,EAAGqiC,GA0BlD,QAASsc,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAxBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GsElrwCX,IAAAmrD,GAAAj5D,EAAA,ItEurwCImiL,EAAal9H,EAAuBgU,GsEtrwCxCppC,EAAA7vB,EAAA,ItE0rwCIs9D,EAASrY,EAAuBp1B,GsEzrwCpCuyJ,EAAApiL,EAAA,ItE6rwCIqiL,EAAkBp9H,EAAuBm9H,GsE5rwC7CE,EAAAtiL,EAAA,KtEgswCIuiL,EAAct9H,EAAuBq9H,GsE/rwCzC/9H,EAAAvkD,EAAA,GtEmswCIqkD,EAAiBY,EAAuBV,EAI5CpkD,GAAQmkD,QsEtswCO3O,EAASuG,KAAKnvC,QACzB2rC,WAAY,SAASxyC,GACjB,GAAIiI,GAAOvJ,IACXsB,GAAUA,MACVtB,KAAKwrK,OAAS,GAAI+R,GAAA79H,QAAOpI,MAAOhY,SAAS,IACzCt/B,KAAK63C,WAAW73C,KAAKwrK,OAAO7zH,KAC5B33C,KAAK49K,aAAet8K,EAAQmH,WAAWvB,KACnCyR,GAAI,qBACJuyC,KAAM,QACNwI,SAAS,EAAAjU,EAAAC,SAAG,8BACZkR,QAAS,WACLrnD,EAAKoyB,QAAUpyB,EAAKoyB,OACpBpyB,EAAKq0K,aAAah7K,KACdgM,OAAQrF,EAAKoyB,OACbkiJ,UAAWt0K,EAAKoyB,OAChBmiJ,SAAUv0K,EAAKoyB,QAAU,iBAE5BpyB,EAAKoyB,QAAUpyB,EAAKiiK,OAAO17J,QAEhCq4D,eAAgB,WACZ,GAAI5+D,EAAKiiK,OAAOpvK,SAAW,EACvB,oBAAqBmN,EAAKiiK,OAAOpvK,SAAjC,mCAIZ4D,KAAK+9K,WAAaz8K,EAAQmH,WAAWvB,KACjCyR,GAAI,mBACJuyC,KAAM,SACNwI,SAAS,EAAAjU,EAAAC,SAAG,yBACZm+H,WAAW,EACXv+I,SAAS,EACTsxB,QAAS,SAAS/zD,GACd0M,EAAKiiK,OAAOlsI,QAAU/1B,EAAKiiK,OAAO17J,OAASvG,EAAKiiK,OAAOn+J,UAG/DrN,KAAKwrK,OACAjlK,GAAG,aAAc,WACdvG,KAAKs/B,SAA4B,GAAjBt/B,KAAK5D,UAAiB4D,KAAK8P,OAC3CvG,EAAKw0K,WAAWn7K,KACZq/D,KAAMjiE,KAAK5D,SACXkjC,QAASt/B,KAAK5D,SAAW,MAGhCmK,GAAG,aAAc,WACdgD,EAAKw0K,WAAWn7K,KACZgM,OAAQ5O,KAAKs/B,QACb4rB,KAAOlrD,KAAKs/B,SAAW,UAAa,mBAGhDt/B,KAAKg+K,kBAITC,WAAY,SAASxmH,GACjB,GAAIluD,GAAOvJ,KACPk+K,EAAkB,IACtB,IAAItgI,QAAUA,OAAOgR,iBAAkB,CACnC,GAAImvF,GAAangG,OAAOgR,iBAAiBnmD,WAAW01K,SACpDn+K,MAAKg+K,cAAcjgC,IACfn/I,KAAMg/C,OAAOgR,iBAAiBld,MAAMxyC,IAAI,QACxCk/K,gBAEJxgI,OAAOgR,iBAAiBnmD,WAAWlH,KAAK,SAAAmwC,IACnCA,EAAMxyC,IAAI,YACPwyC,EAAMxyC,IAAI,YACVqK,EAAKy0K,cAAcjgC,GAAYqgC,YAAY9hL,KAAKo1C,EAAMxyC,IAAI,SAGtE,GAAIm/K,GAAe,SAAC1iH,EAAS35B,GACzB,GAAI25B,EAAS,CACT,GAAI2iH,GAAkB/0K,EAAKy0K,cAAcriH,EAAQz8D,IAAI,cACrD,IAAIo/K,GAAmBA,EAAgBF,YAAa,CAChD,GAAIG,GAAeD,EAAgBF,YAC/B12J,EAAM62J,EAAat9K,QAAQ06D,EAAQz8D,IAAI,MAC3C,KAAa,IAATwoB,GAAcA,EAAMsa,GAAU,GAAKta,EAAMsa,EAASu8I,EAAaniL,OAC/D,MAAOmiL,GAAa72J,EAAMsa,MAKtCw8I,EAAqB,SAAC7iH,EAAS35B,EAAQ61B,GACvC,GAAI4mH,GAAiBJ,EAAa1iH,EAAS35B,EACvCy8I,GACAl1K,EAAKm1K,aAAaD,EAAgB,SAACE,EAAap/H,GAC5C2+H,EAAkBS,EAClB9mH,EAAMnmB,MAAM9uC,IAAI28C,KAGpBsY,EAAMnmB,MAAMxhB,QAAQ,UAG5BlwB,MAAK0+K,aAAajnH,EAAY,SAACkE,EAASpc,GACpC2+H,EAAkBviH,EAClBpyD,EAAKrC,IACDxF,EAAEyG,QAEMgmE,OAEQjjB,KAAM,4BACNwI,QAAS,sBACT9C,QAAS,SAASiH,GACd2mH,EAAmBN,GAAkB,EAAGrmH,IAE5C1yC,SAAU,WACN,OAAQk5J,EAAaH,GAAkB,MAI3ChzH,KAAM,6BACNwI,QAAS,kBACT9C,QAAS,SAASiH,GACd2mH,EAAmBN,EAAiB,EAAGrmH,IAE3C1yC,SAAU,WACN,OAAQk5J,EAAaH,EAAiB,OAKtD3+H,OAMhBm/H,aAAc,SAASjnH,EAAY9uD,GAC/B,GAAIY,GAAOvJ,KACP27D,EAAU,GAAIjD,GAAAhZ,QAAK+U,SAAU97C,GAAI8+C,GACrC1zB,GAAExa,KAAKoyC,EAAQ7mB,SAAS/rB,KAAK,WACzB,GAAI61J,GAAal9K,EAAEuc,MACd,UAAW,YACZ,SAAA67C,GAAA,OAA8D,IAAjD6B,EAAQz8D,IAAI,aAAa+B,QAAQ64D,KAE9C/d,EAAQ4f,EAAQz8D,IAAI,QACpBo/K,EAAkB/0K,EAAKy0K,cAAcriH,EAAQz8D,IAAI,cACjDo/K,KACAviI,EAAWuiI,EAAgB1/K,KAA3B,KAAoCm9C,GAExCpzC,EACIgzD,EACAijH,GAEU7iI,MAAOA,EACPjgB,IAAK,KACL10B,QAASsxD,EAAAhZ,QAAK6Y,iCACV7mB,MAAO,GAAIgnB,GAAAhZ,QAAKqV,eAAe4G,EAAQ7qB,UACvCyd,UAAU,EACVpgD,OAAQ,SACTwpC,MAGHoE,MAAOA,EACPjgB,IAAQ8hB,OAAO/4B,KAAf,YAA+B4yC,EAA/B,yBACArwD,QAAS,UAO/By3K,aAAc,SAASC,GACnB,GAAIv1K,GAAOvJ,KACP++K,EAAM,GAAItB,GAAA/9H,QAAcgjB,eAAgB/pD,GAAImmK,GAChD/6I,GAAExa,KAAKw1J,EAAIjqI,SAAS/rB,KAAK,WACrB,GAAIg+F,GAAK,GAAI42D,GAAAj+H,QAAUs/H,YAAYphI,OAAO/4B,MAGtCo6J,GACAljI,MAAOgjI,EAAI7/K,IAAI,QACflB,KAAM,QACNoJ,QAAS,SAASqxD,GAEd,GAAIymH,IACArsJ,UAAW4lC,EACX75D,KAAMmgL,EAAI7/K,IAAI,SACdyZ,GAAIomK,EAAIpmK,GAERynD,MAAO2+G,EAAI7/K,IAAI,SACfigL,aAAa,GAGbC,EAAkBL,EAAI7/K,IAAI,mBAC1B2jE,EAAYu8G,EAAgB7/H,OAAOjtB,KAAKuwC,SAG5CnhE,GAAEH,KAAKshE,EAAW,SAAAlkE,GACdA,EAAEg9D,SACEjH,SAAU/1D,EAAE+1D,SACZ/7C,GAAIha,EAAE84D,cAGdnlC,KAAOy0F,EAAGs4D,qBACNH,EACAE,EAAgB7/H,OAAOwjB,SACvBq8G,EAAgB7/H,OAAOjtB,KAAKuwC,UAC5Bu8G,EAAgB7/H,OAAOujB,WACvB,IAIZv5D,GAAKrC,IAAI+3K,MAKjB/3K,IAAK,SAAS5F,GACV,GAAsB,UAAlBA,EAAQ4R,OACRrX,OAAO0kC,KAAKj/B,EAAQw6B,SACjB,IAAsB,QAAlBx6B,EAAQ4R,QAAsC,WAAlB5R,EAAQ4R,QAAyC,SAAlB5R,EAAQ4R,OAC1ErX,OAAO+oB,SAAWtjB,EAAQw6B,QACvB,KAAK97B,KAAK27B,QAAUr6B,EAAQ86K,cAAe,CAC9C,GAAIkD,GAAev7I,EAAEloC,OAAOqlB,OAAOrjB,UAAUogB,KAAK,eAC5B,gBAAlB3c,EAAQ4R,QAA6C,UAAlB5R,EAAQ4R,OACf,IAAxBosK,EAAaljL,OACbP,OAAO+oB,SAActjB,EAAQw6B,MAAoC,GAA7Bx6B,EAAQw6B,IAAI76B,QAAQ,KAAa,IAAM,KAA3E,kBAEAq+K,EAAa18J,KAAK,MAAOthB,EAAQw6B,KAElCjgC,OAAO+oB,SAAWtjB,EAAQw6B,QAEjC97B,MAAKwrK,OAAOtkK,IAAI5F,QtEkrwCC3F,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUrvC,EAAGqiC,GAElDxnC,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,IAKX3N,EAAQmkD,QuEh6wCO3O,EAAS2C,MAAMvrC,QAC1BklC,UACI8gB,SAAU,GACVjwD,OAAO,EACPqhL,aACAC,uBACAt5J,WACAu5J,SAAU,KACVC,sBAAsB,EACtBjtH,iBAAiB,EACjBX,SAAU,EACV6tH,UAAW,EACXxvH,cAAW7yD,GACX20D,aAAU30D,IAMdg1D,aAAc,SAASsV,GACnB,OAAqD,IAA9ClmE,EAAET,QAAQjB,KAAKof,WAAWmgK,UAAW33G,IAMhD7W,WAAY,SAAS5uD,EAAK+G,EAAOuoB,GAE7B,GAAIA,EAAQ,CAER,GAEIw1B,GAFA24H,EAAU5/K,KAAKof,WAAW8G,QAAQ/jB,EAGtC,IAAgB,OAAZy9K,OAAgCtiL,KAAZsiL,EACpB34H,EAAU/9C,MACP,IAAsB,gBAAX02K,GACd,GAAe,OAAXA,GAAoBA,GAAW12K,EAC/B+9C,EAAU/9C,MACP,CAEH,GAAIqE,KACJA,GAAO,GAAKqyK,EACZryK,EAAO,GAAKrE,EACZ+9C,EAAU15C,MAId05C,GAAU24H,GACsB,IAA5B34H,EAAQhmD,QAAQiI,IAChB+9C,EAAQ3qD,KAAK4M,EAGrBlJ,MAAKof,WAAW8G,QAAQ/jB,GAAO8kD,MAG/BjnD,MAAKof,WAAW8G,QAAQ/jB,GAAO+G,GAOvCgoD,cAAe,SAAS/uD,EAAK09K,GACzB,GAAID,GAAU5/K,KAAKof,WAAW8G,QAAQ/jB,EACtC,IAAgB,OAAZy9K,OAAgCtiL,KAAZsiL,EACpB,OAAO,CAGX,IAAuB,gBAAZA,GAEP5/K,KAAKof,WAAW8G,QAAQ/jB,GAAO,OAC5B,CAEH,GAAI29K,GAAkBp+K,EAAET,QAAQ2+K,EAASC,IAChB,IAArBC,IACAF,EAAQE,GAAmB,MAQvCztH,aAAc,WACV,GAAIhE,IACAnwD,MAAO8B,KAAKof,WAAWlhB,MACvBkY,KAAMpW,KAAKof,WAAWqgK,SACtBz8F,KAAMhjF,KAAKof,WAAW0yC,SACtB4tH,qBAAsB1/K,KAAKof,WAAWsgK,qBACtCjtH,gBAAiBzyD,KAAKof,WAAWqzC,gBAIjCzyD,MAAKof,WAAW+wC,YAChB9B,EAAS8B,UAAYnwD,KAAKof,WAAW+wC,WAErCnwD,KAAKof,WAAW6yC,WAChB5D,EAAS11C,GAAK3Y,KAAKof,WAAW6yC,SAIlC,IAAI1oD,GAAOvJ,IAIX,OAHA0B,GAAEH,KAAKG,EAAEkrC,MAAMrjC,EAAK6V,WAAW8G,SAAU,SAAAooC,GACrCD,OAAcC,EAAE,IAAQA,EAAE,KAEvBD,GAIX0xH,QAAS,SAASr3K,GACd,MAAU1I,MAAKd,IAAI,YAAnB,IAAkC6kC,EAAEnF,MAAM5+B,KAAKqyD,gBAA/C,IAAkEtuB,EAAEnF,MAAMl2B,QvEm6wCrD/M,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAASgF,EAAQsB,GAE7CnF,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GwE7hxCX,IAAAo8C,GAAAlqD,EAAA,GxEkixCIiyD,EAEJ,SAAgCltD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,IAFlDmlD,EAKrC/pD,GAAQmkD,SwEnixCJkO,KAAM,SAAStsD,GACX,GAAI0+K,GAAO,EAiBX,OAfIA,GADA1+K,EAAQitD,SACDvuD,KAAKigL,YAAY3+K,GAAWtB,KAAKkgL,WAAW5+K,GAEnD0+K,qEAA4EhgL,KAAKigL,YAC7E3+K,GADJ,uHAEwHtB,KAAKkgL,WACzH5+K,GAKJA,EAAQ6+K,YACRH,0DAA+D1+K,EAAQ6+K,UAAvE,UAIGH,GAIXE,WAAY,SAAS5+K,GACjB,MACI,oNAWR2+K,YAAa,SAAS3+K,GAClB,GAAI0+K,GAAO,2BAIX,IAHK1+K,EAAQitD,WACTyxH,UAAe1+K,EAAQy6C,MAAvB,SAEAz6C,EAAQ8+K,eAAgB,CACxBJ,GAAQ,mCACR,IAAIK,GAAa/+K,EAAQ8+K,eAAehkL,QAAU,CAC9CikL,KACAL,GACI,mIAGR,KAAK,GAAIvkL,KAAK6F,GAAQ8+K,eAAgB,CAClC,GAAInlG,GAAS35E,EAAQ8+K,eAAe3kL,EACpCukL,uDAA2D/kG,EAAO/nE,OAAlE,WACI+nE,EAAOxqB,SADX,8BAE8BwqB,EAAOpvB,MAFrC,YAIAw0H,IACAL,GAAQ,UAEZA,GAAQ,QAWZ,MATI1+K,GAAQ6wB,SACR6tJ,GAAQ1+K,EAAQ6wB,QAIpB6tJ,GAAQhgL,KAAKsgL,aAAah/K,GAC1B0+K,GAAQ,UAOZ36J,OAAQ,SAAS/jB,GAEb,GAAI0+K,GAAO,MAGP1+K,GAAQo+K,uBACRM,GAAQ,OACJ1+K,EAAQ8sD,MAAMhyD,OAAS,IACvB4jL,GACI,2IAGRA,GAAQ,QAIZ,KAAK,GAAIvkL,KAAK6F,GAAQi/K,QAAS,CAC3B,GAAIC,GAASl/K,EAAQi/K,QAAQ9kL,EACzB+kL,GAAOlhJ,UACP0gJ,cAAmBQ,EAAOr+K,IAA1B,YACIq+K,EAAOx7J,KACPg7J,eAAoBQ,EAAOx7J,KAA3B,iCAAgEw7J,EAAOr+K,IAAvE,KAA+Eq+K,EAAO30H,MAAtF,OAEAm0H,GAAQQ,EAAO30H,MAEnBm0H,+BAAoCQ,EAAO/zK,MAA3C,gBAQR,MAHAuzK,IAAQ,SAOZ11K,KAAM,SAAShJ,GAEX,GAAI0+K,GAAO,GACPS,EAAoB,CAIJ,IAHDn/K,EAAQ8sD,MAAMhyD,SAK7B4jL,GAAQ,oDACRS,EAAoB,EAIxB,KAAK,GAAIhlL,KAAK6F,GAAQ8sD,MAAO,CAEzB,GAAItpB,GAAOxjC,EAAQ8sD,MAAM3yD,GACrBilL,EAAa57I,EAAK+rB,SAItBmvH,IAAQ,OACJ1+K,EAAQq/K,iBAAmB77I,EAAKnsB,KAChCqnK,GAAQ,mBAEZA,GAAQ,IAGJ1+K,EAAQo+K,uBACRM,wEAA6EU,EAA7E,SACIA,EADJ,6CAMJ,KAAK,GAAIz7K,KAAK3D,GAAQi/K,QAAS,CAC3B,GAAIC,GAASl/K,EAAQi/K,QAAQt7K,EAC7B,IAAIu7K,EAAOlhJ,QAAS,CAEhB,GAAIshJ,GAAS,EACTJ,GAAOI,SACPA,EAAS,8BAIb,IAAIC,GAAkB/7I,EAAKg8I,cAAcN,EAAO30H,OAG5C0gH,EAAOsU,EAAgBtU,KACvBrjK,EAAQ23K,EAAgB33K,MACxBgK,EAAS2tK,EAAgB3tK,MAGF,YAAvB9S,EAAOpC,KAAKkL,KACZA,EAAQA,EAAM7G,QAAQ,QAAS,KAInC,IAAIsW,GAAK,GACL4tC,EAAM,EACNi6H,GAAOO,eACPpoK,UAAald,EAAb,SACA8qD,EAAM,aACM,IAARgmH,IACAhmH,GAAO,UAEXA,GAAO,UAIXy5H,UAAeY,EAAf,IAGIrU,GACiC,GAA7BjrK,EAAQ2rD,WAAW7wD,SACnB4jL,eAAoBrnK,EAApB,YAAkC4tC,EAAlC,2BAEJy5H,qDAA0D9sK,EAA1D,WACIq5J,EADJ,6BAE6BrjK,EAF7B,OAGiC,GAA7B5H,EAAQ2rD,WAAW7wD,SACnB4jL,GAAQ,WAGZA,eAAoBrnK,EAApB,YAAkC4tC,EAAlC,gBAAqDi6H,EAAOQ,gBACxDN,EADJ,UAEUA,EAFV,MAEyBx3K,GAAS,IAFlC,iBAIJ82K,GAAQ,SAGhBA,GAAQ,QACRS,IAEJ,MAAOT,IAIXjxH,OAAQ,SAASztD,GAEb,GAAI0+K,GAAO,EAGX,IAAI1+K,EAAQ2/K,YAAc3/K,EAAQq+K,UAAY,EAAG,CAE7C,GAAIuB,GAAiB5/K,EAAQ4/K,eACzBC,EAAe7/K,EAAQ6/K,aACvBxB,EAAYr+K,EAAQq+K,UAGpByB,EAAkBF,EAAiB,EACnCG,EAAWF,EAAeC,EAC1BE,EAAa,CACbD,IAAY,IAEZA,EAAW,EACXC,EAAaF,GAAmBD,EAAeE,GAInD,IAEIE,GAFAC,EAAYJ,EAAkBE,EAC9BG,EAAWN,EAAeK,CAE1BC,IAAY9B,EAEZ4B,EAAa,GAGbE,EAAW9B,EAEX4B,EAAaC,GAAaC,EAAW,EAAIN,IAK3B,GAAdI,IACAF,GAAYE,GACG,IACXF,EAAW,GAKnBrB,GAAQ,2BACJ1+K,EAAQo+K,uBACRM,GAAQ,aAEZA,GAAQ,yDAEJqB,EAAW,IACXrB,GACI,+HAIR,KAAK,GAAI0B,GAAaL,EAAUK,EAAaD,EAAW,EAAGC,IACnDA,GAAcpgL,EAAQ6/K,aACtBnB,0DAA+D0B,EAA/D,KAA8EA,EAA9E,UAEA1B,4CACI0B,EADJ,qEAEqEA,EAFrE,KAGIA,EAHJ,aASJD,GAAW9B,IACXK,+CACIL,EADJ,qEAEqEA,EAFrE,KAGIA,EAHJ,eAMJK,GAAQ,UAGRA,GACI,wJAMR,GAAI1+K,EAAQo+K,qBAAsB,CAE9BM,GACI,6JAOJ,KAAK,GAAIvkL,KAAK6F,GAAQ2rD,WAAY,CAC9B,GAAIkD,GAAY7uD,EAAQ2rD,WAAWxxD,EAC/B00D,GAAUwxH,iBACV3B,kCACI7vH,EAAUtE,MADd,mDAORm0H,GAAQ,aAIZ,GAAI4B,IAAe,CACnB,KAAKnmL,IAAK6F,GAAQ2rD,WACd,GAAI3rD,EAAQ2rD,WAAWxxD,GAAGomL,iBAAkB,CACxCD,GAAe,CACf,OAKR,GAAIA,EAAc,CACd5B,GAAQ,wBACR,KAAKvkL,IAAK6F,GAAQ2rD,WAAY,CAC1B,GAAIkD,GAAY7uD,EAAQ2rD,WAAWxxD,EAC/B00D,GAAU0xH,mBACV7B,qCAA0C7vH,EAAU0xH,iBAApD,KAAyE1xH,EAAUtE,MAAnF,QAGRm0H,GAAQ,aASZ,MALI1+K,GAAQwgL,SACR9B,4BAAiC1+K,EAAQwgL,OAAzC,cAIG9B,GAIX15H,QAAS,SAAShlD,GACd,GAAIw7B,GAASx7B,EAAQw7B,MAIrB,QAH0C,IAArC,UAAW,MAAM77B,QAAQ67B,KAC1BA,EAAS,QAEb,kBAAyBA,EAAzB,8BAA6Dp7B,EAAE2tC,OAC3D/tC,EAAQglD,SADZ,6CAMJg6H,aAAc,SAASh/K,GAEnB,GAAIygL,GAAsBzgL,EAAQygL,oBAC9B77J,EAAU5kB,EAAQ4kB,QAGlB87J,EAA0B,MAC1B1gL,GAAQmxD,kBACRuvH,EAA0B,QAI9B,IAAIC,IAA4B,CAChC,KAAK,GAAIxmL,KAAK6F,GAAQi/K,QAAS,CAC3B,GAAIC,GAASl/K,EAAQi/K,QAAQ9kL,EAC7B,IAAyB,YAArB+kL,EAAO0B,WAA0B,CACjC,GAAI3yH,GAAaixH,EAAOr+K,IACpBggL,EAAQj8J,EAAQqpC,GAChB6yH,EAAQL,EAAoBxyH,EAC5B4yH,IAASC,GAASD,GAASC,IAC3BJ,EAA0B,SAE9BC,GAA4B,GAKpC,GAAII,GAA0B,OACC,UAA3BL,IACAK,EAA0B,OAM9B,IAAIrC,gDACAqC,EADA,+CAKJ,KAAK,GAAI5mL,KAAK6F,GAAQi/K,QAAS,CAC3B,GAAIC,GAASl/K,EAAQi/K,QAAQ9kL,EACJ,aAArB+kL,EAAO0B,aACPlC,GAAQhgL,KAAKsiL,mBAAmBhhL,EAASk/K,IAKjDR,GAAQ,6BAGJiC,IACAjC,GAAQ,iEAIZA,GAAQ,2BAKRA,gDACIgC,EADJ,iLAKA,KAAK,GAAIvmL,KAAK6F,GAAQi/K,QAAS,CAC3B,GAAIC,GAASl/K,EAAQi/K,QAAQ9kL,EACJ,aAArB+kL,EAAO0B,aACPlC,GAAQhgL,KAAKsiL,mBAAmBhhL,EAASk/K,IAQjD,MAHAR,IAAQ,kBAOZsC,mBAAoB,SAAShhL,EAASk/K,GAElC,GACIt6J,IADsB5kB,EAAQygL,oBACpBzgL,EAAQ4kB,SAClBq8J,EAAe/B,EAAO30H,MACtB0D,EAAaixH,EAAOr+K,GACC,aAArBq+K,EAAO0B,aACPK,EAAeA,EAAahgL,cAIhC,IAAIy9K,GAAO,MAMX,IAJyB,YAArBQ,EAAO0B,aACPlC,kDAAuDuC,EAAvD,UAEJvC,GAAQ,oCACJQ,EAAOgC,QAAS,CAChBxC,iDAAsDzwH,EAAtD,aAA6EjuD,EAAQw6B,IAArF,kBAEA,KAAKrgC,IAAK6F,GAAQi/K,QAAS,CACvB,GAAIkC,GAAcnhL,EAAQi/K,QAAQ9kL,GAC9Bk2D,EAAezrC,EAAQu8J,EAAYtgL,IACnCwvD,IACoB,OAAhBA,IACI8wH,EAAYD,UACZ7wH,EAAe72B,KAAKyd,UAAUoZ,IAElCquH,+BAAoCyC,EAAYtgL,IAAhD,aAAgEsgL,EAAYtgL,IAA5E,YACIwvD,EADJ,OAOZquH,gBAAqBzwH,EAArB,uBAGA,IAAImzH,GAAgBx8J,EAAQqpC,EAC5B,IAAImzH,EAAe,CAEf,GAAI1kL,GAAOoC,EAAOpC,KAAK0kL,EAWvB,IARY,UAAR1kL,GACqB,OAAjB0kL,IAEA1C,GAAQhgL,KAAKgxD,eAAezB,EAAYmzH,IAKpC,SAAR1kL,EACA,IAAK,GAAIvC,KAAKinL,GAAe,CAEzB,GAAI1hL,GAAS0hL,EAAcjnL,GAGvBqmC,EAAS4gJ,CACb5gJ,GAASA,EAAO71B,MAAMxQ,GAGtBukL,GAAQhgL,KAAKgxD,eAAezB,EAAYvuD,IAMpDg/K,GAAQ,SAGR,IAAI92K,GAAQ,EACZ,IAAyB,YAArBs3K,EAAO0B,WAA0B,CACjCh5K,EAAQs3K,EAAO30H,MAAMtpD,aACrB,IAAIohC,GAAOz6B,EAAM9M,MACbunC,GAAO,KACPA,EAAO,IAGXA,GAAc,EAIlBq8I,yEAA8EzwH,EAA9E,oBACIA,EADJ,8BAE8BrmD,EAF9B,WAGIy6B,EAHJ,6JAKG,CAEHq8I,gBAAqBzwH,EAArB,uBAGA,IAAIozH,IAAY,CAChB,KAAK,GAAIC,KAAYthL,GAAQk+K,oBAAoBjwH,GAAa,CAE1D,GAAIszH,GAAKvhL,EAAQk+K,oBAAoBjwH,GAAYqzH,GAG7CE,EAAS,GACTC,EAAS,EACb,KAAK,GAAI5gL,KAAO0gL,GACZC,EAAS3gL,EACT4gL,EAASF,EAAG1gL,EAIZwgL,KACA3C,GAAQ,OAEZ2C,GAAY,CAGZ,IAAI3hL,GAASklB,EAAQqpC,EACjBvuD,IAAU6hL,EAAGtzH,IAAevuD,GAAU+hL,EACtC/C,sCAA2CzwH,EAA3C,2BAAgFqzH,EAAhF,UAEA5C,sCACIzwH,EADJ,sDAEsDuzH,EAFtD,iBAE6EC,EAF7E,KAGIH,EAHJ,cAOR5C,GAAQ,UAKZ,MAHAA,IAAQ,cAOZhvH,eAAgB,SAASgyH,EAAYrxH,GAEjC,wCADAA,EAAetE,EAAA3N,QAAM3C,SAAS4U,IAC9B,6CACIqxH,EADJ,iBAGIrxH,EAHJ,4FxE6+wCqBh2D,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,GAE/CxnC,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GyE3jyCX,IAAAo8C,GAAAlqD,EAAA,GzEgkyCIiyD,EAEJ,SAAgCltD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,IAFlDmlD,GyE/jyCjChO,EAAOvG,EAASuG,KAAKnvC,QACrB2rC,WAAY,SAASxyC,GACjB,GAAIiI,GAAOvJ,IACXA,MAAK0xC,MACApwC,GAAWA,EAAQowC,OACpB,GAAIX,GAAS2C,OACT/6B,GAAI00C,EAAA3N,QAAMz9C,MACV8iC,IAAK,KACLx4B,IAAK,KACLopB,KAAM,KACNstJ,SAAS,EACTzuK,MAAO,IACPtL,MAAO,KACPmiD,SAAU,eACXzoD,IAAItB,GAGXtB,KAAK63C,WAAW73C,KAAKupD,aACrBvpD,KAAK23C,IAAI/0B,KAAK,KAAM5iB,KAAK0xC,MAAM/4B,IAC/B3Y,KAAK4nD,MAAQ5nD,KAAK+jC,EAAE,wBACpB/jC,KAAKkjL,QAAUljL,KAAK+jC,EAAE,0BAGtB,IAAIo/I,KACJnjL,MAAK4nD,MACArhD,GAAG,SAAU,WACVgD,EAAKL,MAAM66B,EAAE/jC,MAAM4M,SAEtBrG,GAAG,QAAS,SAAA1J,GACTsmL,EAAQtmL,EAAEoR,QAAS,IAEtB1H,GAAG,UAAW,SAAS1J,GACpB,GAAIiY,GAAIjY,EAAEoR,KACVk1K,GAAQruK,IAAK,EACTvL,EAAKmoC,MAAMxyC,IAAI,gBAAkBikL,EAAQ,KAAY,IAALruK,GAChDvL,EAAKL,MAAM,KACXrC,MAAM4nB,kBAGG,GAAL3Z,GACK,GAALA,GACK,IAALA,GACK,IAALA,GACK,IAALA,GACCA,GAAK,IAAMA,GAAK,KAAOquK,EAAQ,KAC/BruK,GAAK,IAAMA,GAAK,MACV,KAALA,GAAiB,KAALA,KAGY,GAFtBivB,EAAE/jC,MACG4M,MACA3L,QAAQ,MACbsI,EAAKmoC,MAAMxyC,IAAI,aACZ,KAAL4V,GAAiB,KAALA,KAGY,GAFtBivB,EAAE/jC,MACG4M,MACA3L,QAAQ,MACjBsI,EAAK65K,aAAar/I,EAAE/jC,MAAM4M,QAC1Bu2K,EAAQ,KACRA,EAAQ,KAGZt8K,MAAM4nB,kBAKlB,IAAI9f,GAAO3O,KAAK0xC,MAAMtyB,UACtBpf,MAAKqjL,WAA0B,OAAb10K,EAAKpC,KAA6B,OAAboC,EAAKo2B,KAAgBp2B,EAAKpC,IAAMoC,EAAKo2B,GAC5E,IAAIpP,GAAOhnB,EAAKgnB,IACXA,KAEGA,EADAhnB,EAAKs0K,SAAWjjL,KAAKqjL,YACb10K,EAAKpC,IAAMoC,EAAKo2B,KAAOp2B,EAAK6F,MAE7B,GAGXxU,KAAKqjL,YACLrjL,KAAK4nD,MAAM3uB,SAAS,uBACpBj5B,KAAKkjL,QAAQI,QAASv+I,IAAKp2B,EAAKo2B,IAAKx4B,IAAKoC,EAAKpC,IAAKopB,KAAMA,IAAQpvB,GAAG,QAAS,SAACM,EAAOkgH,GAClFx9G,EAAKL,MAAM69G,EAAG79G,UAGlBlJ,KAAKkjL,QAAQpzK,OAIjB9P,KAAKoyC,SAASpyC,KAAK0xC,MAAO,SAAU1xC,KAAKwwC,OAAQxwC,MACjDA,KAAKwwC,UAGTA,OAAQ,WACJ,GAAItnC,GAAQlJ,KAAK0xC,MAAMxyC,IAAI,QAC3Bc,MAAKqjL,YAAcrjL,KAAKkjL,QAAQI,OAAO,QAASp6K,GAChDA,IAAUlJ,KAAK4nD,MAAMh7C,OAAS5M,KAAK4nD,MAAMh7C,IAAI1D,IAIjDA,MAAO,SAAS+9C,GACZ,GAAI3lD,GAAUtB,KAAK0xC,MAAMtyB,UAYzB,YAXgB9hB,KAAZ2pD,IACgB,OAAZA,GAAgC,KAAZA,GAAmBjnD,KAAKojL,aAAan8H,KACzDp4B,MAAMo4B,KAAaA,EAAU,IAC5B3lD,EAAQ2hL,UAAYh8H,EAAU36C,KAAK4xC,MAAM+I,IAC1B,OAAhB3lD,EAAQiL,MAAiB06C,EAAU36C,KAAKy4B,IAAIkiB,EAAS3lD,EAAQiL,MAC7C,OAAhBjL,EAAQyjC,MAAiBkiB,EAAU36C,KAAKC,IAAI06C,EAAS3lD,EAAQyjC,OAEjE/kC,KAAK0xC,MAAM9uC,IAAI,QAASqkD,GACxBjnD,KAAK0xC,MAAMxhB,QAAQ,UACnB5uB,EAAQ+pD,SAASpE,IAEdjnD,KAAK0xC,MAAMxyC,IAAI,UAI1BkkL,aAAc,SAASl6K,GACnB,MAAOlJ,MAAK0xC,MAAMxyC,IAAI,gBAAoD,MAAlC2hB,OAAO3X,GAAOooD,UAAU,EAAG,IAIvE/H,UAAW,WACP,MACI,4HzE2iyCZhuD,GAAQmkD,SyEliyCJpI,KAAMA,KzEqiyCmB37C,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS2oC,EAAGriC,GAcxC,QAAS2+C,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAZvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G0EhryCX,IAAAo8C,GAAAlqD,EAAA,G1EqryCIiyD,EAAUhN,EAAuBiF,G0EpryCrCK,EAAAvqD,EAAA,I1EwryCIwqD,EAAcvF,EAAuBsF,G0EvryCrCrO,EAAOsO,EAAAlG,QAAQ2wF,UAAUloI,QACzB2rC,WAAY,SAASxyC,GACjBA,EAAQtD,KAAOsD,EAAQiJ,SAAW,WAClCjJ,EAAQykH,SAA2B,YAAhBzkH,EAAQtD,KAC3B4nD,EAAAlG,QAAQ2wF,UAAU7zI,UAAUs3C,WAAWn4C,KAAKqE,KAAMsB,IAItDquI,UAAW,SAASn+E,GAEhB,GADA5L,EAAAlG,QAAQ2wF,UAAU7zI,UAAUmzI,UAAUh0I,KAAKqE,KAAMwxD,OAC/Bl0D,KAAdk0D,GAAyC,OAAdA,GAAsBxxD,KAAKujL,aAAc,CACpE,GAAIh6K,GAAOvJ,KACPuN,EAASw2B,EAAE7zB,QAAQshD,GAAaA,GAAaA,EACjD9vD,GAAEH,KAAKgM,EAAQ,SAAAuH,GACX,GAAIkK,GAAOzV,EAAKg6K,aAAazuK,EAC7BpT,GAAEH,KAAKyd,EAAM,SAAA84B,GACTvuC,EAAKizH,UAAU1kF,GAAS,SAOxC0kF,UAAW,SAASgnD,EAAWC,GAC3B,GAAI15H,GAAU/pD,KAAK+jC,EAAL,WAAkBy/I,GAC5BE,EAAY1jL,KAAK+jC,EAAL,aAAoBy/I,EACpCz5H,GAAQ3nD,KAAK,cAAeqhL,GACxBA,GACAC,EAAUr2K,OACV08C,EAAQzwB,YAAY,kBAAkBL,SAAS,qBAE/CyqJ,EAAU5zK,OACVi6C,EAAQzwB,YAAY,mBAAmBL,SAAS,oBAKxDw1C,iBAAkB,WAKd,QAASk1G,GAAOhsI,EAAK6rI,GACjB,GAAIz5H,GAAUpS,EAAI15B,KAAJ,WAAoBulK,EAClCz5H,GAAQxjD,GAAG,QAAS,WAChBgD,EAAKizH,UAAUgnD,GAAYz5H,EAAQ3nD,KAAK,kBAKhD,QAASwhL,GAAQ5yG,EAAO1vE,EAAS+jB,GAC7BA,EAASA,KACT,KAAK,GAAI5pB,KAAK6F,GAAS,CACnB,GAAI8qE,GAAQ9qE,EAAQ7F,GAChBooL,EAAcz3G,EAAM9qE,SAAW8qE,EAAM9qE,QAAQlF,OAAS,EACtD0nL,EAAaz+J,EAAOpZ,MAAM,EAC9B1C,GAAKg6K,aAAan3G,EAAMljE,OAAS46K,EAAW73K,MAAM,EAClD,IAAI83K,GAAShgJ,EAAE,SACf,IAAI8/I,EAAa,CACb,GAAIL,GAAYn2H,EAAA3N,QAAMz9C,MAClB8nD,EAAUhmB,EAAE,WACX9K,SADS,UACUuqJ,GACnBvqJ,SAAS,yCACVyqJ,EAAY3/I,EAAE,UACb9K,SADW,YACUuqJ,GACrBvqJ,SAAS,wBACd8qJ,GAAOtyJ,OACHsS,EAAE,UACGtS,OAAOs4B,GACPt4B,OACGloB,EAAK4mI,iBACDtkF,MAAOugB,EAAMxtE,KACbsK,MAAOkjE,EAAMljE,UAI7B46K,EAAWxnL,KAAKknL,GAChBI,EAAQF,EAAWt3G,EAAM9qE,QAASwiL,GAClCC,EAAOtyJ,OAAOiyJ,GACdC,EAAOI,EAAQP,OAEfO,GAAOtyJ,OACHloB,EAAK4mI,iBACDtkF,MAAOugB,EAAMxtE,KACbsK,MAAOkjE,EAAMljE,QAIzB8nE,GAAMv/C,OAAOsyJ,IAlDrB,GAAIx6K,GAAOvJ,IACXA,MAAKujL,eAsDL,IAAIvyG,GAAQjtC,EAAE,SAEd,OADA6/I,GAAQ5yG,EAAOhxE,KAAK0xC,MAAMxyC,IAAI,SACvB8xE,GAIXznB,UAAW,WACP,MAAOxlB,GAAE,UACJ9K,SAAS,uCACTrW,KAAK,KAAM5iB,KAAK0xC,MAAM/4B,M1EkryCnCpd,GAAQmkD,S0E7qyCJpI,KAAMA,K1EgryCmB37C,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,GAoD/C,QAASsc,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAlDvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G2E9xyCX,IAAAi4C,GAAA/lD,EAAA,GAAYsG,E3Ei1yCZ,SAAiCvB,GAAO,GAAIA,GAAOA,EAAIf,WAAc,MAAOe,EAAc,IAAIogD,KAAa,IAAW,MAAPpgD,EAAe,IAAK,GAAIgC,KAAOhC,GAAW5D,OAAOC,UAAUC,eAAed,KAAKwE,EAAKgC,KAAMo+C,EAAOp+C,GAAOhC,EAAIgC,GAAgC,OAAtBo+C,GAAOb,QAAUv/C,EAAYogD,GA9ClOY,G2ElyyChC6iI,EAAA5oL,EAAA,K3EsyyCI6oL,EAAW5jI,EAAuB2jI,G2EryyCtCxG,EAAApiL,EAAA,I3EyyyCIqiL,EAAkBp9H,EAAuBm9H,G2ExyyC7ClpH,EAAAl5D,EAAA,I3E4yyCIm5D,EAAelU,EAAuBiU,G2E3yyC1C62G,EAAA/vK,EAAA,G3E+yyCI8oL,EAAuB7jI,EAAuB8qH,G2E9yyClDpyG,EAAA39D,EAAA,I3EkzyCI49D,EAAa3Y,EAAuB0Y,G2EjzyCxCzT,EAAAlqD,EAAA,G3EqzyCIiyD,EAAUhN,EAAuBiF,E2EpzyCrClqD,GAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA,GApBA,IAAI2rH,GAAK,KACLz0F,EAAO,KAuBP09G,EAAO,WACHhwI,KAAK8zC,YACL9zC,KAAK8zC,WAAW/sC,MAAM/G,KAAMgH,WAGpCgpI,GAAK7nI,OAAS4oC,EAAS2C,MAAMvrC,MAK7B,IAAI62K,GAAchvC,EAAK7nI,QACnB2rC,WAAY,SAASqwI,GACjB92H,EAAA3N,QAAU/B,YAAY,kCACtB0P,EAAA3N,QAAU/B,YAAY,yCACtB0P,EAAA3N,QAAU/B,YAAY,mDACtB0P,EAAA3N,QAAU/B,YAAY,4BACtB0P,EAAA3N,QAAU/B,YAAY,8BACtB39C,KAAKmkL,QAAUA,GAMnBC,SAAU,WAENxmI,OAAOga,MAAMvqD,MAAO0uC,MAAO,YAAazxC,KAAM,YAG9C,IAAIw4D,KACJ/+B,GAAE,aAAaxiC,KAAK,WAChBuhE,EAAUxmE,MACNu3B,SAAUkQ,EAAE/jC,MACPsnB,SAAS,aACTlQ,OACLitK,WAAYtgJ,EAAE/jC,MACTsnB,SAAS,eACTlQ,UAKb,IAAIktK,GAAsBhyJ,EAAKiyJ,kBAAoBjyJ,EAAKiyJ,kBAAkBhlI,OAAOwtB,UAAU,QAAU,KAEjGy3G,GACAlyJ,KAAMA,EAAKmyJ,UACX1hH,UACIvL,MAAOllC,EAAKklC,MACZ3zD,MAAOyuB,EAAKoY,IACZ5mC,IAAKwuB,EAAK1R,KACV8jK,SAAUJ,GAEdxhH,UAAWA,EAIf,OAAO/+B,GAAElH,MACLf,IAAQ8hB,OAAO/4B,KAAf,qBACA7mB,KAAM,OACNqU,SAAU,OACVjQ,MACIuW,GAAI2Z,EAAKqyJ,OACT5oI,MAAOzpB,EAAKitB,OAAOwtB,UAAU,QAC7B3M,MAAO9tC,EAAK8tC,MACZpiE,KAAM,YACN2kE,SAAU7nC,KAAKyd,UAAUisI,MAG5BvnJ,QAAQ,SAAA2nJ,GACLhnI,OAAOga,MAAM9nD,OACbwiB,EAAKqyJ,OAASC,EAASD,OACvBryJ,EAAKuyJ,aAAc,EAGnBhpL,OAAO49C,QAAQ8B,aAAc,GAAIqpI,EAAS9oJ,IAAMjgC,OAAO+oB,SAASD,QAEnEjlB,MAAM,WAEHk+C,OAAOga,MAAMvqD,MACT0uC,MAAO,iBACPzxC,KAAM,wDACNu/C,SACI8P,OAAQ,WACJ/b,OAAOga,MAAM9nD,cAUrCg1K,iBAAkB,WACd,GAAIv7K,GAAOvJ,KAEPmuE,EAAO5Z,EAAA7U,QAAauuF,2BAGZ91E,WAAY,cACZpc,MAAO,aACP0xF,SAAU,WACNgwC,EAAA/9H,QAAc4Z,iBAAkB8G,MAAO9tC,EAAK8tC,OAAS,SAAA2kH,GACjDrjL,EAAEH,KAAKwjL,EAAY,SAAAC,GACf1yJ,EAAK2yJ,aAAahB,EAAAvkI,QAAOwlI,qBAAqBF,EAAO1yJ,EAAMA,WAMvE6lC,WAAY,cACZpc,MAAO,YACP0xF,SAAU,WACNn7G,EAAK2yJ,aACD,GAAIhB,GAAAvkI,QAAOylI,cAAc7yJ,EAAMA,GAC3B1zB,KAAM,kBAMlBu5D,WAAY,YACZpc,MAAO,YACP0xF,SAAU,WAEN23C,kBAAiD,OAA/BrhJ,EAAE,aAAa1gC,IAAI,SAAoB,OAAS,WAItE80D,WAAY,QACZpc,MAAO,WACP0xF,SAAU,WACN5xI,OAAO+oB,SAAcrb,EAAK46K,QAA1B,6BAA8D7xJ,EAAKqyJ,UAIvExsH,WAAY,cACZpc,MAAO,OACP0xF,SAAU,WACNlkI,EAAK66K,cAITjsH,WAAY,eACZpc,MAAO,QACP0xF,SAAU,WACNlkI,EAAK87K,uBAAuB/yJ,OAKpCs7G,gBAAkB78D,UAAW,WAKrC,OADA/wE,MAAKslL,WAAan3G,EACXA,GAMXo3G,aAAc,SAAS1xJ,EAAUwwJ,EAAY1/C,GAEzC,GAAI6gD,GAAsBzhJ,EAAE,8BAExB0hJ,EAAe1hJ,EAAE,UAChB9K,SAAS,YACT5uB,SAASm7K,GAEVE,EAAe3hJ,EAAE,UAChB9K,SAAS,YACT5uB,SAASo7K,GAUVE,GARgB5hJ,EAAE,gBACjB3sB,KAAKyc,GACLxpB,SAASq7K,GACTt1J,MAAM,WAEH,MADAkC,GAAKkgC,MAAM3+B,IACJ,IAGMkQ,EAAE,UAClB3sB,KAAKitK,GACLh6K,SAASo7K,GAGd,IAAI9gD,EAAU,CACV,GAAIihD,GAAwB7hJ,EAAE,UACzB9K,SAAS,yBACTjH,UAAUyzJ,GACVr1J,MAAM,WAKH,MAHAq1J,GAAavuJ,QAAQ,QACrBuuJ,EAAa17K,SACbuoB,EAAKuyJ,aAAc,GACZ,GAGG9gJ,GAAE,gBACf9K,SAAS,sBACT5uB,SAASu7K,EAEdD,GACK/yH,oBACGG,SAAU,EACVC,cAAc,EACdE,UAAW,uBAEdj6B,SAAS,cAIlB,MADA3G,GAAKuyJ,aAAc,EACZY,GAMXpG,qBAAsB,SAASH,EAAa2G,EAAiBC,EAAkBC,EAAkBphD,GAE7F,GAAIp7H,GAAOvJ,KAEPsyB,EAAO,GAAI2xJ,GAAAvkI,QAAOsmI,cAActkL,EAAEyG,OAAO+2K,GAAe75J,QAAQ,IA2DpE,OAzDAiN,GAAK2zJ,QAAS,EACdliJ,EAAExa,KAAK+I,EAAK4zJ,sBAAsBn9J,KAAK,SAAAo2C,GAEnC,GAAI0mH,EAAiB,CACjB,GAAIruH,GAAQquH,EAAgBruH,MACxB3zD,EAAQgiL,EAAgBhiL,MACxBC,EAAM+hL,EAAgB/hL,IACtBqiL,EAAyBN,EAAgBnB,QAEzCltH,QAAmBl6D,KAAVuG,GAAuBC,EAChCwuB,EAAK8zJ,aAAa5uH,EAAO3zD,EAAOC,GAGhCwuB,EAAK8zJ,aAAajnH,EAAW,GAAG3H,WAIpCllC,GAAK8zJ,aAAajnH,EAAW,GAAG3H,MAIpC,IAAIsuH,EAMA,IAAK,GAAIrqL,GAAI,EAAGA,EAAIqqL,EAAiB1pL,OAAQX,IACzC62B,EAAK2yJ,aAAahB,EAAAvkI,QAAOwlI,qBAAqBY,EAAiBrqL,GAAI62B,EAAMA,GAMjF,KAAK,GAAI72B,GAAI,EAAGA,EAAI62B,EAAKuwC,UAAUzmE,OAAQX,IACvC,GAAI62B,EAAKuwC,UAAUpnE,GAAG8jD,OAAOwtB,UAAU,UAAYo5G,EAAwB,CACvE7zJ,EAAK+zJ,aAAa/zJ,EAAKuwC,UAAUpnE,GACjC,OAKR,GAAIsqL,EAEA,IAAK,GADDO,GACK7qL,EAAI,EAAGA,EAAIsqL,EAAiB3pL,OAAQX,IACzC6qL,EAAWP,EAAiBtqL,GAC5B8N,EAAKg8K,aAAae,EAAA,SAAsBA,EAAA,WAAwB3hD,EAKxEryG,GAAKuyJ,aAAc,IAIvB7kL,KAAKumL,eAAgBj0J,KAAMA,IAEpBA,GAMXi0J,cAAe,SAASjlL,GACpB,GAAIm8K,GAAA/9H,QAAc2jB,mBAAmB/hE,GACrCyvC,EAAS0I,QAAQ51C,SAMrB2iL,kBAAmB,SAASl0J,GAExByR,EAAElmC,UAAUwxD,MAAM,SAAAxyD,GAEd,IAAIknC,EAAElnC,EAAEuvI,YAAYtlH,GAAG,UAKvB,OAAQjqB,EAAEoR,OACN,IAAK,IACDqkB,EAAKm0J,cAAc,IACnB,MACJ,KAAK,IACYn6K,KAAK4xC,MAAM5rB,EAAKo0J,mBAAmBv4K,SAAW,GAC3DmkB,GAAKo0J,mBAAmB/2J,UAAU2C,EAAKo0J,mBAAmB/2J,YAAc,GACxE,MACJ,KAAK,IACD2C,EAAKm0J,eAAe,IACpB,MACJ,KAAK,IACYn6K,KAAK4xC,MAAM5rB,EAAKo0J,mBAAmBv4K,SAAW,GAC3DmkB,GAAKo0J,mBAAmB/2J,UAAU2C,EAAKo0J,mBAAmB/2J,YAAc,QASxF01J,uBAAwB,SAAS/yJ,GAC7B,GAAIA,EAAKuyJ,YAAa,CAClB,GAAIt7K,GAAOvJ,IACX49C,QAAOga,MAAMvqD,MACT0uC,MAAO,sBACPzxC,KAAM,8FACNu/C,SACI8P,OAAQ,WACJ/b,OAAOga,MAAM9nD,QAEjB62K,uBAAwB,WACpB5iJ,EAAEloC,QAAQiL,IAAI,gBACdjL,OAAO+oB,SAAcg5B,OAAO/4B,KAA5B,iBAEJ+hK,KAAM,WACF7iJ,EAAExa,KAAKhgB,EAAK66K,YAAYr7J,KAAK,WACzBltB,OAAO+oB,SAAcg5B,OAAO/4B,KAA5B,0BAMhBhpB,QAAO+oB,SAAcg5B,OAAO/4B,KAA5B,mBAKRmhK,EAAgBj1I,EAASuG,KAAKnvC,QAE9B2rC,WAAY,WAERizE,EAAK,GAAIi4D,GAAYphI,OAAO/4B,MAG5BkiG,EAAG+9D,mBAGH/9D,EAAGu+D,WAAW3tI,IAAI/0B,KAAK,QAAS,gBAGhCmhB,EAAE,uCAAuCtS,OAAOs1F,EAAGu+D,WAAW3tI,KAG9D5T,EAAE,+BAA+BtS,OAAO,aACxCsS,EAAE,+BAA+BtS,OAC7B,gIAIJsS,EAAE,iBAAiB3T,MAAM,WACrBkC,EAAKu0J,kBAITzB,kBAAkB,QAGd0B,cAAclrC,IAAIjjI,GAClB3Y,KAAK+mL,gBACE7C,EAAAxkI,QAAaxgD,IAAI,cACxBc,KAAKgnL,yBAELhnL,KAAKinL,YAIbD,uBAAwB,WACpB,GAAIz9K,GAAOvJ,KACPogE,EAAQ8jH,EAAAxkI,QAAaxgD,IAAI,SACzBgoL,KAEAC,GACA/mH,MAAOA,EACP3I,WAAYysH,EAAAxkI,QAAaxgD,IAAI,cAC7Bw1D,SAAUwvH,EAAAxkI,QAAaxgD,IAAI,YAC3Bo5D,YAAa4rH,EAAAxkI,QAAaxgD,IAAI,eAG9BkhE,KACA8mH,EAAiB,WAAa9mH,GAGlCxiB,OAAOga,MAAMvqD,MACT0uC,MAAO,6CAEPzxC,sLAAsL81D,GAClL,kBADJ,yFAEAvW,SACI8P,OAAQ,WACJ99D,OAAO+oB,SAAcg5B,OAAO/4B,KAA5B,uBAEJuiK,8BAA+B,WAC3B79K,EAAK89K,cAAcF,IAEvBG,4BAA6B,WACzB/9K,EAAK09K,gBAOrBI,cAAe,SAASF,GACpB,GAAII,GAAc,GAAAvuH,GAAAtZ,SACdyO,SAAavQ,OAAO/4B,KAApB,4BACAipC,aAAa,EACbS,UAAU,GAEd3Q,QAAOga,MAAMvqD,MACT0uC,MAAO,kCACPzxC,KAAMi9K,EAAY5vI,IAClBkS,SACI8P,OAAQ,WACJ99D,OAAO+oB,SAAcg5B,OAAO/4B,KAA5B,uBAEJ2iK,uBAAwB,WACpBzjJ,EAAE7iB,OAAOrjB,UACJogB,KAAK,0BACL1c,KAAK,WACF4lL,EAAexuK,GAAKorB,EAAE/jC,MAAM4M,MAC5B/Q,OAAO+oB,SAAcg5B,OAAO/4B,KAA5B,2BAA2Dkf,EAAEnF,MAAMuoJ,UAQ3FJ,cAAe,WAEX,GAAIvC,GAAasC,cAAclrC,IAAI4oC,UAGnClyJ,GAAOy0F,EAAGs4D,sBAEFxsJ,UAAWkR,EAAE,+BACbnlC,KAAM4lL,EAAWzoI,MACjB4oI,OAAQH,EAAWG,OACnBvkH,MAAOokH,EAAWpkH,OAEtBokH,EAAWzhH,SACXyhH,EAAWxhH,OACXwhH,EAAW1hH,WACX,GAIJ9iE,KAAKynL,eAITR,SAAU,WAEN,GAAI19K,GAAOvJ,IAGX+jC,GAAElH,MACEf,IAAQ8hB,OAAO/4B,KAAf,8BACAziB,QACA1C,MAAO,WACHqiD,MAAM,iCAEV9kB,QAAS,SAASjpB,GAEd4pC,OAAOga,MAAMvqD,MACT0uC,MAAO,oBACPzxC,KAAMf,EAAKm+K,kBAAkB1zK,GAC7B61C,SACI8P,OAAQ,WACJ99D,OAAO+oB,SAAcg5B,OAAO/4B,KAA5B,uBAEJ8iK,OAAQ,WACJp+K,EAAKq+K,eAAe7jJ,EAAE,cAAcn3B,MAAOm3B,EAAE,cAAcn3B,OAC3DgxC,OAAOga,MAAM9nD,UAMzB,IAAI+3K,GAAoB7zK,EAAStK,IAAI,SAAA86D,GAAA,MAAKA,GAAE,IACxCsiH,eAAclrC,IAAIksC,eAAiBpmL,EAAEsD,SAAS6iL,EAAmBf,cAAclrC,IAAIksC,gBACnF/jJ,EAAE,cAAcn3B,IAAIk6K,cAAclrC,IAAIksC,eAI1C/jJ,EAAE,cAAcjf,QAChBif,EAAE,wBAAwB8+C,UAG1B9+C,EAAE,YAAY1gC,IAAI,WAAY,YAM1CqkL,kBAAmB,SAAS1zK,GAiBxB,IAAK,GAfDvK,GACA,ycAcKhO,EAAI,EAAGA,EAAIuY,EAAS5X,OAAQX,IACjCgO,qBAA0BuK,EAASvY,GAAG,GAAtC,KAA6CuY,EAASvY,GAAG,GAAzD,WASJ,OALAgO,yHACIm0C,OAAO/4B,KADX,oEASJ+iK,eAAgB,SAAShpL,EAAMwhE,GAC3Br8B,EAAElmC,UAAUqyB,QAAQ,qBAEpBoC,EAAOy0F,EAAGs4D,sBAEFxsJ,UAAWkR,EAAE,+BACbnlC,KAAMA,EACNwhE,MAAOA,GAEX0mH,cAAclrC,IAAItjF,aAItBt4D,KAAKynL,cAGLn1J,EAAK2zJ,QAAS,GAIlBwB,YAAa,WAET1jJ,EAAE,gCAAgC3sB,KAAQkb,EAAKitB,OAAOwtB,UAAU,QAAhE,KAA4Ez6C,EAAK8tC,MAAjF,KAGI0mH,cAAclrC,IAAImsC,aAClBhkJ,EAAElH,MACEf,IAAQ8hB,OAAO/4B,KAAf,gBAAmCiiK,cAAclrC,IAAImsC,YACrD3lL,MAAQsyD,SAAU,MAAOoF,UAAW,gBACpCznD,SAAU,OACV4qB,QAAS,SAAS+qJ,GACd11J,EAAK2yJ,aAAahB,EAAAvkI,QAAOwlI,qBAAqB8C,EAAY11J,EAAMA,OAK5EyR,EAAE,wBAAwB3T,MAAM,WAE5B,GAAIyD,GAAcvB,EAAKklC,MAAnB,IAA4BllC,EAAKoY,IAAjC,IAAwCpY,EAAK1R,IAGjD,OAAOmmG,GAAGw+D,aAAa1xJ,EADN,wBAC4B,KAIjDkzF,EAAGy/D,kBAAkBl0J,GAErByR,EAAEloC,QAAQ0K,GAAG,eAAgB,WACzB,GAAI+rB,EAAKuyJ,YACL,MAAO,gG3EuxyCvBtpL,GAAQmkD,S2EhxyCJs/H,YAAaA,EACb52G,UAAW49G,K3EmxyCcrqL,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS2oC,EAAGgN,GAoDxC,QAASsP,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,G4E/wzCvF,QAAS+9C,GAAMnoC,EAAKkyK,GAEXA,IACDA,EAAS,EAGb,IAAIr7K,GAAMN,KAAKs6B,IAAI,GAAIqhJ,EACvB,OAAO37K,MAAK4xC,MAAMnoC,EAAMnJ,GAAOA,EAMnC,QAASs7K,GAAmBpsJ,GACxB,GAAIp+B,GAAUqmC,EAAEtzB,UAYhB,OAXAszB,GAAElH,MACE7+B,KAAM,OACN89B,IAAKA,EACLgD,WAAY,SAASiB,GACjBA,EAAI3B,iBAAiB,QAAS,eAElCnB,QAAS,SAAS/gC,EAAQ4gC,EAAQiD,GAC9BriC,EAAQD,QAAuB,MAAfsiC,EAAIjD,WAIrBp/B,E5EmszCXnB,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G4E35zCX,IAAAi4C,GAAA/lD,EAAA,GAAYsG,E5E88zCZ,SAAiCvB,GAAO,GAAIA,GAAOA,EAAIf,WAAc,MAAOe,EAAc,IAAIogD,KAAa,IAAW,MAAPpgD,EAAe,IAAK,GAAIgC,KAAOhC,GAAW5D,OAAOC,UAAUC,eAAed,KAAKwE,EAAKgC,KAAMo+C,EAAOp+C,GAAOhC,EAAIgC,GAAgC,OAAtBo+C,GAAOb,QAAUv/C,EAAYogD,GA9ClOY,G4E/5zChCq8H,EAAApiL,EAAA,I5Em6zCIqiL,EAAkBp9H,EAAuBm9H,G4El6zC7C2K,EAAA/sL,EAAA,K5Es6zCIgtL,EAAc/nI,EAAuB8nI,G4Er6zCzCxvH,EAAAv9D,EAAA,I5Ey6zCIw9D,EAASvY,EAAuBsY,G4Ex6zCpC0vH,EAAAjtL,EAAA,K5E46zCIktL,EAAajoI,EAAuBgoI,G4E36zCxCE,EAAAntL,EAAA,K5E+6zCIotL,EAAanoI,EAAuBkoI,G4E96zCxCE,EAAArtL,EAAA,K5Ek7zCIstL,EAAYroI,EAAuBooI,G4Ej7zCvCx9J,EAAA7vB,EAAA,I5Eq7zCIs9D,EAASrY,EAAuBp1B,G4Ep7zCpC09J,EAAAvtL,EAAA,I5Ew7zCIwtL,EAAUvoI,EAAuBsoI,G4Ev7zCrC9vH,EAAAz9D,EAAA,I5E27zCI09D,EAAWzY,EAAuBwY,G4E17zCtCgwH,EAAAztL,EAAA,K5E87zCI0tL,EAAmBzoI,EAAuBwoI,E4E77zC9CztL,GAAA,GACA,IAAI+M,GAASzG,EAAEyG,OAQX4gL,KAKAC,EAAe,SAAClxI,EAAS33C,GACzB4oL,EAAqBjxI,EAAQl1B,KAAK,OAASziB,GAY3C8oL,EAAW,SAACnxI,EAASoxI,EAAcC,EAAoBC,GAEvDD,EAAqB,SAGrBJ,EAAqBjxI,EAAQl1B,KAAK,OAASwmK,EAG3CtxI,EACKvU,KAAK,QAAUr7B,WAAYghL,EAAgBhsK,UAAU,GAAQ,SAASrgB,EAAG8B,GACtE,GAOIw9C,GACAtpB,EACA1R,EACAi/F,EACA3kH,EAVAylB,GADU6iB,EAAE/jC,MACH+jC,EAAE/jC,MAAMkhB,UAGrBoG,EAAWpG,EAAOoG,SAAS,iBAEvBg+G,EAAWyjD,EAAqBhlJ,EAAE/jC,MAAM4iB,KAAK,MAcjD,IADAiQ,EAAYkR,EAAE/jC,MAAM6nB,QAAQshK,GACH,IAArBt2J,EAAUz2B,OAAc,CACxB+kB,EAAM0R,EAAUgB,WAAW1S,IAC3Bi/F,EAASj/F,EAAM0R,EAAUusF,aACzB,IAAIiqE,GAAgBN,EAAqBl2J,EAAUjQ,KAAK,MACxD,IAAIjkB,EAAE01E,QAAUlzD,EAKZ,MAHA4iB,GAAE/jC,MAAM2xB,aAAakB,GACrBw2J,EAAcC,gBAAgBhkD,OAC9B+jD,GAAcx2J,UAAU02J,oBAAoBjkD,EAAU+jD,EAEnD,IAAI1qL,EAAE01E,QAAU+rC,EAKnB,MAHAr8E,GAAE/jC,MAAMiyB,YAAYY,GACpBw2J,EAAcC,gBAAgBhkD,OAC9B+jD,GAAcx2J,UAAUoyJ,aAAa3/C,GAO7C,IADAzyG,EAAY,KACPp3B,EAAI,EAAGA,EAAI6rB,EAASlrB,OAAQX,IAK7B,GAJA0gD,EAAQpY,EAAEzc,EAASpoB,IAAIzD,IACvB0lB,EAAMg7B,EAAMtoB,WAAW1S,IACvBi/F,EAASj/F,EAAMg7B,EAAMijE,cAEjBjjE,EAAMr1B,GAAGqiK,IAAuBnpL,OAASm8C,EAAMj9C,IAAI,IAAMP,EAAE01E,SAAWlzD,GAAOxiB,EAAE01E,SAAW+rC,EAY1F,MAVIzhH,GAAE01E,QAAUlzD,EAAMi/F,EAASzhH,EAAE01E,QAC7Bl4B,EAAMl+B,KAAK,gBAAgByT,QAAQ1xB,MAEnCm8C,EAAMl+B,KAAK,gBAAgBwT,OAAOzxB,MAGlCslI,EAASzyG,WACTyyG,EAASzyG,UAAUy2J,gBAAgBhkD,OAEvCyjD,GAAqB5sI,EAAMv5B,KAAK,OAAOqiK,aAAa3/C,EAQ5D,KAAK7pI,EAAI,EAAGA,EAAI6rB,EAASlrB,SACrB+/C,EAAQpY,EAAEzc,EAASpoB,IAAIzD,MAEnBkD,EAAE01E,QAAUl4B,EAAMtoB,WAAW1S,MAE3Bg7B,EAAMziB,SAAS,oBAAsByiB,EAAMziB,SAAS,UAL7Bj+B,KAc7BA,IAAM6rB,EAASlrB,OACX4D,OAASsnB,EAASpoB,IAAIzD,EAAI,KAC1BylB,EAAOuQ,OAAOzxB,MACd+oL,EAAqB7nK,EAAO0B,KAAK,OAAO4mK,cAAclkD,EAAU7pI,IAE7DuE,OAASsnB,EAASpoB,IAAIzD,KAC7BsoC,EAAE/jC,MAAM2xB,aAAarK,EAASpoB,IAAIzD,IAGlCstL,EAAqB7nK,EAAO0B,KAAK,OAAO4mK,cAAclkD,EAAU3mI,EAAEs1E,OAAS,EAAIx4E,EAAI,EAAIA,MAG9F8nC,KAAK,YAAa,WACfQ,EAAE/jC,MAAMi5B,SAAS,cAEpBsK,KAAK,UAAW,WACbQ,EAAE/jC,MAAMs5B,YAAY,eA0B5BmwJ,EAAmB,4FAevBC,GAAyB,YAAa,OAAQ,SAAU,aAqDpDC,EAAW,QAAXA,GAAoBr3J,EAAMO,EAAW+2J,GA4BrC,GA3BKD,EAASE,aACVF,EAASE,WAAa,GAE1B7pL,KAAK2Y,GAAKgxK,EAASE,aACnB7pL,KAAKsyB,KAAOA,EACZtyB,KAAK6yB,UAAYA,EACjB7yB,KAAK8pL,kBAAoBF,EAASE,kBAClC9pL,KAAK+pL,aAAc,EACnB/pL,KAAKgqL,gBAGLhqL,KAAKu/C,OAASuZ,EAAApZ,QAAW2iB,wBAAwBC,6BAA6BtiE,KAAKiqL,cAAeL,EAASrnH,OAGtGviE,KAAKu/C,OAAOwtB,UAAU,SACvB/sE,KAAKu/C,OAAOstB,UAAU,OAAQ+8G,EAAShrL,MAEvCoB,KAAKkqL,iBACLlqL,KAAKu/C,OAAOh5C,GAAG,SAAUvG,KAAKkqL,gBAAiBlqL,MAInDA,KAAKmtE,cAAgBntE,KAAKmqL,sBAC1BnqL,KAAKoqL,WAAa,MAIM,IAApBR,EAASvkK,OAAkB,CAC3B,GAAIglK,GAAc,GAAIjC,GAAA1oI,QAAU4qI,iBAC5B54I,MAAO1xC,KACP2Y,GAAI3Y,KAAK2Y,IAGb3Y,MAAKoqL,WAAaC,EAAY1yI,IAC9B33C,KAAKmtE,cAAc17C,OAAOzxB,KAAKoqL,WAG/B,IAAIG,GAAYF,EAAYE,SAC5BvqL,MAAKgqL,aAAeK,EAAYL,aAChChqL,KAAKmtE,cAAc5yC,MACf,WACIgwJ,EAAUl9K,QAEd,WACIk9K,EAAUz6K,UAM1B65K,GAASntL,UAAUguL,mBAIX5rL,KAAM,cACNm9C,MAAO,oBACP0uI,UAAW,SACXC,YAAa,SAASC,GACdA,EAASprI,OAAOwtB,UAAU,oBAC1B49G,EAASX,aAAaY,YAAY3xJ,SAAS,iBAAiBK,YAAY,UACxEqxJ,EAASE,gBACTF,EAASprI,OAAOstB,UAAU,mBAAmB,KAE7C89G,EAASX,aAAaY,YAAY3xJ,SAAS,UAAUK,YAAY,iBACjEqxJ,EAASprI,OAAOstB,UAAU,mBAAmB,GAC7C89G,EAASG,oBAMjBlsL,KAAM,gBACNm9C,MAAO,gBACP0uI,UAAW,OACXC,YAAa,SAASC,GACP,GAAI7xH,GAAApZ,QAAWwtB,6BACtBzkE,WAAYkiL,EAASprI,SAEpBquB,gBAAgB,sBAKzBhvE,KAAM,cACNm9C,MAAO,SACP0uI,UAAW,cACXC,YAAa,SAASC,GAElB5mJ,EAAE,YAAYh6B,SACd4gL,EAAS5gL,YAKrB5B,EAAOwhL,EAASntL,WACZytL,gBACM9nL,IAAK,OAAQ0pD,MAAO,OAAQ7tD,KAAM,OAAQokE,cAAe,KAEvDjgE,IAAK,kBACLnE,KAAM,OACNokE,eAAe,EACf90D,QAAQ,IAIhB48K,gBAAiB,aAEjBv8K,KAAM,aAENkmC,QAAS,WACL7zC,KAAKsyB,KAAKuhB,WAGdk3I,SAAU,WACN,SAAI/qL,KAAKklB,UAAWllB,KAAKu/C,OAAOwtB,UAAU,qBAO9Ci+G,aAAc,aAEdC,MAAO,SAAS3pL,KAMhBmjL,QAAS,aAKTyG,SAAU,SAASC,GACfnrL,KAAKorL,SAAWprL,KAAKu/C,OAAOwtB,UAAU,QACtC/sE,KAAKu/C,OAAOstB,UAAU,OAAQs+G,IAMlCE,YAAa,WACLrrL,KAAKorL,UACLprL,KAAKu/C,OAAOstB,UAAU,OAAQ7sE,KAAKorL,WAO3CrhL,OAAQ,WACJ/J,KAAK6zC,UAEL7zC,KAAK6yB,UAAUy2J,gBAAgBtpL,KAC/B,IAAIsyB,GAAOtyB,KAAKsyB,IAChBtyB,MAAKmtE,cAAcr9D,KAAK,EAAG,WACvBi0B,EAAE/jC,MAAM+J,SAERuoB,EAAKg5J,sBAObnB,oBAAqB,aAKrBoB,aAAc,aAKdV,cAAe,aAKfC,cAAe,aAKfU,cAAe,cAMnB,IAAIC,GAAqB,SAASn5J,EAAMO,EAAW+2J,GAC/CD,EAAShuL,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GAGrC5pL,KAAKmjE,SAAWymH,EAASzmH,SACzBnjE,KAAK6iE,aAGT16D,GAAOsjL,EAAmBjvL,UAAWmtL,EAASntL,WAI1CkvL,iBAAkB,SAASC,GAEvB3rL,KAAK6iE,YAEL,KAAK,GADD8nH,GACKlvL,EAAI,EAAGA,EAAIkwL,EAAgBvvL,OAAQX,IACxCkvL,EAAWzF,GAAqByG,EAAgBlwL,GAAIuE,KAAKsyB,KAAMtyB,MAC/DA,KAAKilL,aAAa0F,IAO1Bh9K,KAAM,WACF,IAAK,GAAIlS,GAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvCuE,KAAK6iE,UAAUpnE,GAAGkS,QAO1Bs9K,MAAO,SAAS3pL,GACZ,IAAK,GAAI7F,GAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvCuE,KAAK6iE,UAAUpnE,GAAGwvL,MAAM3pL,IAQhCmjL,QAAS,WAEL,IAAK,GADDmH,MACKnwL,EAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvCmwL,EAAoBtvL,KAAK0D,KAAK6iE,UAAUpnE,GAAGgpL,UAE/C,QACIliH,MAAOviE,KAAKu/C,OAAOutB,oBACnB3J,SAAUnjE,KAAKmjE,SACfN,UAAW+oH,IAOnB3G,aAAc,SAAS0F,GACnB3qL,KAAK6iE,UAAUvmE,KAAKquL,GACpBA,EAAS93J,UAAY7yB,KACrBA,KAAK6zC,WAMT01I,oBAAqB,SAASoB,EAAUzkJ,GACpClmC,KAAK6zC,SACL,IAAIvqC,GAAQtJ,KAAK6iE,UAAU5hE,QAAQilC,EACnC,QAAe,IAAX58B,IACAtJ,KAAK6iE,UAAUxsD,OAAO/M,EAAO,EAAGqhL,IACzB,IAQfkB,iBAAkB,SAASC,EAAcC,EAAcC,GACnD,GAAI1iL,GAAQtJ,KAAK6iE,UAAU5hE,QAAQ6qL,EAQnC,QAPe,IAAXxiL,IACAtJ,KAAK6iE,UAAUv5D,GAASyiL,EACpBC,GACAF,EAAa3+G,cAAcr7C,YAAYi6J,EAAa5+G,eAExDntE,KAAK6zC,WAEFvqC,GAMXggL,gBAAiB,SAASqB,GACtB,GAAIrhL,GAAQtJ,KAAK6iE,UAAU5hE,QAAQ0pL,EACnC,QAAe,IAAXrhL,IAEAtJ,KAAK6iE,UAAUxsD,OAAO/M,EAAO,GAC7BqhL,EAAS93J,UAAY,KACrB7yB,KAAK6zC,WACE,IAQf21I,cAAe,SAASmB,EAAUsB,GAC9B,GAAI3iL,GAAQtJ,KAAK6iE,UAAU5hE,QAAQ0pL,EACnC,QAAe,IAAXrhL,IAEAtJ,KAAK6iE,UAAUxsD,OAAO/M,EAAO,GAE7BtJ,KAAK6iE,UAAUxsD,OAAO41K,EAAc,EAAGtB,GACvC3qL,KAAK6zC,WACE,IAQf23I,cAAe,WACX,MAAOxrL,MAAK6iE,WAMhBqpH,WAAY,SAASC,GAMjB,IAJA,GAGIxB,GAHAz7K,EAAQlP,KAAK6iE,UAAU52D,MAAM,GAE7B+2D,KAEoB,IAAjB9zD,EAAM9S,QACTuuL,EAAWz7K,EAAMxS,QACbiuL,YAAoBwB,GACpBnpH,EAAO1mE,KAAKquL,GACLA,EAAS9nH,YAChB3zD,EAAQA,EAAMtG,OAAO+hL,EAAS9nH,WAGtC,OAAOG,KAOf,IAAImiH,GAAgB,SAAS7yJ,EAAMO,EAAW+2J,GAkC1C,GAjCAzhL,EAAOyhL,GACHzmH,SAAU,gBACV2mH,kBAAmB,iBAEvB2B,EAAmB9vL,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GAK/C5pL,KAAKosL,YAAcroJ,EAAE,UAChB9K,SAAS,eACTrW,KAAK,KAFS,SAEM5iB,KAAK2Y,GAFX,gBAGdtO,SAASrK,KAAKmtE,eACnB67G,EAAahpL,KAAKmtE,cAAentE,MACjCgpL,EAAahpL,KAAKosL,YAAapsL,MAC/BipL,EAASjpL,KAAKmtE,cAAentE,KAAK8pL,kBAAmB,SAAU9pL,MAG/DA,KAAK+7D,gBAAkB,GAAI2sH,GAAAhpI,QAAY2sI,eAAersL,MACtDA,KAAKoqL,WAAWv4J,MAAM7xB,KAAK+7D,gBAAgBuwH,YAG3CtsL,KAAK+7D,gBAAgBuwH,WAAWz6J,MAAMkS,EAAE,+BAGxC/jC,KAAKusL,0BAGD,aAAe3C,IACf5pL,KAAK0rL,iBAAiB9B,EAAS/mH,WAI/B,WAAa+mH,GAAU,CAEvB,GAAI4C,GAAcxsL,KAAK+7D,eACvB/7D,MAAK+7D,gBAAkB,GAAI2sH,GAAAhpI,QAAY2sI,eAAersL,KAAM4pL,EAAS1jK,SACrEsmK,EAAYF,WAAWx6J,YAAY9xB,KAAK+7D,gBAAgBuwH,YAEpD1C,EAAS1jK,QAAQoZ,SACjBt/B,KAAKysL,8BAKjBtkL,GAAOg9K,EAAc3oL,UAAWmtL,EAASntL,UAAWivL,EAAmBjvL,WACnEguL,kBACIb,EAASntL,UAAUguL,iBAAiB,GACpCb,EAASntL,UAAUguL,iBAAiB,IAGhC5rL,KAAM,iBACNm9C,MAAO,uBACP0uI,UAAW,eACXC,YAAa,SAAS9hJ,GAClB7E,EAAE,YAAYh6B,SACd6+B,EAAM8jJ,0BAKV9tL,KAAM,eACNm9C,MAAO,UACP0uI,UAAW,gBACXC,YAAa,SAAS9hJ,GAEdA,EAAMmzB,gBAAgBz8B,WAEtBsJ,EAAMmzB,gBAAgB4wH,gBACtB/jJ,EAAMgkJ,6BAMNhkJ,EAAM6jJ,6BACN7jJ,EAAMoiJ,cAAe6B,kBAAkB,KAE3CjkJ,EAAMmzB,gBAAgBntD,WAG9B+6K,EAASntL,UAAUguL,iBAAiB,IAGxCL,oBAAqB,WACjB,GAAIh9G,GAAgBppC,EAAE,UACjB9K,SAAS,SACTrW,KAAK,KAFU,SAEK5iB,KAAK2Y,GAI9B,OAHI3Y,MAAK6yB,WACL7yB,KAAK6yB,UAAUu5J,YAAY36J,OAAO07C,GAE/BA,GAGX09G,cAAe,WACX7qL,KAAK8sL,UAAUh9K,QAGnBg7K,cAAe,WAEX9qL,KAAK8sL,UAAUz/K,OAEfrN,KAAKgrL,gBAGTO,aAAc,WAIV,GAAIwB,GAAgB/sL,KAAK6iE,UAAUzmE,MACnC,IAAsB,IAAlB2wL,EACA/sL,KAAKgqL,aAAagD,eAAel9K,OACjC9P,KAAKgqL,aAAaiD,aAAan9K,WAC5B,IAAsB,IAAlBi9K,EACP/sL,KAAKgqL,aAAagD,eAAep+K,OAAO5O,KAAK6iE,UAAU,YAAcqqH,IACrEltL,KAAKgqL,aAAaiD,aAAan9K,WAC5B,CAYH,GAAIrU,GAEAwJ,EACA0lL,EAEAwC,EAASntL,KAAK6iE,UAAU,GAAGuqH,WAC3BC,EAAqB,CACzB,KAAK5xL,EAAI,EAAGA,EAAIsxL,EAAetxL,IAAK,CAEhC,GADAkvL,EAAW3qL,KAAK6iE,UAAUpnE,GACtBkvL,EAASyC,aAAeD,EAAQ,CAChCG,eAAgB,CAChB,OAEA3C,YAAoB4C,IACpBF,IAcR,GAViBrtL,KAAK6iE,UAAU,YAAc2qH,GAC1CxtL,KAAKgqL,aAAagD,eAAe3/K,QAEjCrN,KAAKgqL,aAAagD,eAAel9K,OACjCi0B,EAAE,YAAYh6B,UAMdsjL,EAAqB,GAAKA,IAAuBrtL,KAAK6iE,UAAUzmE,OAAQ,CAIxE,GAEI4E,GAFAysL,IAMJ,KADA9C,EAAW3qL,KAAK6iE,UAAU,GACrB59D,EAAI,EAAGA,EAAI0lL,EAAS5uH,gBAAgB71C,QAAQ9pB,OAAQ6I,IACrDjE,EAAS2pL,EAAS5uH,gBAAgB71C,QAAQjhB,GAC1CwoL,EAAezsL,EAAOpC,OAASoC,EAInC,KAAKvF,EAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IAEnC,IADAkvL,EAAW3qL,KAAK6iE,UAAUpnE,GACrBwJ,EAAI,EAAGA,EAAI0lL,EAAS5uH,gBAAgB71C,QAAQ9pB,OAAQ6I,IACrDjE,EAAS2pL,EAAS5uH,gBAAgB71C,QAAQjhB,GACtCjE,EAAOpC,OAAQ6uL,IACfA,EAAezsL,EAAOpC,MAAMtC,KAAK0E,EAS7ChB,MAAK+7D,gBAAgB2xH,YACrB,IAAIxnK,GACAynK,CAGJ,KAAK,GAAIC,KAAeH,GACpBvnK,EAAUunK,EAAeG,GACrB1nK,EAAQ9pB,SAAWixL,IAGnBM,EAAa,GAAIjF,GAAAhpI,QAAYmuI,cACzBjvL,KAAMsnB,EAAQ,GAAGtnB,KACjB0K,MAAO4c,EAAQ,GAAG5c,QAEtBtJ,KAAK+7D,gBAAgBhL,WAAW48H,GAKxC3tL,MAAKgqL,aAAaiD,aAAar+K,OAAO5O,KAAK+7D,gBAAgB71C,QAAQ9pB,OAAS,OAE5E4D,MAAKgqL,aAAaiD,aAAan9K,SAQ3C88K,yBAA0B,WACtB,IAAK,GAAInxL,GAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvCuE,KAAK6iE,UAAUpnE,GAAGsgE,gBAAkB/7D,KAAKusL,uBAAuB9wL,EAEpEuE,MAAKusL,2BAMTE,2BAA4B,WAExB,GAAIzsL,KAAK+7D,gBAAgB71C,QAAQ9pB,OAAS,EAAG,CAEzC4D,KAAKusL,yBACL,KAAK,GAAI9wL,GAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IAAK,CAC5C,GAAIkvL,GAAW3qL,KAAK6iE,UAAUpnE,EAC9BuE,MAAKusL,uBAAuBjwL,KAAKquL,EAAS5uH,iBAC1C4uH,EAAS5uH,gBAAkB/7D,KAAK+7D,iBAKxC/7D,KAAK+7D,gBAAgB+xH,gBAMzBpB,qBAAsB,WAClB,GAAIqB,GAAkB,GAAIb,GAAeltL,KAAKsyB,KAAMtyB,KAAKsyB,MACrD1zB,KAAMoB,KAAKu/C,OAAOwtB,UAAU,QAC5BlK,UAAW7iE,KAAK6iE,WAER7iE,MAAK6yB,UAAUg5J,iBAAiB7rL,KAAM+tL,GAAiB,EACnEA,GAAgB/C,gBAGpB/F,aAAc,SAAS0F,GACnBc,EAAmBjvL,UAAUyoL,aAAatpL,KAAKqE,KAAM2qL,GACrD3qL,KAAKurL,gBAGTjC,gBAAiB,SAASqB,GACtBc,EAAmBjvL,UAAU8sL,gBAAgB3tL,KAAKqE,KAAM2qL,GACxD3qL,KAAKurL,gBAGT9G,QAAS,WAEDzkL,KAAK+7D,gBAAgBz8B,WACrBt/B,KAAK4sL,0BAGT,IAAIhD,GAAWzhL,EAAOsjL,EAAmBjvL,UAAUioL,QAAQ9oL,KAAKqE,OAC5DkmB,QAASlmB,KAAK+7D,gBAAgB0oH,WAQlC,OAJIzkL,MAAK+7D,gBAAgBz8B,WACrBt/B,KAAKysL,6BAGF7C,GAGXoB,aAAc,SAAS1pL,GACnBI,EAAEH,KAAKvB,KAAK6iE,UAAW,SAAAlkE,GACnBA,EAAEqsL,aAAa1pL,OAU3B,IAAI0kL,GAAgBj1I,EAASuG,KAAKnvC,QAC9B2rC,WAAY,SAAS81I,GACjBzhL,EAAOyhL,GACHzmH,SAAU,SAEdsoH,EAAmB9vL,KAAKqE,KAAM,OAAQ4pL,EAAS/2J,UAAW+2J,GAC1D5pL,KAAKw3D,MAAQ,KACbx3D,KAAK2kL,OAASiF,EAASjF,OACvB3kL,KAAKogE,MAAQwpH,EAASxpH,MACtBpgE,KAAKm/K,gBAAuC7hL,KAAzBssL,EAASzK,aAA4ByK,EAASzK,YACjEn/K,KAAKguL,gBACLhuL,KAAKiuL,wBACLjuL,KAAK0+D,QAAU,EACf1+D,KAAKq+D,SAAW,EAChBr+D,KAAKkuL,YAAc,EACnBluL,KAAKmuL,eAAiB,GACtBnuL,KAAK6kL,aAAc,EAEnB7kL,KAAKkmL,qBAAuB,KAC5BlmL,KAAKwwC,SACLxwC,KAAKouL,eAAiB,GAAI3Q,GAAA/9H,QAAcsa,cAAch6D,KAAK6yB,UAAU3zB,IAAI,GAAG+G,eAC5EjG,KAAKimB,QAGLjmB,KAAKu/C,OAASuZ,EAAApZ,QAAW2iB,wBAAwBC,+BAGrCngE,IAAK,OACL0pD,MAAO,OACP7tD,KAAM,OACNokE,cAAe,KAGfjgE,IAAK,UACL0pD,MAAO,UACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,UACL0pD,MAAO,UACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,UACL0pD,MAAO,UACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,UACL0pD,MAAO,UACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,UACL0pD,MAAO,UACP7tD,KAAM,QACNokE,cAAe,aAGrBxjE,KAAMgrL,EAAShrL,QAIzB4xC,OAAQ,WAEJxwC,KAAKquL,kBAAmB,CAGxB,IAAIC,GAAiBtuL,KAAK6yB,UAEtBP,EAAOtyB,IAEXA,MAAKuuL,cAAgBxqJ,EAAE,UAClB9K,SAAS,iBACT5uB,SAASikL,GAEdtuL,KAAKwuL,oBAAsBzqJ,EAAE,UACxB9K,SAAS,WACT5uB,SAASikL,GAEdtuL,KAAKyuL,iBAAmB1qJ,EAAE,UACrB9K,SAAS,oBACT5uB,SAASikL,GAEdtuL,KAAK0uL,eAAiB3qJ,EAAE,UACnB9K,SAAS,kBACT5uB,SAASrK,KAAKuuL,eAEnBvuL,KAAK0mL,mBAAqB3iJ,EAAE,UACvB9K,SAAS,sBACTrW,KAAK,KAAM,sBACXvY,SAASrK,KAAKwuL,qBAEnBxuL,KAAKosL,YAAcpsL,KAAK0mL,mBACxBsC,EAAahpL,KAAK0mL,mBAAoBp0J,GAEtCtyB,KAAK2uL,UAAY5qJ,EAAE,UACd9K,SAAS,SACT5uB,SAASrK,KAAK0mL,mBACK3iJ,GAAE,UACrB3sB,KAAK,iCACL6hB,SAAS,iBACT5uB,SAASrK,KAAK2uL,WACdv+J,MAAM,WACHqtJ,EAAA/9H,QAAc4Z,iBAAkB8G,MAAO9tC,EAAK8tC,OAAS,SAAA4C,GACjDthE,EAAEH,KAAKyhE,EAAQ,SAAAgiH,GACX1yJ,EAAK2yJ,aAAaC,GAAqBF,EAAO1yJ,EAAMA,SAMpEtyB,MAAK4uL,cAAgB7qJ,EAAE,UAClB9K,SAAS,2BACTjH,UAAUhyB,KAAKuuL,eACpBvuL,KAAK6uL,IAAM9qJ,EAAE,UACR9K,SAAS,iBACT5uB,SAASrK,KAAK4uL,eAEf5uL,KAAKm/K,cACLn/K,KAAK4uL,cAAc31J,SAAS,eAC5Bj5B,KAAK6uL,IAAI51J,SAAS,gBAItBj5B,KAAK0kL,SAAW3gJ,EAAE,UACb9K,SAAS,YACT5uB,SAASrK,KAAKyuL,kBACnBzuL,KAAK8uL,kBAAoB/qJ,EAAE,UACtB9K,SAAS,qBACT5uB,SAASrK,KAAK0kL,UACnB1kL,KAAK+uL,eAAiBhrJ,EAAE,QACnBnhB,KAAK,QAAS,kBACdqW,SAAS,sCACTnpB,OACAzF,SAASrK,KAAK8uL,mBACnB9uL,KAAKgvL,mBAAqBjrJ,EAAE,UACvB9K,SAAS,sBACTnpB,OACAzF,SAASrK,KAAK8uL,mBACnB9uL,KAAKivL,wBAA0BlrJ,EAAE,UAC5B9K,SAAS,oBACT5uB,SAASrK,KAAK8uL,mBACnB9uL,KAAKkvL,aAAenrJ,EAAE,UACjB9K,SAAS,gBACT5uB,SAASrK,KAAK8uL,mBACnB9uL,KAAKmvL,wBAA0BnvL,KAAKkvL,aAAa/gL,SAEjDnO,KAAKovL,aAAerrJ,EAAE,UACjB9K,SAAS,gBACT5uB,SAASrK,KAAK6uL,KACnB7uL,KAAKqvL,aAAetrJ,EAAE,aACjBnhB,MAAOhkB,KAAM,UACbq6B,SAAS,aACTxH,OAAO,qCACPpnB,SAASrK,KAAKovL,aACnB,IAAIE,GAAa,SAASzyL,GACP,aAAXA,EAAEmB,MAAkD,MAA1BnB,EAAEqyB,SAAWryB,EAAEoR,QAA4C,MAA1BpR,EAAEqyB,SAAWryB,EAAEoR,SAC3C,MAA1BpR,EAAEqyB,SAAWryB,EAAEoR,QAEhBqkB,EAAKkgC,MAAMzuB,EAAE/jC,MAAM4M,OAEvBm3B,EAAE/jC,MAAM8P,OACRi0B,EAAE/jC,MAAM4M,IAAI,IACZ0lB,EAAKi9J,cAAcliL,OACnBilB,EAAK+8J,aAAahiL,QAItBxQ,EAAE6xB,kBAEN1uB,MAAKwvL,UAAYzrJ,EAAE,YACd9K,SAAS,aACTnpB,OACAyzB,KAAK,iBAAkB+rJ,GACvBjlL,SAASrK,KAAKovL,cACnBpvL,KAAKuvL,cAAgBxrJ,EAAE,WAClB9K,SAAS,YACTrW,KAAK,QAAS,4BACd8wC,SAAUqd,UAAW,WACrB1mE,SAASrK,KAAKovL,cACnBpvL,KAAKuvL,cAAcn/J,MAAM,WACrBkC,EAAKi9J,cAAcz/K,OACnBwiB,EAAK+8J,aAAav/K,OAClBwiB,EAAKk9J,UAAU5iL,IAAO0lB,EAAKklC,MAA3B,IAAoCllC,EAAKoY,IAAzC,IAAgDpY,EAAK1R,MACrD0R,EAAKk9J,UAAUnsL,IAAI,UAAW,gBAC9BivB,EAAKk9J,UAAUh2K,SACf8Y,EAAKk9J,UAAU1qK,QAEfwN,EAAKk9J,UAAUroI,cACXx7B,OAAQ,SAAS2xB,EAAStpC,GAEtB,GAAIy7K,MAEAC,EAA2B3rJ,EAAEr6B,IAAI4oB,EAAK45J,WAAWqB,GAAe,SAAAxgK,GAAA,MAChEA,GAAEwxC,aAAavB,gBAAgB1f,EAAQ2F,MAAMhmB,QAAQ,SAAA0yJ,GACjDF,EAAeA,EAAa7mL,OAAO+mL,MAK3C5rJ,GAAExa,KAAKxiB,MAAMg9B,EAAG2rJ,GAA0B7/K,KAAK,WAC3CmE,EACI+vB,EAAEr6B,IAAI+lL,EAAc,SAAA73G,GAAA,OAChB/rB,MAAO+rB,EAAQ,GACf1uE,MAAO0uE,EAAQ,UAK/Bk2C,UAAW,UAGCxwH,KAAhB0C,KAAK2kL,SACL3kL,KAAK4vL,aAAe7rJ,EAAE,YACjBnhB,KAAK,OAAQ,UACbhW,IAAI5M,KAAK2kL,QACTt6K,SAASrK,KAAKovL,eAGvBpvL,KAAK6vL,QAAU9rJ,EAAE,QACZnhB,KAAK,KAAM,YACXA,KAAK,QAAS,YACd8wC,SAAUqd,UAAW,WACrB3gD,MAAM,WACHkC,EAAKw9J,aAERzlL,SAASrK,KAAKovL,cACnBpvL,KAAK+vL,QAAUhsJ,EAAE,QACZnhB,KAAK,KAAM,WACXA,KAAK,QAAS,WACd8wC,SAAUqd,UAAW,WACrB3gD,MAAM,WACHkC,EAAK09J,YAER3lL,SAASrK,KAAKovL,cAGnBpvL,KAAKkmL,qBAAuBlmL,KAAKiwL,aAAcvlJ,IAAK,IACpD1qC,KAAKqvL,aAAa9rJ,KAAK,SAAU,WAC7BjR,EAAK8zJ,aAAa9zJ,EAAK+8J,aAAaziL,SAkBxC5M,KAAKwuL,oBAAoBp+J,MAAM,SAASvzB,GACpCknC,EAAE/jC,MACGie,KAAK,SACLiS,QAAQ,UAIjBlwB,KAAKwuL,oBAAoBjrJ,KAAK,WAAY,SAAS1mC,GAC/Cy1B,EAAK09J,QAAQnzL,EAAEwyB,MAAOrvB,KAAK0mL,sBAI/B1mL,KAAKkvL,aACA3rJ,KAAK,YAAa,SAAS1mC,EAAG8B,GAC3BqB,KAAKkwL,UAAYvxL,EAAEy1E,UAEtB7wC,KAAK,OAAQ,SAAS1mC,EAAG8B,GACtB,GAAIsoE,GAAQtoE,EAAEy1E,QAAUp0E,KAAKkwL,SAC7BlwL,MAAKkwL,UAAYvxL,EAAEy1E,OACnB,IAAI+7G,GAAc7jL,KAAK4xC,MAAM+oB,EAAQ30C,EAAKo0J,mBAAmBx7K,SAAWonB,EAAK+rC,SAAW/rC,EAAKosC,SAC7FpsC,GAAK89J,YAAYD,KAGzBnwL,KAAK+uL,eAAe3+J,MAAM,WACtBkC,EAAK+9J,mBAITrwL,KAAK0mL,mBACAnjJ,KAAK,WAAY,SAAC1mC,EAAG8B,GAElB,GAAI9B,EAAEyyB,QAAUgD,EAAKo0J,mBAAmBx7K,QAAU,GAC9C,OAAO,IAGdq4B,KAAK,YAAa,SAAC1mC,EAAG8B,GACnBA,EAAE2xL,aAAeh+J,EAAKoY,IACtB/rC,EAAE4xL,eAAiB1zL,EAAE6yB,QACrB/wB,EAAEuxL,UAAYvxL,EAAEy1E,UAEnB7wC,KAAK,OAAQ,SAAS1mC,EAAG8B,GACtB,GAAIk0B,GAAYkR,EAAE/jC,MACdinE,EAAQtoE,EAAEy1E,QAAUz1E,EAAEuxL,UACtBM,EAAa39J,EAAUlD,aAAe9yB,EAAE6yB,QAAU/wB,EAAE4xL,eACxD19J,GAAUlD,UAAU6gK,GACpB7xL,EAAE4xL,eAAiB1zL,EAAE6yB,QACrB/wB,EAAEuxL,UAAYvxL,EAAEy1E,OAChB,IAAI+7G,GAAc7jL,KAAK4xC,MAAM+oB,EAAQ30C,EAAKo0J,mBAAmBx7K,SAAWonB,EAAK1R,KAAO0R,EAAKoY,KACzFpY,GAAK89J,WAAWD,KAkBxBnwL,KAAK0uL,eACAnrJ,KAAK,YAAa,SAAS1mC,EAAG8B,GAC3B,MAAOolC,GAAE,UACJ9K,SAAS,aACT51B,IAAI,SAAUivB,EAAKk8J,oBAAoBrgL,SAAWmkB,EAAKo8J,eAAevgL,SAAW,GACjF9D,SAAS05B,EAAE/jC,SAEnBujC,KAAK,OAAQ,SAAC1mC,EAAG8B,GACdolC,EAAEplC,EAAE+S,OAAOrO,KACP6xB,KAAM5oB,KAAKy4B,IAAIloC,EAAEwyB,MAAO1wB,EAAEm1E,QAAUxhD,EAAKO,UAAUmP,SAAS9M,KAC5DhqB,MAAOoB,KAAK44D,IAAIroE,EAAEwyB,MAAQ1wB,EAAEm1E,SAGhC,IAAI/uC,GAAMz4B,KAAKy4B,IAAIloC,EAAEwyB,MAAO1wB,EAAEm1E,QAAUxhD,EAAKO,UAAUmP,SAAS9M,KAE5D3oB,EAAMD,KAAKC,IAAI1P,EAAEwyB,MAAO1wB,EAAEm1E,QAAUxhD,EAAKO,UAAUmP,SAAS9M,KAE5Du7J,EAAOn+J,EAAK1R,KAAO0R,EAAKoY,IACxBx/B,EAAQonB,EAAKo0J,mBAAmBx7K,OACpConB,GAAKo+J,gBACDpkL,KAAK4xC,MAAMnZ,EAAM75B,EAAQulL,GAAQn+J,EAAKoY,IACtCp+B,KAAK4xC,MAAM3xC,EAAMrB,EAAQulL,GAAQn+J,EAAKoY,OAG7CnH,KAAK,UAAW,SAAC1mC,EAAG8B,GACjB,GAAIomC,GAAMz4B,KAAKy4B,IAAIloC,EAAEwyB,MAAO1wB,EAAEm1E,QAC1BvnE,EAAMD,KAAKC,IAAI1P,EAAEwyB,MAAO1wB,EAAEm1E,QAC1B28G,EAAOn+J,EAAK1R,KAAO0R,EAAKoY,IACxBx/B,EAAQonB,EAAKo0J,mBAAmBx7K,QAChCylL,EAAUr+J,EAAKoY,GACnBpY,GAAKoY,IAAMp+B,KAAK4xC,MAAMnZ,EAAM75B,EAAQulL,GAAQE,EAC5Cr+J,EAAK1R,KAAOtU,KAAK4xC,MAAM3xC,EAAMrB,EAAQulL,GAAQE,EAC7C5sJ,EAAEplC,EAAE+S,OAAO3H,SACXuoB,EAAKs+J,mBA0Bb5wL,KAAK6wL,gBAAgB,GAAIC,GAAW9wL,MAAQosL,YAAapsL,KAAK0uL,kBAE9D3qJ,EAAEloC,QAAQ0nC,KAAK,SAAU,WAEjBvjC,KAAK+wL,cACL7zL,aAAa8C,KAAK+wL,cAItB/wL,KAAK+wL,aAAexyL,WAAW,WAC3B+zB,EAAKu0J,iBACN,OAEP9iJ,EAAElmC,UAAU0lC,KAAK,SAAU,WACvBjR,EAAK6rG,WAGTn+H,KAAKimB,QACL8d,EAAEloC,QAAQq0B,QAAQ,WAGtB8gK,eAAgB,SAAS71K,GACrB,MAAOnb,MAAKu/C,OAAOwtB,UAAa5xD,EAAK5Y,cAA9B,WAAwDvC,KAAKu/C,OAAOwtB,UAAU,aAK7F5kE,GAAO69K,EAAcxpL,UAAWivL,EAAmBjvL,WAC/Cq3C,QAAS,WACL7zC,KAAK6kL,aAAc,GAIvByG,iBAAkB,WACdtrL,KAAK2uL,UAAU//K,OAAiC,IAA1B5O,KAAK6iE,UAAUzmE,SAOzC60L,iBAAkB,SAASC,EAAWC,EAASC,EAAUx5J,GAMrD,GAJI53B,KAAK4R,OACL1U,aAAa8C,KAAK4R,OAGlBgmB,EAAO,CAGP,GAAIruB,GAAOvJ,IACXA,MAAK4R,MAAQrT,WAAW,WACpBgL,EAAK2mB,QAAQ,WAAeghK,EAA5B,IAAyCC,EAAzC,IAAoDC,IACrD,SAEH9+J,MAAKpC,QAAQ,WAAeghK,EAA5B,IAAyCC,EAAzC,IAAoDC,IAI5DV,gBAAiB,SAAShmJ,EAAK9pB,GAC3B5gB,KAAKuvL,cAAcn4K,KAAQwhD,EAAAlZ,QAAK8jB,UAAU94B,GAA1C,MAAoDkuB,EAAAlZ,QAAK8jB,UAAU5iD,IACnE5gB,KAAKwvL,UAAU5iL,IAAO5M,KAAKw3D,MAA3B,IAAoCoB,EAAAlZ,QAAK8jB,UAAU94B,GAAnD,IAA2DkuB,EAAAlZ,QAAK8jB,UAAU5iD,GAI1E,IAAI42C,GAAQx3D,KAAKqvL,aAAaziL,KAChB,MAAV4qD,GACAx3D,KAAKixL,iBAAiBz5H,EAAOx3D,KAAK0qC,IAAK1qC,KAAK4gB,MAAM,IAQ1DqvK,YAAa,SAASoB,GAClBA,EAAUt7K,IAzpCM,GA2pChB,IAAIuc,GAAOtyB,KACPo/D,EAAar7B,EAAEtzB,UA2CnB,OA1CAszB,GAAElH,MACEf,IAAQ8hB,OAAO/4B,KAAf,eAAkC7kB,KAAKogE,MACvCh+D,KAAMivL,EACNh/K,SAAU,OACV4qB,QAAS,SAAS/gC,GAEd,GAAiC,IAA7BA,EAAOijE,WAAW/iE,OAAtB,CAKA,GAAIF,EAAOo1L,UAAW,CAClB,GAAIC,GAAY,GAAIC,GAAel/J,EACnCA,GAAKu+J,gBAAgBU,GACrBj/J,EAAKm/J,gBAAkBF,EAE3Bj/J,EAAK8sC,WAAaljE,EAAOijE,WAEzB7sC,EAAK+8J,aAAa5lL,KAAK,IACvB6oB,EAAK+8J,aAAa59J,OAAOsS,EAAE,iDAE3B,KAAK,GAAItoC,GAAI,EAAG0a,EAAMmc,EAAK8sC,WAAWhjE,OAAQX,EAAI0a,EAAK1a,IAAK,CACxD,GAAI+7D,GAAQllC,EAAK8sC,WAAW3jE,GAAG+7D,MAC3Bk6H,EAAe3tJ,EAAE,WACrB2tJ,GAAat6K,KAAKogD,GAClBk6H,EAAa9kL,IAAI4qD,GACjBllC,EAAK+8J,aAAa59J,OAAOigK,GAEzBx1L,EAAOy1L,aACPr/J,EAAK+8J,aAAa59J,OAAOsS,qDAEzB7nC,EAAO01L,aACPt/J,EAAK+8J,aAAa59J,OAAOsS,6CAE7BzR,EAAKu/J,kBAAoB31L,EAAO41L,YAEhC1yH,EAAW3hE,QAAQvB,EAAOijE,cAE9Bz/D,MAAO,WACHqiD,+CAA+CzvB,EAAK8tC,UAGrDhB,GAGXgnH,aAAc,SAAS5uH,EAAO9sB,EAAK9pB,GAC/B,GAAI0R,GAAOtyB,IAEX,KAAKsyB,EAAK8sC,WAIN,WAHA9sC,GAAK4zJ,qBAAqBn9J,KAAK,WAC3BuJ,EAAK8zJ,aAAa5uH,EAAO9sB,EAAK9pB,IAMtC,IAAK42C,GAAmB,SAAVA,EAAd,CAOA,GAAc,aAAVA,EAIA,WAHAllC,GAAK29J,aACDvlJ,IAAK1qC,KAAK6xL,kBA9tCF,KAkuChB,IAAc,SAAVr6H,EAIA,WAHAllC,GAAK29J,aACDvlJ,IAAK1qC,KAAK6xL,kBApuCF,KA6uChB,IAAIniD,GAAQ3rG,EAAEpjC,KAAK2xB,EAAK8sC,WAAY,SAACtqD,EAAGrZ,GAAJ,MAAUqZ,GAAE0iD,QAAUA,IAAO,EACjE,QAAcl6D,KAAVoyI,EAKA,WAHAp9G,GAAK29J,aAAcz4H,MAAOA,GAAS,WAC/BllC,EAAK8zJ,aAAa5uH,EAAO9sB,EAAK9pB,IAKlC,IAAI42C,IAAUllC,EAAKklC,MAAO,CACtBllC,EAAKklC,MAAQA,EACbllC,EAAK+8J,aAAaziL,IAAI0lB,EAAKklC,OAC3BllC,EAAK+rC,SAAWqxE,EAAMv5H,IAAM,EAC5Bmc,EAAKrM,OAEL,KAAK,GAAIxqB,GAAI,EAAG0a,EAAMmc,EAAKuwC,UAAUzmE,OAAQX,EAAI0a,EAAK1a,IAAK,CACvD,GAAIkvL,GAAWr4J,EAAKuwC,UAAUpnE,EAC1BkvL,GAASh9K,MACTg9K,EAASh9K,OAGb2kB,EAAKm/J,iBACLn/J,EAAKm/J,gBAAgB9jL,WAKjBrQ,KAARotC,OAA8BptC,KAATsjB,GAErB0R,EAAKoY,IAAM,EACXpY,EAAK1R,KAAO0R,EAAK+rC,WAGjB/rC,EAAKoY,QAAcptC,KAARotC,EAAoBp+B,KAAKC,IAAIm+B,EAAK,GAAK,MACrCptC,KAATsjB,GAGA0R,EAAKoY,IAAMp+B,KAAKC,IAAI+lB,EAAKoY,IAAM,GAAI,GACnCpY,EAAK1R,KAAO0R,EAAKoY,IAAM,IAGvBpY,EAAK1R,KAAOtU,KAAKy4B,IAAInkB,EAAM0R,EAAK+rC,WAIxC/rC,EAAKs+J,mBAgBbp+H,MAAO,SAASuF,GAEZA,EAAMA,EAAI11D,QAAQ,KAAM,IAGxB01D,EAAMA,EAAI11D,QAAQ,QAAS,IAG3B,IAAI0vL,GAAYh6H,EAAIvjD,MAAM,OAEtBgjD,EAAQu6H,EAAU,GAClBZ,EAAUY,EAAU,GAAKl5J,SAASk5J,EAAU,GAAI,QAAMz0L,GACtD8zL,EAAWW,EAAU,GAAKl5J,SAASk5J,EAAU,GAAI,QAAMz0L,EAE3D0C,MAAKomL,aAAa5uH,EAAO25H,EAASC,IAGtC3K,cAAe,SAASuL,GACpB,GAAI1/J,GAAOtyB,KACPywL,EAAOn+J,EAAK1R,KAAO0R,EAAKoY,GAC5B1qC,MAAKowL,WAAW4B,EAAWvB,IAG/BL,WAAY,SAASD,GAKjB,GAAI79J,GAAOtyB,KACPiyL,EAAqB3/J,EAAK1R,KAAO0R,EAAKoY,GAEtCpY,GAAKoY,IAAMylJ,EAAc79J,EAAKosC,SAC9BpsC,EAAKoY,IAAMpY,EAAKosC,QAChBpsC,EAAK1R,KAAO0R,EAAKosC,QAAUuzH,GACpB3/J,EAAK1R,KAAOuvK,EAAc79J,EAAK+rC,UACtC/rC,EAAK1R,KAAO0R,EAAK+rC,SACjB/rC,EAAKoY,IAAMpY,EAAK+rC,SAAW4zH,IAE3B3/J,EAAK1R,MAAQuvK,EACb79J,EAAKoY,KAAOylJ,GAQhB79J,EAAKs+J,gBAAiBsB,YAAY,IAG9BlyL,KAAKmyL,mBACLj1L,aAAa8C,KAAKmyL,mBAGtBnyL,KAAKmyL,kBAAoB5zL,WAAW,WAChC+zB,EAAKs+J,kBACN,IAGH,IAAIp5H,GAAQllC,EAAK+8J,aAAaziL,KAC9B5M,MAAKixL,iBAAiBz5H,EAAOllC,EAAKoY,IAAKpY,EAAK1R,MAAM,IAMtDqkK,aAAc,SAAS0F,GACnBc,EAAmBjvL,UAAUyoL,aAAatpL,KAAKqE,KAAM2qL,GACrDA,EAASh9K,OACT3N,KAAK6zC,UACL7zC,KAAKsrL,kBAIL,IAAI/hL,GAAOvJ,IACX2qL,GAASprI,OAAOh5C,GAAG,SAAU,WACzBgD,EAAKsqC,aAIbg9I,gBAAiB,SAASuB,GACtBA,EAAY9/J,KAAOtyB,KACnBoyL,EAAYzkL,OACZ3N,KAAKguL,aAAa1xL,KAAK81L,IAM3B9I,gBAAiB,SAASqB,EAAU76K,GAEhC,GADA27K,EAAmBjvL,UAAU8sL,gBAAgB3tL,KAAKqE,KAAM2qL,GACpD76K,EAAM,CACN,GAAIwiB,GAAOtyB,IACX2qL,GAASx9G,cAAcr9D,KAAK,EAAG,WAC3Bi0B,EAAE/jC,MAAM+J,SACRuoB,EAAKg5J,uBAKjBrlK,MAAO,WACHjmB,KAAK0qC,IAAM1qC,KAAK0+D,QAChB1+D,KAAK4gB,KAAO5gB,KAAKq+D,SACjBr+D,KAAK0mL,mBAAmBzoK,KAAK,eAAelU,UAOhD6mL,eAAgB,SAAStvL,EAASqpL,GAC9B,GAAIr4J,GAAOtyB,KAGXqyL,EAAa1H,GAAYA,GAAYr4J,EAAKuwC,SAG1CnhE,GAAEH,KAAK8wL,EAAY,SAAArN,GACf,GAAIsN,GAAgB5wL,EAAEuc,KAAKqU,EAAK27J,qBAAsB,SAAAx3J,GAAA,MAAMA,GAAG,KAAOuuJ,GAElEsN,GAEAA,EAAc,GAAKhxL,EAGnBgxB,EAAK27J,qBAAqB3xL,MAAM0oL,EAAO1jL,MAK1CtB,KAAKquL,mBACNlwC,sBAAsB,WAClB7rH,EAAKigK,YAETvyL,KAAKquL,kBAAmB,IAShCkE,QAAS,WAILvyL,KAAKquL,kBAAmB,CAExB,IAAI3jJ,GAAM1qC,KAAK0qC,IACX9pB,EAAO5gB,KAAK4gB,IAEZ8pB,GAAM1qC,KAAK0+D,UACXh0B,EAAM1qC,KAAK0+D,SAEX99C,EAAO5gB,KAAKq+D,WACZz9C,EAAO5gB,KAAKq+D,SAEhB,IAAIoyH,GAAOzwL,KAAK4gB,KAAO5gB,KAAK0qC,GACV,KAAd1qC,KAAK4gB,MAAc6vK,EAAOzwL,KAAKmuL,iBAC/BvtK,EAAO8pB,EAAM1qC,KAAKmuL,gBAEtBnuL,KAAK0qC,IAAMp+B,KAAKs+B,MAAMF,GACtB1qC,KAAK4gB,KAAOtU,KAAKy+B,KAAKnqB,GAEtB5gB,KAAK0wL,gBAAgB1wL,KAAK0qC,IAAK1qC,KAAK4gB,MAKpC5gB,KAAKwyL,gBAAkBxyL,KAAK0mL,mBAAmBx7K,SAAWlL,KAAK4gB,KAAO5gB,KAAK0qC,IAG3E,IAAI+nJ,GAAUzyL,KAAK0qC,KAAO1qC,KAAKq+D,SAAWr+D,KAAK0+D,SAAW1+D,KAAK8uL,kBAAkB5jL,SAAW,EACxFwnL,GAAY1yL,KAAK4gB,KAAO5gB,KAAK0qC,MAAQ1qC,KAAKq+D,SAAWr+D,KAAK0+D,SAAW1+D,KAAK8uL,kBAAkB5jL,SAAW,CAG3GlL,MAAKkvL,aACA7rL,KACG6xB,KAAMu9J,EACNvnL,MAAOoB,KAAKC,IALD,GAKmBmmL,KAEjCrlL,OACDqlL,EARe,IASf1yL,KAAKkvL,aAAa7rL,IAAI,OAAQovL,GATf,GASyCC,GAAY,GAEpE1yL,KAAKgvL,oBACLhvL,KAAKgvL,mBAAmB3rL,KACpB6xB,KAAMu9J,EACNvnL,MAAOwnL,IAKfhxL,EAAEH,KAAKvB,KAAKiuL,qBAAsB,SAAAqE,GAC9B,GAAItN,GAAQsN,EAAc,GACtBhxL,EAAUgxL,EAAc,EACxBtN,IACAA,EAAMiG,MAAM3pL,KAGpBtB,KAAKiuL,wBAGLvsL,EAAEH,KAAKvB,KAAKguL,aAAc,SAAAoE,GACtBA,EAAYnH,WAIpB+E,QAAS,SAAS2C,EAAO9/J,GACrB,KAAsB,IAAlB7yB,KAAKq+D,UAAkBr+D,KAAK4gB,KAAO5gB,KAAK0qC,KAAO1qC,KAAKmuL,gBAAxD,CAGA,GAAIsC,GAAOzwL,KAAK4gB,KAAO5gB,KAAK0qC,IACxBkoJ,EAAanC,EAAO,EAAIzwL,KAAK0qC,IAC7BmoJ,EAAWpC,EAAOzwL,KAAKkuL,YAAc,CACrCyE,KACAC,EAAaD,EAAQ3yL,KAAK0mL,mBAAmBx7K,SAAWlL,KAAK4gB,KAAO5gB,KAAK0qC,KAAO1qC,KAAK0qC,KAEzF1qC,KAAK0qC,IAAMp+B,KAAK4xC,MAAM00I,EAAaC,GACnC7yL,KAAK4gB,KAAOtU,KAAK4xC,MAAM00I,EAAaC,GAEpC7yL,KAAK6zC,UACL7zC,KAAK4wL,mBAGTd,SAAU,WACN,GAAsB,IAAlB9vL,KAAKq+D,SAAT,CAGA,GAAIoyH,GAAOzwL,KAAK4gB,KAAO5gB,KAAK0qC,IACxBkoJ,EAAanC,EAAO,EAAIzwL,KAAK0qC,IAC7BmoJ,EAAWpC,EAAOzwL,KAAKkuL,YAAc,CACzCluL,MAAK0qC,IAAMp+B,KAAK4xC,MAAM00I,EAAaC,GACnC7yL,KAAK4gB,KAAOtU,KAAK4xC,MAAM00I,EAAaC,GACpC7yL,KAAK6zC,UACL7zC,KAAK4wL,mBAITkC,gBAAiB,WACb9yL,KAAK0mL,mBAAmBv4K,OACpBnO,KAAK6yB,UAAU1kB,SAAWnO,KAAKuuL,cAAcpgL,SAAWnO,KAAKyuL,iBAAiBtgL,WAKtF04K,cAAe,WACX7mL,KAAK8yL,kBACL9yL,KAAK4wL,kBAITvK,aAAc,SAASsE,GACnB,GAAI3qL,KAAKukL,kBAAmB,CAGxB,GAAIvkL,KAAKukL,kBAAkB5oH,QAAQhjD,KAAOgyK,EAAShvH,QAAQhjD,GACvD,MAEJ3Y,MAAK8uL,kBAAkB7wK,KAAK,UAAUlU,SAI1C,GAAIw6K,GAAoBoG,EAASr0K,MAC7B81K,YAAapsL,KAAK8uL,oBAGlBx8J,EAAOtyB,IACXukL,GAAkB6F,WAAWt6K,OAC7By0K,EAAkBwF,aAAc,EAChCz3J,EAAKiyJ,kBAAoBA,EACzBvkL,KAAKukL,kBAAkBwO,iBAAmB,WACtCzgK,EAAK08J,mBAAmB3hL,OAAOc,OAAOmkB,EAAKiyJ,kBAAkB6H,YAAYj+K,UACzEmkB,EAAKw8J,kBAAkB3gL,OACnBmkB,EAAKiyJ,kBAAkB6H,YAAYj+K,SAAWmkB,EAAK48J,aAAa9vE,eAEpE9sF,EAAKy8J,eAAe1hL,OACpBilB,EAAKu0J,iBAETv0J,EAAKiyJ,kBAAkByG,eACvBhrL,KAAK6zC,WAITw8I,eAAgB,WAEZtsJ,EAAE,YAAYh6B,SACd/J,KAAK8uL,kBAAkB7wK,KAAK,eAAelU,SAC3C/J,KAAK8uL,kBAAkB3gL,OAAOnO,KAAKmvL,yBACnCnvL,KAAKkvL,aAAa/gL,OAAOnO,KAAKmvL,yBAC9BnvL,KAAK+uL,eAAej/K,OACpB9P,KAAKgvL,mBAAmBl/K,OACxBwiB,KAAKu0J,gBACLv0J,KAAKiyJ,kBAAoB,OAOjC,IAAIyO,GAAgBpK,EAAAlpI,QAAU2xF,KAAKlpI,QAC/BklC,UACI23I,MAAO,MAGXlxI,WAAY,SAASxyC,GACjBsnL,EAAAlpI,QAAU2xF,KAAK70I,UAAUs3C,WAAWn4C,KAAKqE,KAAMsB,EAG/C,IAAIgM,IAAS,MACchQ,KAAvBgE,EAAQ2xL,gBAA0D31L,KAA9BgE,EAAQ2xL,WAAW3lL,SACvDA,EAAShM,EAAQ2xL,WAAW3lL,QAEhCtN,KAAK4C,IAAI,SAAU0K,GAKnBtN,KAAKwxI,eAAe,OAAQ,cAAe,iBAG/C0hD,WAAY,SAAS5xL,GACjB,MAAOI,GAAEyG,OAAOnI,KAAKuyI,mBACjBjlI,QAAStN,KAAKwwI,kBAQtB2iD,EAAoBpiJ,EAASuG,KAAKnvC,QAClCJ,QACIotI,gBAAiB,gBAGrB3kG,OAAQ,WACJ,GAAI4iJ,GAAYpzL,KAAK23C,IAAI1e,SAAS,aAC9B2F,EAAQ5+B,KAAK0xC,KAGD3N,GAAE,SACb9K,SAAS,eACT7hB,KAAKwnB,EAAM1/B,IAAI,UACfmL,SAAS+oL,EAECrvJ,GAAE,UACZ9K,SAAS,eACTxvB,KAAKm1B,EAAM1/B,IAAI,SACfmL,SAAS+oL,GAELn1K,KAAK,UAAUrR,IAAIgyB,EAAM1/B,IAAI,UAGtC6kC,EAAE,+BAA+B15B,SAAS+oL,IAG9CC,aAAc,SAASC,GACnBtzL,KAAK0xC,MAAMm7B,UAAU9oC,EAAEuvJ,EAAapgL,QAAQtG,UAOhD2mL,EAAoBxiJ,EAASuG,KAAKnvC,QAClC2rC,WAAY,SAASxyC,GACjBtB,KAAK0xC,MAAMnrC,GAAG,gBAAiBvG,KAAKwzL,YAAaxzL,OAMrDwwC,OAAQ,WACJ,GAAIjnC,GAAOvJ,KACPyxI,EAAOzxI,KAAK0xC,MACZ46I,EAAatsL,KAAK23C,IAAI1e,SAAS,gBAAgBnpB,MAGnDw8K,GACK/oJ,KAAK,OAAQ,SAAA1mC,GACVA,EAAE6xB,oBAEL0B,MAAM,SAAAvzB,GACHA,EAAE6xB,oBAEL6U,KAAK,WAAY,SAAA1mC,GACdA,EAAE6xB,oBAEL0/F,QAAQ,SAAAvxH,GACLA,EAAE6xB,mBAIKqV,GAAE,2BACZ15B,SAASiiL,GACTl1K,KAAKq6H,EAAKvyI,IAAI,QACnBuyI,GAAKvyI,IAAI,UAAUqC,KAAK,SAAAq9B,GAEpB,GAAI60J,GAAa,GAAIN,IAAoBzhJ,MAAO9S,GAChD60J,GAAWjjJ,SACX87I,EAAW76J,OAAOgiK,EAAW97I,OAIjC20I,EAAWruK,KAAK,SAASmS,MAAM,WAC3B2T,EAAE/jC,MAAMwZ,UAIZ,IAAIk6K,GAAe3vJ,EAAE,SAChB9K,SAAS,aACT5uB,SAASiiL,GACVqH,EAAwB5vJ,EAAE,yBACzBnhB,KAAK,QAAS,2BACdvY,SAASqpL,EACa3vJ,GAAE,yBACxBnhB,KAAK,QAAS,yBACdvY,SAASqpL,GACOtjK,MAAM,WAEvB7mB,EAAKqqL,kBAETD,EAAsBvjK,MAAM,WACxB7mB,EAAKsqL,mBAGLpiD,EAAKjB,cACLxwI,KAAK23C,IAAItqC,QAOjBmmL,YAAa,WACTxzL,KAAK23C,IAAI/oC,OAAO5O,KAAK0xC,MAAM8+F,eAM/BsjD,cAAe,WACX,IAAK,GAAIr4L,GAAI,EAAGA,EAAIuE,KAAK8hC,OAAO1lC,OAAQX,IACpCuE,KAAK8hC,OAAOrmC,GAAG43L,gBAOvBQ,eAAgB,WACZ,GAAIpiD,GAAOzxI,KAAK0xC,KAChB1xC,MAAKkR,KAGGohI,kBAAmBtyI,KAAK0xC,MAAMxyC,IAAI,SAASy8D,QAAQhjD,GACnDsiE,OAAQ,QACR03D,QAASlB,EAAK94H,IAElB,KACA,SAAAqvK,GACIpqI,OAAOga,MAAMvqD,MACT0uC,MAAU01F,EAAKvyI,IAAI,QAAnB,cACAoL,KAASmnI,EAAKvyI,IACV,QADJ,8EAGA2qD,SACI4gF,MAAO,WACH7sF,OAAOga,MAAM9nD,cAYrC8jL,cAAe,WAIX,GAsBI/gK,GAtBAmyJ,EAAQhlL,KAAK0xC,MAAMxyC,IAAI,SAEvBuyI,EAAOzxI,KAAK0xC,MAEZ8qB,EAAS,GAAIihH,GAAA/9H,QAAc2f,cAC3B7H,MAAOwtH,EAAM1yJ,KAAKklC,MAClB3zD,MAAOmhL,EAAM1yJ,KAAKoY,IAClB5mC,IAAKkhL,EAAM1yJ,KAAK1R,OAGhBmzK,GACAzhD,kBAAmB0yC,EAAMrpH,QAAQhjD,GACjCsiE,OAAQ,QACR03D,QAASlB,EAAK94H,GACd05H,SAAU71E,EAAO1rB,WAGjBkjJ,EAAgBhP,EAGpBiP,EAAaxiD,EAAKvyI,IAAI,QAAU80L,EAAcE,+BAA+B13H,EAM7E,IAAIw3H,EAAcnhK,YAAcP,KAAM,CAElC,GAAIsW,GAAQ,GAAIu8I,GAAc7yJ,KAAMA,MAChC1zB,KAAMomL,EAAMzlI,OAAOwtB,UAAU,UAI7BzjE,EAAQ0qL,EAAcnhK,UAAUg5J,iBAAiBmI,EAAeprJ,GAAO,EAK3EA,GAAMukC,cAAcx7C,aAAaqiK,EAAc1hK,KAAK85J,YAAY9kK,WAAWhe,IAC3Es/B,EAAMq8I,aAAa+O,GACnBA,EAAc7mH,cAAc9iE,SAASu+B,EAAMwjJ,aAC3Cv5J,EAAY+V,MAGZ/V,GAAYmhK,EAAcnhK,SAI9B,IAAIshK,GAAY,GAAIH,GAAcn+K,YAAYyc,KAAMO,GAChDj0B,KAAMq1L,EACNv/H,SAAU,OAEdy/H,GAAUC,qBACVD,EAAUE,YAAYL,EAAc93H,MACpCi4H,EAAUG,oBAAoBN,EAAcj4H,gBAAgBzlD,KAAK69K,IACjEA,EAAU5I,eACV14J,EAAUoyJ,aAAakP,GACvBA,EAAUrH,UAAU11K,KAAK,iBAGzBpX,KAAKkR,IAAI6iL,EAAYI,EAAW,SAAAnM,GAC5BmM,EAAUI,YAAY,GAAI77H,GAAAhZ,QAAK+U,QAAQuzH,IACvCmM,EAAUrH,UAAU11K,KAAK,gBACzB+8K,EAAUxmL,UAOlBuD,IAAK,SAAS6iL,EAAYI,EAAWK,GAEjCT,EAAW/mI,OAAShtD,KAAK0xC,MAAM6gG,iBAC/B,IAAI31E,GAAc,GAAIhE,GAAAlZ,QAAKmd,qBACvBC,eACIhhC,IAAQ8hB,OAAO/4B,KAAf,YACAziB,KAAM04B,KAAKyd,UAAUw7I,GACrB1hL,SAAU,OACV6pB,YAAa,mBACbl+B,KAAM,QAEVu5B,SAAU,IACVgiC,WAAY,SAASvlD,GACjB,MAAoB,YAAbA,IAQf+vB,GAAExa,KAAKqzC,EAAYG,MAAMh0C,KAAK,SAAA/U,GACT,iBAAbA,GAEAmgL,EAAUhnH,cAAcl0C,SAAS,SACjCk7J,EAAU/H,YAAYh1K,KAAKqyK,IACpBz1K,EAAStU,OAEhBy0L,EAAUhnH,cAAcl0C,SAAS,SACjCk7J,EAAU/H,YAAYh1K,KAv2DX,yBAu2DuCpD,EAASsyC,UAG3DkuI,EAAiBxgL,QAS7BygL,EAAe,SAASzzL,EAAQ0zL,GAChClM,EAAA9oI,QAASi1I,OAAOh5L,KAAKqE,KAAM00L,GAC3B10L,KAAKgB,OAASA,EAGlByzL,GAAaj4L,UAAUo4L,QAAU,SAASC,GAEtC,MACI70L,MAAKgB,OAAO4f,OAASq5D,OAAO66G,WAC5B90L,KAAKgB,OAAO0pC,OAASuvC,OAAO66G,WAC5B90L,KAAKgB,OAAO0pC,MAAQ1qC,KAAKgB,OAAO4f,KAEzB5gB,KAAK00L,aAIRvnL,WAAW0nL,EAAa70L,KAAKgB,OAAOsI,QAAUtJ,KAAKgB,OAAO0pC,MAAQ1qC,KAAKgB,OAAO4f,KAAO5gB,KAAKgB,OAAO0pC,KAM7G,IAAIqqJ,GAAO,SAAS/P,EAAOxoH,EAAQw4H,EAASl6H,EAAQ14D,GAChDpC,KAAKglL,MAAQA,EACbhlL,KAAKw8D,OAASA,EACdx8D,KAAK0qC,IAAM8xB,EAAOt9D,IAAI,SACtBc,KAAK4gB,KAAO47C,EAAOt9D,IAAI,OACvBc,KAAKg1L,QAAUA,EACfh1L,KAAK86D,OAASA,EAEd96D,KAAKi1L,SAAWlxJ,EAAE,6BAA6BtS,OAAOqpC,GACtD96D,KAAKoC,KAAOA,EACZpC,KAAKs7D,OAAQ,EAMjBy5H,GAAKv4L,UAAU04L,mBAAqB,YAEpC,IAAIC,GAAgB,SAASnQ,EAAOxoH,EAAQw4H,EAASl6H,EAAQ14D,GACzD2yL,EAAKp5L,KAAKqE,KAAMglL,EAAOxoH,EAAQw4H,EAASl6H,EAAQ14D,GAEpD+yL,GAAc34L,UAAU04L,mBAAqB,YAE7C,IAAIE,GAAmB,SACnBpQ,EACAxoH,EACAw4H,EACAl6H,EACA14D,EACA85D,EACA5V,EACA+uI,EACAC,EACAC,EACAC,GAGAT,EAAKp5L,KAAKqE,KAAMglL,EAAOxoH,EAAQw4H,EAASl6H,EAAQ14D,GAChDpC,KAAKk8D,KAAOA,EACZl8D,KAAKq1L,YAAcA,EACnBr1L,KAAKs1L,eAAiBA,EACtBt1L,KAAKy1L,WAAY,EACjBz1L,KAAKu1L,oBAAsBA,EAE3Bv1L,KAAK01L,8BACL11L,KAAKw1L,SAAWA,EAuDpBrtL,GAAOitL,EAAiB54L,UAAWu4L,EAAKv4L,WAKxC44L,EAAiB54L,UAAU04L,mBAAqB,YAiHhD,IAAIS,GAAQ,SAASrjK,EAAMO,EAAW+2J,GAElCzhL,EAAOyhL,GACHE,kBAAmB,eAEvBH,EAAShuL,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GAOrC5pL,KAAK27D,QAAU,KACXiuH,EAASjuH,UAET37D,KAAK27D,QACDiuH,EAASjuH,kBAAmB5qB,GAAS2C,MAAQk2I,EAASjuH,QAAU,GAAIjD,GAAAhZ,QAAK+U,QAAQm1H,EAASjuH,UAElG37D,KAAK41L,mBAAqB,2BAC1B51L,KAAK61L,yBACL71L,KAAK81L,gBAAkB,mBAAqBlM,GAAWA,EAASkM,gBAtoEtC,IAwoE1B91L,KAAKu+D,aACD,gBAAkBqrH,GACZA,EAASrrH,aACT,GAAIk/G,GAAA/9H,QAAcgc,mBACdC,QAAS37D,KAAK27D,QAGdC,OAAQ,GAAI6hH,GAAA/9H,QAAcwgB,QACtB/9D,IAAKmwB,EAAK8tC,MACVD,aACIhB,WAAY7sC,EAAK8sC,cAGzBpD,qBAAsBh8D,KAAK+1L,yBAC3B55H,WAAYn8D,KAAKm8D,aAI/Bn8D,KAAKg2L,cAAgB,GACrBh2L,KAAKi2L,cAAgB,IACrBj2L,KAAKk2L,kBAAoBl2L,KAAKu/C,OAAOwtB,UAAU,UAK/C/sE,KAAKosL,YAAcroJ,EAAE,+BAA+B15B,SAASrK,KAAKmtE,eAC9DntE,KAAK6yB,YACL7yB,KAAK6yB,UAAUu5J,YAAY36J,OAAOzxB,KAAKmtE,eACjC,UAAYy8G,KAAaA,EAAStiH,QACpCtnE,KAAKm2L,qBAKjBhuL,GAAOwtL,EAAMn5L,UAAWmtL,EAASntL,WAC7BguL,mBAGQ5rL,KAAM,YACNm9C,MAAO,mBACP0uI,UAAW,iBACXC,YAAa,cAGjBf,EAASntL,UAAUguL,iBAAiB,IAGhC5rL,KAAM,gBACNm9C,MAAO,kBACP0uI,UAAW,uBACXC,YAAa,SAAS1F,GAClBA,EAAM1yJ,KAAK+zJ,aAAarB,KAIhC2E,EAASntL,UAAUguL,iBAAiB,IAGhC5rL,KAAM,eACNm9C,MAAO,UACP0uI,UAAW,gBACXC,YAAa,SAASC,GAEdA,EAAS5uH,gBAAgBz8B,UACzBqrJ,EAAS5uH,gBAAgB4wH,gBAEzBhC,EAAS5uH,gBAAgB+xH,eAE7BnD,EAAS5uH,gBAAgBntD,YAK7BhQ,KAAM,aACNm9C,MAAO,OACP0uI,UAAW,SACXC,YAAa,SAAS1F,GAGlBA,EAAMvzC,KAAK7iI,SAGPo2K,EAAMvzC,KAAKjB,aACXw0C,EAAMkG,SAASlG,EAAMzlI,OAAOwtB,UAAU,QAAUi4G,EAAMkP,kCAEtDlP,EAAMqG,cAGVtnJ,EAAE,YAAYh6B,YAKlBnL,KAAM,uBACNm9C,MAAO,qCACP0uI,UAAW,cACXC,YAAa,SAAS1F,GAClB,GAAIv7K,4BAAgCu7K,EAAMvzC,KAAKvyI,IAC3C,QADA,iCAE8B8lL,EAAMzlI,OAAOwtB,UAC3C,QAHA,iOAMAc,EAAY,WACZjwB,OAAOga,MAAM9nD,OACbi0B,EAAEloC,QAAQ2nC,OAAO,6BAGjBsqC,EAAQ,WACR,GACIukE,GADA+jD,EAAiBryJ,EAAE,0CAA0Cn3B,MAE7DypL,EAAc,GAAI5Y,GAAA/9H,QAAc2f,cAC5B7H,MAAOllC,KAAKklC,MACZ3zD,MAAOyuB,KAAKoY,IACZ5mC,IAAKwuB,KAAK1R,OAEd01K,EAAqB50L,EAAEgI,IACnBq6B,EAAE,aACF,SAAAiqG,GAAA,MACI,IAAIyvC,GAAA/9H,QAAc2f,cACdqB,SAAU38B,EAAEiqG,GACP1mH,SAAS,aACTlQ,UAOjBi7H,GAFmB,QAAnB+jD,GAEWC,GACe,cAAnBD,EAEGE,GAGCD,GAAaztL,OAAO0tL,GAGnC14I,OAAOga,MAAM9nD,OAGbjU,OAAO+oB,SAASI,KAAU44B,OAAO/4B,KAAjC,2BAAgEkf,EAAEnF,OAC9D64B,WAAYutH,EAAMrpH,QAAQhjD,GAC1B+7C,SAAUswH,EAAMrpH,QAAQz8D,IAAI,YAC5BmzI,QAASv3G,KAAKyd,UAAU,GAAIxH,GAAS0E,WAAW48F,GAASvhG,YAejE8M,QAAOga,MAAMvqD,MACT0uC,MAAO,+EACPzxC,KAAMb,EACNogD,SAAW0sI,GAAI1oH,EAAW2oH,IAAK1oH,OAK3C67G,EAASntL,UAAUguL,iBAAiB,IAGxCO,SAAU,WACN,MAAO/qL,MAAK27D,SAAWguH,EAASntL,UAAUuuL,SAASpvL,KAAKqE,OAG5DmqL,oBAAqB,WACjB,MAAOpmJ,GAAE,UACJ9K,SAAS,SACTrW,KAAK,KAFH,SAEkB5iB,KAAK2Y,KAMlC47K,YAAa,SAAS54H,GAClB37D,KAAK27D,QAAUA,EACf37D,KAAKu+D,aAAa37D,IAAI,UAAW+4D,IAMrC86H,UAAW,WACPz2L,KAAKgrL,cAAe6B,kBAAkB,KAM1CsJ,kBAAmB,WACf,GAAInR,GAAQhlL,KACR02L,GAAY,EACZC,GAAU,EACVC,EAAe7yJ,EAAE,6BAErBA,GAAEihJ,EAAM73G,eAAe5yC,MACnB,WACQyqJ,EAAMzlI,OAAOwtB,UAAU,qBACvB2pH,GAAY,EACZE,EAAavpL,SAGrB,WACIqpL,GAAY,EACPC,GACDC,EAAa9mL,SAMzB8mL,EACK9mL,OACAyzB,KAAK,YAAa,SAAC1mC,EAAG8B,GACnBg4L,GAAU,EACVh4L,EAAEk4L,gBAAkB9yJ,EAAEihJ,EAAMoH,aAAaj+K,WAE5Co1B,KAAK,OAAQ,SAAC1mC,EAAG8B,GACd,GAAIm4L,GAAaxqL,KAAKy4B,IAClBz4B,KAAKC,IAAI5N,EAAEk4L,gBAAkBl4L,EAAEs1E,OAAQ+wG,EAAMgR,eAC7ChR,EAAMiR,cAEVlyJ,GAAEihJ,EAAM8H,WAAWzpL,IAAI,SAAUyzL,GACjC9R,EAAMkR,kBAAoBlR,EAAMiR,gBAAkBa,EAAa,EAAIA,EACnE9R,EAAMyR,cAETlzJ,KAAK,UAAW,SAAC1mC,EAAG8B,GACjBqmL,EAAM+R,WAAWriJ,QACjBiiJ,GAAU,EACLD,GACDE,EAAa9mL,OAEjBk1K,EAAMzlI,OAAOstB,UAAU,SAAUm4G,EAAMkR,mBACvClR,EAAMnxI,YAETxpC,SAAS26K,EAAM73G,gBAOxB09G,cAAe,WAEX7qL,KAAK8sL,UAAUh9K,OAEf9P,KAAKmtE,cAAclvD,KAAK,8BAA8BnO,QAG1Dg7K,cAAe,WAEX9qL,KAAK8sL,UAAUz/K,OACfrN,KAAKmtE,cAAclvD,KAAK,8BAA8B5Q,OAEtDrN,KAAKgrL,gBAMToC,SAAU,WAEN,MAAIptL,gBAAgB8wL,GACT,aACA9wL,eAAgBwxL,GAChB,iBACAxxL,eAAgBwtL,GAChB,YACAxtL,eAAgBg3L,IAChB,YACAh3L,eAAgBi3L,IAChB,eACAj3L,eAAgBktL,GAChB,iBACAltL,eAAgButL,GAChB,eAEJ,IAMXxmD,aAAc,SAASmwD,GAEnB,MADAl3L,MAAK8sL,UAAU/iL,SACRg6B,EAAE,WACJ9K,SAAS,WACTxvB,KAAKytL,GACL7sL,SAASrK,KAAKosL,cAMvBz+K,KAAM,SAASwpL,GAIX,GAAInS,GAAQhlL,IAqBZ,IApBAglL,EAAM9/J,SAAU,EAChB8/J,EAAM+R,WAAWriJ,QACjBswI,EAAMzmH,aAAa7pB,QAOnBswI,EAAMoH,YAAY9kK,WAAWvd,SAC7Bi7K,EAAM73G,cAAc7zC,YAAY,wBAEhC0rJ,EAAM8H,UAAY/oJ,EAAE,UACf9K,SAAS,SACT5uB,SAAS26K,EAAMoH,aAMfpH,EAAMrpH,QAAQhjD,GAAnB,CAMA,GAAIy+K,GAAgBrzJ,EAAEtzB,WAElBqxB,GACA4yB,SAAUswH,EAAMrpH,QAAQz8D,IAAI,YAC5B46D,UAAW95D,KAAK41L,mBAChBp+H,MAAOwtH,EAAM1yJ,KAAKklC,MAClB2/H,MAAOA,EAyEX,OAtEApzJ,GAAE/E,QAAQh/B,KAAK27D,QAAQ7/B,MAAOgG,EAAQ,SAAA5lC,GAClC,GAAKA,GAAqB,UAAXA,GAAsC,UAAhBA,EAAOm7L,KA8BtB,iBAAXn7L,GACP8oL,EAAM73G,cAAcl0C,SAAS,SAC7B+rJ,EAAMj+C,aAAa0iD,IAER,YAAXvtL,OACiBoB,KAAhBpB,EAAOkG,OAAuC,OAAhBlG,EAAOkG,MAAwC,IAAvBlG,EAAOkG,KAAKhG,SAEnE4oL,EAAM73G,cAAcl0C,SAAS,UAC7B+rJ,EAAMj+C,aA7/EN,mCA8/EkB,YAAX7qI,GACP8oL,EAAM73G,cAAcl0C,SAAS,WAC7B+rJ,EAAMj+C,aA7/ElB,qJA+/EYxoI,WAAW,WACPymL,EAAMr3K,QACPq3K,EAAM8Q,kBACS,SAAX55L,GAAuC,SAAlBA,EAAO4gC,SAC/B5gC,EAAOo7L,eACPtS,EAAMsS,aAAep7L,EAAOo7L,aAC5BtS,EAAMuG,gBAEVvG,EAAM8H,UAAU11K,KAlgFlB,qBAmgFM4tK,EAAM1yJ,KAAKklC,OACXwtH,EAAM8H,UAAU11K,KAAK,IACrB4tK,EAAM8H,UAAUzpL,IAAI,SAAa2hL,EAAMkR,kBAAvC,MACAlR,EAAM9/J,SAAU,EAEhB6e,EAAExa,KAAKxiB,MAAMg9B,EAAGihJ,EAAMuS,gBAAgB1nL,KAAK,WACvCunL,EAAc35L,UACdunL,EAAM73G,cAAc7zC,YAAY,wBAChC0rJ,EAAMgG,kBAGVoM,EAAc35L,eA/DwC,CAE1DunL,EAAM73G,cAAcl0C,SAAS,QAC7B,IAAIu+J,GAAUxS,EAAMj+C,aA99EnB,2CA+9EG7qI,GAAOoqD,UAEPkxI,EAAQ/lK,OACJsS,EAAE,sCACG3sB,KAAK,cACLgZ,MAAM,WACHwtB,OAAOga,MAAMvqD,MACT0uC,MAAO,kBACPzxC,aAAcpO,EAAOoqD,QAArB,SACAuD,SACI4gF,MAAO,WACH7sF,OAAOga,MAAM9nD,cAMrC0nL,EAAQ/lK,OAAOsS,EAAE,WAAW3sB,KAAK,MACjCogL,EAAQ/lK,OACJsS,EAAE,sCACG3sB,KAAK,aACLgZ,MAAM,WACH40J,EAAMr3K,MAAK,UA0CnC3N,KAAKurL,eACE6L,IAMXG,aAAc,WACV,GAAIvS,GAAQhlL,IACZ,OAAO+jC,GAAE/E,QACLgmJ,EAAMrpH,QAAQ7/B,OAEVg+B,UAAW,OACX29H,OAAO,EACPjgI,MAAOwtH,EAAM1yJ,KAAKklC,MAClB9sB,IAAK,EACL9pB,KAAMokK,EAAM1yJ,KAAK+rC,SACjB3J,SAAUswH,EAAMrpH,QAAQz8D,IAAI,aAEhC,SAAAhD,GACI,GAAIkG,GAAOlG,EAAOkG,IAGlB,IAAIA,OAAqB9E,KAAb8E,EAAK2iC,SAAkCznC,KAAb8E,EAAKmK,IAAmB,CAE1D,GAAImrL,GAAYt1L,EAAK2iC,IAEjB4yJ,EAAYv1L,EAAKmK,GAGrBmrL,GAAYprL,KAAKs+B,MAAMt+B,KAAKy4B,IAAI,EAAGz4B,KAAKC,IAAImrL,EAAWt1L,EAAKw1L,KAAO,EAAIx1L,EAAKy1L,MAC5EF,EAAYrrL,KAAKy+B,KAAKz+B,KAAKC,IAAI,EAAGD,KAAKy4B,IAAI4yJ,EAAWv1L,EAAKw1L,KAAO,EAAIx1L,EAAKy1L,MAE3E7S,EAAMzlI,OAAOytB,kBAAkB,YAAa0qH,GAC5C1S,EAAMzlI,OAAOytB,kBAAkB,YAAa2qH,GAC5C3S,EAAMzlI,OAAOstB,UAAU,YAAa6qH,GACpC1S,EAAMzlI,OAAOstB,UAAU,YAAa8qH,OASpDnM,cAAe,WACX,MAAOxrL,QAIf,IAAI83L,GAAa,SAASxlK,EAAMO,EAAW+2J,GACvC+L,EAAMh6L,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,EAElC,IAAI5E,GAAQhlL,IAsBZ,IAnBAipL,EAASjE,EAAM73G,cAAe63G,EAAM8E,kBAAmB,SAAU9E,GAGjEhlL,KAAK+7D,gBAAkB,GAAI2sH,GAAAhpI,QAAY2sI,eAAersL,KAAM,WAAa4pL,GAAWA,EAAS1jK,QAAU,MAGvGlmB,KAAKu+D,aAAa37D,IAAI,kBAAmB5C,KAAK+7D,iBAC9C/7D,KAAK+3L,mBAAoB,EACzB/3L,KAAKyxI,KAAOm4C,EAASn4C,KACf,GAAIuhD,GACAtxL,EAAEyG,OAAOyhL,EAASn4C,MACduzC,MAAOhlL,KACPizL,WAAYrJ,EAASqJ,cAG7B,KACNjzL,KAAK+2L,WAAa,GAAItZ,GAAA/9H,QAAcsb,MA1lFlB,IA2lFlBh7D,KAAKg4L,YAAc,EAEfh4L,KAAKoqL,aAILpqL,KAAKs0L,oBAAoBt0L,KAAK+7D,iBAK1B/7D,KAAKyxI,MAAM,CACX,GAAIqD,GAAY,GAAIy+C,IAAoB7hJ,MAAO1xC,KAAKyxI,MACpDqD,GAAUtkG,SACVxwC,KAAKi4L,iBAAmBnjD,EAAUn9F,IAClC33C,KAAKoqL,WAAWv4J,MAAM7xB,KAAKi4L,kBAKnCj4L,KAAK8sL,UAAY/oJ,EAAE,UACd9K,SAAS,SACT5uB,SAASrK,KAAKosL,aACdpsL,KAAKu/C,OAAOwtB,UAAU,oBACvB/sE,KAAK8sL,UAAUh9K,OAEnB9P,KAAKk4L,YAAcn0J,EAAE,UAChB9K,SAAS,WACT5uB,SAASrK,KAAKosL,aAEfxC,EAAS1tH,MACTl8D,KAAKq0L,YAAYzK,EAAS1tH,MAGlC/zD,GAAO2vL,EAAWt7L,UAAWmtL,EAASntL,UAAWm5L,EAAMn5L,WACnDguL,iBAAkBmL,EAAMn5L,UAAUguL,iBAAiB5hL,SAG3ChK,KAAM,sBACNm9C,MAAO,4FACP0uI,UAAW,cACXC,YAAa,SAAS1F,GAClBjhJ,EAAE,YAAYh6B,SACdi7K,EAAMmT,SAASnT,EAAM1yJ,KAAKkgK,iBAAiB4F,UAAY,EACvDpT,EAAMgG,cAAe6B,kBAAkB,KAE3C/8K,MAAM,KAOdwG,KAAM,SAASuc,GAEX,GAAI+2J,GAAW5pL,KAAKykL,SACpBt8K,GAAOyhL,GACHrrH,aAAcv+D,KAAKu+D,cAEvB,IAAI41H,GAAY,GAAIn0L,MAAK6V,YAAY7V,KAAKsyB,KAAMO,EAAW+2J,EAI3D,OAFAuK,GAAUE,YAAYr0L,KAAKk8D,MAC3Bi4H,EAAUjvK,QAAUllB,KAAKklB,QAClBivK,GAMXG,oBAAqB,SAASv4H,GAC1B/7D,KAAK+7D,gBAAkBA,EACvB/7D,KAAKoqL,WAAWv4J,MAAM7xB,KAAK+7D,gBAAgBuwH,aAO/C7H,QAAS,WACL,OACI0H,WAAYnsL,KAAKotL,WACjBzxH,SACIhjD,GAAI3Y,KAAK27D,QAAQhjD,GACjB+7C,SAAU10D,KAAK27D,QAAQz8D,IAAI,aAE/BqjE,MAAOviE,KAAKu/C,OAAOutB,oBACnB5Q,KAAMl8D,KAAKk8D,KACXh2C,QAASlmB,KAAK+7D,gBAAgB0oH,UAC9BwO,WAAYjzL,KAAKyxI,KAAOzxI,KAAKyxI,KAAKyhD,kBAO1CmF,YAAa,WACT,GAAIrT,GAAQhlL,IAEZ,OAAO+jC,GAAE/E,QACLgmJ,EAAMrpH,QAAQ7/B,OAEVg+B,UAAW,OACX29H,OAAO,EACPjgI,MAAOwtH,EAAM1yJ,KAAKklC,MAClB9sB,IAAK,EACL9pB,KAAMokK,EAAM1yJ,KAAK+rC,SACjB3J,SAAUswH,EAAMrpH,QAAQz8D,IAAI,aAEhC,SAAAhD,GACI,GAAIkG,GAAOlG,EAAOkG,IAClB,IACIysB,MAAM1hB,WAAW63K,EAAMzlI,OAAOwtB,UAAU,gBACxCl+C,MAAM1hB,WAAW63K,EAAMzlI,OAAOwtB,UAAU,eAC1C,CAEE,GAAI2qH,GAAYt1L,EAAK2iC,IAEjB4yJ,EAAYv1L,EAAKmK,GAGrBmrL,GAAYprL,KAAKs+B,MAAMt+B,KAAKy4B,IAAI,EAAGz4B,KAAKC,IAAImrL,EAAWt1L,EAAKw1L,KAAO,EAAIx1L,EAAKy1L,MAC5EF,EAAYrrL,KAAKy+B,KAAKz+B,KAAKC,IAAI,EAAGD,KAAKy4B,IAAI4yJ,EAAWv1L,EAAKw1L,KAAO,EAAIx1L,EAAKy1L,MAE3E7S,EAAMzlI,OAAOstB,UAAU,YAAa6qH,GACpC1S,EAAMzlI,OAAOstB,UAAU,YAAa8qH,OASpDtD,YAAa,SAASiE,GAClB,GAAItT,GAAQhlL,IAYZ,OAVAglL,GAAM9oH,KAAOo8H,EACbtT,EAAMzlI,OAAOstB,UAAU,OAAQyrH,GAId,SAAbA,GACAt4L,KAAKu+D,aAAa7pB,QAEtBswI,EAAMgG,cAAe6B,kBAAkB,IACvC7sL,KAAKgqL,aAAauO,UAAU31K,KAAK,QAAjC,0BAAoEoiK,EAAM9oH,KAA1E,KACO8oH,GAMXuG,aAAc,WACV,GAAIvG,GAAQhlL,IAKZglL,GAAMgF,aAAaiD,aAAar+K,OAAOo2K,EAAM+S,mBAK7C/S,EAAMgF,aAAawO,WAAW5pL,OAAsB,OAAfo2K,EAAMvzC,MAC3CuzC,EAAMgF,aAAayO,qBAAqB7pL,OAAsB,OAAfo2K,EAAMvzC,OAOzDinD,oBAAqB,SAAS1D,EAAS2D,GACnC,MAAU3D,GAAV,IAAqB2D,GAMzB3N,aAAc,SAAS1pL,GACfA,GAAWA,EAAQurL,kBACnB7sL,KAAK+2L,WAAWriJ,QAEpB10C,KAAKsyB,KAAKs+J,eAAetvL,EAAStB,OAMtC44L,YAAa,WAET54L,KAAKi2L,cAAgB,GAYzBhL,MAAO,SAAS3pL,GACZ,GAAKtB,KAAK+qL,WAAV,CAIA,GAAI8N,GAAcv3L,GAAWA,EAAQu3L,YACjCnuJ,EAAM1qC,KAAKsyB,KAAKoY,IAChB9pB,EAAO5gB,KAAKsyB,KAAK1R,KAEjB1V,EAAQlL,KAAKsyB,KAAKO,UAAU3nB,QAC5B8pL,EAAUh1L,KAAKsyB,KAAKkgK,gBACpBr1H,EAAa,EAAI63H,CAGjBh1L,MAAK+pL,cACLr/I,EAAM1qC,KAAKsyB,KAAKosC,QAChB99C,EAAO5gB,KAAKsyB,KAAK+rC,SACjB22H,EAAU9pL,GAASonB,KAAK+rC,SAAW/rC,KAAKosC,SACxCvB,EAAa,EAAI63H,GAGrBh1L,KAAK44L,cAYL54L,KAAK8sL,UAAUxlK,WAAW2R,SAAS,SAanC,KAXA,GAMI0/J,GACAG,EANJC,EAAazsL,KAAKs+B,MA71Fd,IA61FgCuyB,GAGpC67H,EAAa1sL,KAAKs+B,MAAMF,EAAMquJ,GAI1BE,KACAC,KAEGF,EAAaD,EAAan4K,GAE7B+3K,EAAc,GAAIlb,GAAA/9H,QAAc2f,cAC5B7H,MAAOx3D,KAAKsyB,KAAKklC,MACjB3zD,MAAOm1L,EAAaD,EAEpBj1L,IAAKwI,KAAKy4B,KAAKi0J,EAAa,GAAKD,EAAY/4L,KAAKsyB,KAAK+rC,YAE3Dy6H,EAAe94L,KAAKm5L,YAAYR,EAAa3D,EAAS1zL,GACtD23L,EAAc38L,KAAKw8L,GACnB/0J,EAAExa,KAAKuvK,GAAc/vK,KAAK,SAAAqwK,GACtBF,EAAM58L,KAAK88L,KAIfJ,GAAc,CAIbH,IACD74L,KAAK8sL,UACAxlK,SAAS,WACTgS,YAAY,UACZvvB,QAIT,IAAIi7K,GAAQhlL,IACZ+jC,GAAExa,KAAKxiB,MAAMg9B,EAAGk1J,GAAelwK,KAAK,WAEhCi8J,EAAM8H,UAAUxlK,SAAS,WAAWvd,SAKpCmvL,EAAQx3L,EAAEV,OAAOk4L,EAAO,SAAAnsK,GAAA,MAAW,QAANA,IACR,IAAjBmsK,EAAM98L,QACN4oL,EAAM+N,iBAAiBmG,EAAOhuL,EAAO8pL,EAAS6D,OAQ1DQ,iBAAkB,SAASr7L,EAAMs7L,GAC7B,GAAItU,GAAQhlL,KACRyqL,EAAqB,QAATzsL,EAAiB,MAAQ,SACrCoZ,EAAgB,QAATpZ,EAAiB,MAAQ,MAChCu7L,EAAqB,QAATv7L,EAAiB,YAAc,YAC3C6tD,EAAQ7rD,KAAKmtE,cAAclvD,KAAnB,eAAuCwsK,GAC/CvhL,EAAQg1C,EAAM8mI,EAAMzlI,OAAOwtB,UAAUwsH,GAAY,EAGrDD,GACIA,GACC,WACGtU,EAAMgG,cAAe6B,kBAAkB,KAG1B,IAAjBhhI,EAAMzvD,OAENyvD,EAAMz0C,KAAKlO,IAGX2iD,EAAQ9nB,EAAE,UACL3sB,KAAKlO,GACL0pD,oBACGE,SAAU,GACVG,UAAW,SAAShM,GAChBljB,EAAE,YAAYh6B,SACdi7K,EAAMzlI,OAAOstB,UAAU0sH,EAAWr7I,EAAM+I,EAAS,IACjDqyI,KAEJpmI,iBAAkB97C,EAAlB,WAEH6hB,SAXG,cAWoBwxJ,GACvBpnL,IAAI,QAASrD,KAAKu/C,OAAOwtB,UAAU,gBACxC/sE,KAAKmtE,cAAcz7C,QAAQm6B,KAQnCknI,iBAAkB,SAASmG,EAAOhuL,EAAO8pL,EAAS6D,GAO9C,GANuBn3L,EAAEV,OAAOk4L,EAAO,SAAAE,GAAA,MAAQA,aAAgBjE,KAM1C/4L,OAAS,EAAG,CAI7B4D,KAAKi2L,cAAgB,CACrB,IAAIjR,GAAQhlL,IACZ0B,GAAEH,KAAK23L,EAAO,SAAAE,GACJA,YAAgBjE,KAClBiE,EAAKnE,SAASlrL,SACdi7K,EAAMmU,YAAYC,EAAK58H,OAAQw4H,GAC3Bv5D,OAAO,EACPv/D,KAAM,gBAKlB8oH,EAAMqU,iBAAiB,WAKvBr5L,MAAKmtE,cAAclvD,KAAK,eAAelU,SAKnBrI,EAAEuc,KAAKi7K,EAAO,SAAAE,GAAA,MAAQA,GAAK3D,aAG3C/zL,EAAEH,KAAK23L,EAAO,SAAAE,GACLA,EAAK3D,WAEN2D,EAAKnE,SAAS5xL,IAAI,cA7+F1B,OAu/FZm2L,SAAU,SAASp3L,GACf,MAAOpC,MAAKk8D,MAMhBu9H,iBAAkB,SAASC,KAO3BC,eAAgB,WACZ,OAAQ35L,OASZm5L,YAAa,SAAS38H,EAAQw4H,EAAS1zL,GAE9BA,IACDA,KAGJ,IAAIm6H,GAAQn6H,EAAQm6H,MAChBv/D,EAAO56D,EAAQ46D,MAAQl8D,KAAKk8D,KAC5BiB,EAAa,EAAI63H,EAGrBhQ,EAAQhlL,KAEJ6iE,EAAY7iE,KAAK25L,iBACjBx3L,EAAMnC,KAAK04L,oBAAoB1D,EAASx4H,GAKxC48H,EAAO39D,MAAQn+H,GAAY0nL,EAAM+R,WAAW37H,QAAQj5D,EACxD,IAAIi3L,EAIA,MARU,UAAAt6L,GAAA,MAAKA,IAAK,SAAWA,IAKnBs6L,IACRpU,EAAM4U,UAAUR,EAAMpE,GAEnBoE,CAIX,KAA2B,IAAvB93L,EAAQ4wL,WACR,MAAO,KAIX,IAAI2H,GAAgB,WAEhB,GAAIC,GAAYp4L,EAAEuc,KAAKyrK,EAAuB,SAAAjrL,GAAA,MAAKA,KAAMy9D,IAAQ,WAAaA,EAG1E69H,EAAYr4L,EAAEgI,IAAIm5D,EAAW,SAC7BlkE,GAD6B,MAE5BA,GAAE4/D,aAAahB,SAASf,EAAQs9H,EAAW38H,EAAY6nH,EAAM6Q,wBAclE,OAXIvjK,MAAKm/J,iBACLsI,EAAUz9L,KACNg2B,KAAKm/J,gBAAgBlzH,aAAahB,SAC9Bf,EACAN,EACAiB,EACA7qC,KAAKm/J,gBAAgBoE,wBAK1BkE,GAMPC,EAAaj2J,EAAEtzB,UA2EnB,OA1EAu0K,GAAM+R,WAAWv7H,QAAQr5D,EAAK63L,GAC9Bj2J,EAAExa,KAAKxiB,MAAMg9B,EAAG81J,KAAiB9wK,KAAK,WAClC,GAEIysK,GAFAuE,EAAYF,IACZI,EAAcF,CAOlB,IAAIr4L,EAAEuc,KAAK87K,EAAW,SAAAp7L,GAAA,MAAKi6D,GAAAlZ,QAAK8d,YAAY7+D,KAKxC,MAJAqmL,GAAM+R,WAAWv7H,QAAQr5D,MAAK7E,QAC9BymC,GAAExa,KAAKy7J,EAAMmU,YAAY38H,EAAQw4H,EAAS1zL,IAAUynB,KAAK,SAAAqwK,GACrDY,EAAWv8L,QAAQ27L,IAMvB9mK,MAAKm/J,kBACL+D,EAAWljK,KAAKm/J,gBAAgBlzH,aAAaZ,aAAao8H,EAAU57K,MAAOq+C,GAI/E,IAAI09H,MAEAC,IAEJz4L,GAAEH,KAAKshE,EAAW,SAAClkE,EAAGlD,GAClB,GAAIygE,GAAOv9D,EAAEu9D,KACT95D,EAAO63L,EAAYx+L,EACV,UAATygE,IACAA,EAAOv9D,EAAE66L,SAASp3L,GAClBzD,EAAE86L,iBAAiBv9H,IAEvBg+H,EAAc59L,KAAK4/D,GACnBi+H,EAAgB79L,KAAKqC,EAAEy7L,kBAAkBh4L,EAAM85D,EAAM84H,EAAS9pL,KAGlE,IAQIkuL,GARAt+H,EAASkqH,EAAM1yJ,KAAK87J,eAAej0H,aACnCkgI,EAAW79H,EAAOt9D,IAAI,SACtBo7L,EAAY99H,EAAOt9D,IAAI,OAGvBgM,EAAQoB,KAAKy+B,MAAMuvJ,EAAYD,GAAYrF,GAAWhQ,EAAMgT,YAE5D7pL,EAASzM,EAAE6K,IAAI4tL,EAMnBr/H,GAAO5vD,MAAQA,EAEf4vD,EAAO3sD,OAAS7M,EAAQ6M,QAAUA,CAClC,IAAI+jC,GAAM4oB,EAAOT,WAAW,KAC5BnoB,GAAIyiF,UAAUqwD,EAAMgT,YAAa,GAC7Bn1H,EAAUzmE,OAAS,IACnB81C,EAAIqoJ,YAAc,GAClBroJ,EAAIsoJ,yBAA2B,eAEnC94L,EAAEH,KAAKshE,EAAW,SAAClkE,EAAGlD,GAClB29L,EAAOz6L,EAAE87L,UAAUR,EAAYx+L,GAAIy2C,EAAKgoJ,EAAcz+L,GAAI+gE,EAAQw4H,EAASQ,SAIlEl4L,KAAT87L,IACApU,EAAM+R,WAAWv7H,QAAQr5D,EAAKi3L,GAC9BpU,EAAM4U,UAAUR,EAAMpE,IAG1BgF,EAAWv8L,QAAQ27L,KAGhBY,GAOXI,kBAAmB,SAASl+L,EAAQggE,EAAM84H,EAAS0F,GAC/C,MAAO16L,MAAKk2L,mBAMhByE,sBAAuB,SAASz+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,IAIgB,SAAlE13L,GAAW,MAAM2D,QAAQjB,KAAKu/C,OAAOwtB,UAAU,eAChD/sE,KAAKu/C,OAAOstB,UAAU,YAAa,IAEmC,SAArEvvE,GAAW,KAAM,GAAG2D,QAAQjB,KAAKu/C,OAAOwtB,UAAU,eACnD/sE,KAAKu/C,OAAOstB,UAAU,YAAanrE,EAAE6K,IAAI7K,EAAEgI,IAAIxN,EAAOkG,KAAM,SAAAzD,GAAA,MAAKA,GAAE,OAAQ,EAG/E,IAAIm8D,GAAS5oB,EAAI4oB,MAYjB,OAVc,IAAI0tH,GAAA9oI,QAASk7I,YACvB1+L,EAAOkG,KACPo6D,EAAOt9D,IAAI,SACXs9D,EAAOt9D,IAAI,OACXc,KAAKu/C,OAAOutB,oBACZ5Q,GAGImjB,KAAKntC,EAAK4oB,EAAO5vD,MAAO4vD,EAAO3sD,OAAQ6mL,GAExC,GAAIG,GAAcn1L,KAAMw8D,EAAQw4H,EAASl6H,EAAQ5+D,EAAOkG,OAYnEq4L,UAAW,SAASv+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,EAAS6F,KAMxDjB,UAAW,SAASR,EAAMpE,GACtB,GACI8F,GAAe1B,EAAKnE,QAIxBmE,GAAKlE,oBAGL,IAAIhgK,GAAO5oB,KAAK4xC,OAAOk7I,EAAK1uJ,KAAO1qC,KAAK+pL,YAAc/pL,KAAKsyB,KAAKosC,QAAU1+D,KAAKsyB,KAAKoY,MAAQsqJ,EACxFh1L,MAAKg4L,cACL9iK,GAAQl1B,KAAKg4L,aAEjB8C,EAAaz3L,IAAI,OAAQ6xB,GAErB4lK,EAAaphK,SAAS,UAGtBohK,EAAaxhK,YAAY,UAGzBt5B,KAAK8sL,UAAUr7J,OAAOqpK,GAK1BA,EAAaz3L,IAAI,SAAU,QAK3BrD,KAAKi2L,cAAgB3pL,KAAKC,IAAIvM,KAAKi2L,cAAe6E,EAAa3sL,SAAW,GAG1E2sL,EACK55K,SACAoG,WACAjkB,IAAI,SAAarD,KAAKi2L,cAH3B,KAMA,IAAI8E,GAAe/6L,KAAKi2L,aACO,KAA3Bj2L,KAAKk2L,oBACL6E,EAAezuL,KAAKy4B,IAAI/kC,KAAKi2L,cAAej2L,KAAKk2L,oBAErDl2L,KAAK8sL,UAAUzpL,IAAI,SAAa03L,EAAhC,OAMJ7G,+BAAgC,SAAS13H,GACrC,GAAIwoH,GAAQhlL,IAGZ,0BAF4B1C,KAAXk/D,EAAuBA,EAAOpnD,WAAa,OAE5D,kBADgB1T,EAAE6L,OAAOy3K,EAAMvzC,KAAKc,mBAAmBn5H,KAAK,MAC5D,KAMJ28K,yBAA0B,SAAS3zL,EAAM85D,GAErC,MAAa,SAATA,IAEgB,aAATA,EAEsB,WAAtB95D,EAAKw8D,aACiB,WAAtBx8D,EAAKw8D,cAAiD,cAApBx8D,EAAK44L,aAWtD7+H,WAAY,SAASF,GAEjB,OAAIA,EAAM3V,SAAgC,cAArB2V,EAAM++H,aAEO,WAAvB/+H,EAAM2C,cAEN3C,EAAM75D,KAAK,GAAG,GAAK65D,EAAM75D,KAAK,GAAG,IAAO,IASvDgyL,mBAAoB,WAEhBp0L,KAAKu+D,aAAa37D,IAAI,YAAa,YACnC5C,KAAK81L,gBAAkB,IACvB91L,KAAK41L,mBAAqB,UA0ClC,IAAI9E,GAAa,SAASx+J,EAAMO,GAC5B8iK,EAAMh6L,KAAKqE,KAAMsyB,EAAMO,GACnBy0C,QAAQ,EACRjiD,QAAQ,IAEZrlB,KAAKmtE,cAAcl0C,SAAS,eAEhC9wB,GAAO2oL,EAAWt0L,UAAWm5L,EAAMn5L,WAC/BmR,KAAM,WAEF3N,KAAKklB,SAAU,GAMnBqyK,aAAc,aAEdtM,MAAO,SAAS3pL,GASZ,IARA,GAAIgxB,GAAOtyB,KAAKsyB,KACZwY,EAAQxY,EAAK1R,KAAO0R,EAAKoY,IAEzBuwJ,EAAe3uL,KAAKs+B,MAAMt+B,KAAKs6B,IAAI,GAAIt6B,KAAKs+B,MAAMt+B,KAAKwrD,IAAIhtB,GAASx+B,KAAKwrD,IAAI,OAE7EjkC,EAAWvnB,KAAKs+B,MAAMtY,EAAKoY,IAAMuwJ,GAAgBA,EACjD/vL,EAAQlL,KAAKsyB,KAAKO,UAAU3nB,QAC5BgwL,EAAUn3J,EAAE,UAAU9K,SAAS,mBAC5BpF,EAAWvB,EAAK1R,MAAM,CACzB,GAAIu6K,GAAiB7uL,KAAKs+B,OAAO/W,EAAWvB,EAAKoY,KAAOI,EAAQ5/B,EAChEgwL,GAAQzpK,OACJsS,EAAE,UACG9K,SAAS,aACT7hB,KAAKwhD,EAAAlZ,QAAK8jB,UAAU3vC,IACpBxwB,KACG6xB,KAAMimK,KAGlBtnK,GAAYonK,EAEhBj7L,KAAKosL,YAAY9kK,SAAS,UAAUvd,SACpC/J,KAAKosL,YAAY36J,OAAOypK,KAYhC,IAAIhO,GAAiB,SAAS56J,EAAMO,EAAW+2J,GAM3C,GALAkO,EAAWn8L,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GAIvC5pL,KAAK6iE,aACD,aAAe+mH,GAAU,CAEzB,IAAK,GADDe,GACKlvL,EAAI,EAAGA,EAAImuL,EAAS/mH,UAAUzmE,OAAQX,IAC3CkvL,EAAWf,EAAS/mH,UAAUpnE,GAC9BuE,KAAK6iE,UAAUpnE,GAAKypL,GAAqByF,EAAUr4J,EAAM,MAGrDq4J,EAASqN,YAAch4L,KAAKg4L,cAC5Bh4L,KAAKg4L,YAAcrN,EAASqN,YAGpCh4L,MAAKklB,SAAU,EAInBxjB,EAAEH,KAAKvB,KAAK6iE,UAAW,SAAAlkE,IACfA,YAAa4uL,IAAgB5uL,YAAaq4L,MAC1Cr4L,EAAE01L,YAAY,cAItBr0L,KAAKurL,eAILvrL,KAAKmjE,SAAW,iBAGpBh7D,GAAO+kL,EAAe1wL,UAAWs7L,EAAWt7L,WACxC4+L,cAAe1R,EAEf2R,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAE1B9nL,IAAK,YACL0pD,MAAO,YACP7tD,KAAM,QACNokE,kBAAe9kE,KAGf6E,IAAK,YACL0pD,MAAO,YACP7tD,KAAM,QACNokE,kBAAe9kE,KAGf6E,IAAK,OACLnE,KAAM,SACNokE,cAAepiE,KAAKk8D,KACpB5uD,QAAQ,IAGRnL,IAAK,SACLnE,KAAM,MACNokE,cAAe,GACf90D,QAAQ,MAKpBk9K,mBAGQ5rL,KAAM,iBACNm9C,MAAO,yBACP0uI,UAAW,eACXC,YAAa,SAAS1F,GAClBjhJ,EAAE,YAAYh6B,SACdi7K,EAAMsW,gBAGhB1yL,OAAOkvL,EAAWt7L,UAAUguL,kBAO9B/F,QAASgH,EAAmBjvL,UAAUioL,QAEtCQ,aAAcwG,EAAmBjvL,UAAUyoL,aAE3CyG,iBAAkBD,EAAmBjvL,UAAUkvL,iBAE/CxB,gBAAiB,WACblqL,KAAKkrL,SAASlrL,KAAKu/C,OAAOwtB,UAAU,SACpC/sE,KAAKgrL,cAAe6B,kBAAkB,KAM1C4J,UAAW,WAEP,GAAI8E,GAAiBv7L,KAAKk2L,iBAC1Bx0L,GAAEH,KAAKvB,KAAK6iE,UAAW,SAAAlkE,GACnBA,EAAEu3L,kBAAoBqF,IAE1B5F,EAAMn5L,UAAUi6L,UAAU96L,KAAKqE,OAMnCq0L,YAAa,SAASiE,GAClBR,EAAWt7L,UAAU63L,YAAY14L,KAAKqE,KAAMs4L,EAC5C,KAAK,GAAI78L,GAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvCuE,KAAK6iE,UAAUpnE,GAAG44L,YAAYiE,IAOtC3qL,KAAM,WAGF,IAAK,GADD6tL,MACK//L,EAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvC+/L,EAAel/L,KAAK0D,KAAK6iE,UAAUpnE,GAAGkS,OAI1C,IAAIq3K,GAAQhlL,IACZ+jC,GAAExa,KAAKxiB,MAAMg9B,EAAGy3J,GAAgBzyK,KAAK,WACjCi8J,EAAM9/J,SAAU,EAChB8/J,EAAMgG,kBAIdO,aAAc,WAEVvrL,KAAKgqL,aAAaiD,aAAan9K,OAC/B9P,KAAKgqL,aAAawO,WAAW1oL,OAC7B9P,KAAKgqL,aAAayO,qBAAqB3oL,QAG3Ci7K,SAAUpB,EAASntL,UAAUuuL,SAE7B4O,eAAgB,WACZ,MAAO35L,MAAK6iE,WAMhBy4H,WAAY,WAOR,IAAK,GADDtW,GAJAp8I,EAAQ,GAAIu8I,GAAcnlL,KAAKsyB,KAAMtyB,KAAK6yB,WAC1Cj0B,KAAMoB,KAAKu/C,OAAOwtB,UAAU,UAIvBtxE,EAAI,EAAGA,EAAIuE,KAAK6iE,UAAUzmE,OAAQX,IACvCupL,EAAQhlL,KAAK6iE,UAAUpnE,GACvBupL,EAAMuG,eACN3iJ,EAAMq8I,aAAaD,GACnBA,EAAMnyJ,UAAY+V,EAClBA,EAAMwjJ,YAAY36J,OAAOuzJ,EAAM73G,cAIvBntE,MAAK6yB,UAAUg5J,iBAAiB7rL,KAAM4oC,GAAO,EACzDA,GAAMoiJ,cAAe6B,kBAAkB,KAM3C+L,YAAa,WAST,GAAI7zJ,GAAMrjC,EAAEqjC,IAAIrjC,EAAEgI,IAAI1J,KAAK6iE,UAAW,SAAAlkE,GAAA,MAAKA,GAAE4gD,OAAOwtB,UAAU,gBAE1DxgE,EAAM7K,EAAE6K,IAAI7K,EAAEgI,IAAI1J,KAAK6iE,UAAW,SAAAlkE,GAAA,MAAKA,GAAE4gD,OAAOwtB,UAAU,eAE9D/sE,MAAKu/C,OAAOstB,UAAU,YAAa9nC,GACnC/kC,KAAKu/C,OAAOstB,UAAU,YAAatgE,GAGnC7K,EAAEH,KAAKvB,KAAK6iE,UAAW,SAAAlkE,GACnBA,EAAE4gD,OAAOstB,UAAU,YAAa9nC,GAChCpmC,EAAE4gD,OAAOstB,UAAU,YAAatgE,MAOxCkvL,mBAAoB,WAChB,GACI/D,GAAY13L,KAAKu/C,OAAOwtB,UAAU,aAClC4qH,EAAY33L,KAAKu/C,OAAOwtB,UAAU,YACtCrrE,GAAEH,KAAKvB,KAAK6iE,UAAW,SAAAlkE,GACnBA,EAAE4gD,OAAOstB,UAAU,YAAa6qH,GAChC/4L,EAAE4gD,OAAOstB,UAAU,YAAa8qH,KAEpC33L,KAAKgrL,cAAe6B,kBAAkB,KAO1CkG,iBAAkB,SAASmG,EAAOhuL,EAAO8pL,EAAS6D,GAE9C,GAEIp9L,GAFAigM,GAAc,CAGlB,KAAKjgM,EAAI,EAAGA,EAAIy9L,EAAM98L,OAAQX,IAAK,CAC/B,GAAI0S,GAAS+qL,EAAMz9L,GAAGw5L,SAASh3K,KAAK,UAAU9P,QAC1CA,GAASutL,IACTA,EAAavtL,GAIrB,IAAK1S,EAAI,EAAGA,EAAIy9L,EAAM98L,OAAQX,IAAK,CAC/B,GAAI29L,GAAOF,EAAMz9L,EACb29L,GAAKnE,SAASh3K,KAAK,UAAU9P,WAAautL,IAC1C17L,KAAKm5L,YAAYC,EAAK58H,OAAQw4H,GAC1Bv5D,OAAO,EACPttH,OAAQutL,IAEZtC,EAAKnE,SAASlrL,UAKtB,GAAIi7K,GAAQhlL,KAER+sB,EAAI,WACJi4J,EAAMyW,qBAIVz7L,MAAKq5L,iBAAiB,MAAOtsK,GAC7B/sB,KAAKq5L,iBAAiB,MAAOtsK,KAOrC,IAAIykK,GAAiB,SAASl/J,GAC1BwlK,EAAWn8L,KAAKqE,KAAMsyB,GAAQ85J,YAAa95J,EAAKo8J,iBAAoBpnH,QAAQ,EAAOjiD,QAAQ,IAG3FrlB,KAAKg4L,YAAc1lK,EAAK87J,eAAe7zH,cACvCv6D,KAAKmtE,cAAcl0C,SAAS,mBAC5Bj5B,KAAKigE,SAAcriB,OAAO/4B,KAA1B,eAA6C7kB,KAAKsyB,KAAK8tC,MACvDpgE,KAAK61L,uBAA0BvE,WAAW,GAC1CtxL,KAAKu+D,aAAe,GAAIk/G,GAAA/9H,QAAcqgB,4BAClCE,SAAUjgE,KAAKigE,SACf9D,WAAYn8D,KAAKm8D,aAErBn8D,KAAK6qL,gBAET1iL,GAAOqpL,EAAeh1L,UAAWmtL,EAASntL,UAAWs7L,EAAWt7L,WAC5D6+L,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAE1B9nL,IAAK,SACLnE,KAAM,MACNokE,cAAe,GACf90D,QAAQ,MAKpBK,KAAM,WACF3N,KAAKu+D,aAAa7pB,QAElB10C,KAAKklB,SAAU,GAMnBqyK,aAAc,aAEdxM,SAAUpB,EAASntL,UAAUuuL,SAK7BoO,YAAa,SAAS38H,EAAQw4H,EAAS1zL,GACnC,GACIq6L,GADAC,EAAc57L,KAAK8sL,UAAUhmK,GAAG,YAEhCsyK,EAAO,IAoBX,OAnBIpE,GAAUh1L,KAAKsyB,KAAK87J,eAAe7zH,eACnCv6D,KAAK8sL,UAAUz/K,OACfsuL,GAAc,EACdvC,EAAOtB,EAAWt7L,UAAU28L,YAAYx9L,KAAKqE,KAAMw8D,EAAQw4H,EAAS1zL,KAEpEq6L,GAAc,EACd37L,KAAK8sL,UAAUh9K,QASf8rL,IAAgBD,GAChB37L,KAAKsyB,KAAKwgK,kBAGPsG,GAGXj9H,WAAY,SAASF,GACjB,OAAO,GAMXw+H,UAAW,SAASr4L,EAAM8vC,EAAKgqB,EAAMM,EAAQw4H,GAEzC,GAAI6G,GAAS77L,KAAKu+D,aAAaZ,aAAav7D,EAAMo6D,GAE9Cg5H,EAAWqG,EAAOz5L,KAGlB04D,EAAS5oB,EAAI4oB,MACjB5oB,GAAIooB,KAAOpoB,EAAI4oB,OAAOC,QAAQd,aAC9B/nB,EAAI4pJ,UAAY,QAChB,KAAK,GAAIp9L,GAAI,EAAGq9L,EAAUvG,EAASp5L,OAAQsC,EAAIq9L,EAASr9L,IACpDwzC,EAAIikF,UAAYn2H,KAAKsyB,KAAK0+J,eAAewE,EAAS92L,IAClDwzC,EAAI8pJ,SAASxG,EAAS92L,GAAI4N,KAAKs+B,MAAMlsC,EAAIs2L,GAAU,GAEvD,OAAO,IAAID,GAAK/0L,KAAMw8D,EAAQw4H,EAASl6H,EAAQ+gI,KAOvD,IAAIrO,GAAY,SAASl7J,EAAMO,EAAW+2J,GACtC5pL,KAAKk8D,KAAO,YACZ47H,EAAWn8L,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GAEvC5pL,KAAKg4L,YAAc,EAInB,IAAIzuL,GAAOvJ,IACX+jC,GAAExa,KAAK2+J,EAAsBtqI,OAAO/4B,KAA7B,YAA6C7kB,KAAK27D,QAAQhjD,GAA1D,aAAyEoQ,KAAK,SAAAm/J,GAC7EA,IACA3+K,EAAKg1D,aAAe,GAAIuqH,GAAAppI,QAAIu8I,gBACxBtgI,QAASpyD,EAAKoyD,aAM9BxzD,GAAOqlL,EAAUhxL,UAAWmtL,EAASntL,UAAWs7L,EAAWt7L,WACvD4+L,cAAe1R,EAEf2R,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAC5B9nL,IAAK,QAAS0pD,MAAO,QAAS7tD,KAAM,UAElCmE,IAAK,YACL0pD,MAAO,YACP7tD,KAAM,QACNokE,kBAAe9kE,KAGf6E,IAAK,YACL0pD,MAAO,YACP7tD,KAAM,QACNokE,kBAAe9kE,KAGf6E,IAAK,OACLnE,KAAM,SACNokE,cAAepiE,KAAKk8D,KACpB5uD,QAAQ,IAGRnL,IAAK,SACLnE,KAAM,MACNokE,cAAe,GACf90D,QAAQ,MAKpB48K,gBAAiB,WACblqL,KAAKkrL,SAASlrL,KAAKu/C,OAAOwtB,UAAU,SACpC/sE,KAAKgrL,cAAe6B,kBAAkB,KAO1C+L,YAAa,aAKb6B,UAAW,SAASv+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,GAC3C,MAAOh1L,MAAK26L,sBAAsBz+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,IAMjE74H,WAAY,SAASF,GACjB,MAAOA,GAAM75D,KAAK,GAAG,GAAK65D,EAAM75D,KAAK,GAAG,IAAO,GAMnD2wL,iBAAkB,SAASmG,EAAOhuL,EAAO8pL,EAAS6D,GAE9C74L,KAAKq5L,iBAAiB,OACtBr5L,KAAKq5L,iBAAiB,SAO9B,IAAI6C,GAAuB,SAAS5pK,EAAMO,EAAW+2J,GACjD5pL,KAAKk8D,KAAO,UACZ47H,EAAWn8L,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GAG3CzhL,GAAO+zL,EAAqB1/L,UAAWmtL,EAASntL,UAAWs7L,EAAWt7L,WAClE4+L,eAAgB,WAEhBC,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAE1B9nL,IAAK,YACL0pD,MAAO,iBACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,YACL0pD,MAAO,iBACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,YACL0pD,MAAO,YACP7tD,KAAM,MACNokE,kBAAe9kE,KAGf6E,IAAK,YACL0pD,MAAO,YACP7tD,KAAM,MACNokE,kBAAe9kE,KAGf6E,IAAK,OACLnE,KAAM,SACNokE,cAAepiE,KAAKk8D,KACpB5uD,QAAQ,IAGRnL,IAAK,SACLnE,KAAM,MACNokE,cAAe,IACf90D,QAAQ,MAKpB48K,gBAAiB,WACblqL,KAAKkrL,SAASlrL,KAAKu/C,OAAOwtB,UAAU,SACpC/sE,KAAKgrL,cAAe6B,kBAAkB,KAM1C0K,aAAc,WACV,GAAIvS,GAAQhlL,IACZ,OAAO+jC,GAAE/E,QACLgmJ,EAAMrpH,QAAQ7/B,OAEVg+B,UAAW,OACX29H,OAAO,EACPjgI,MAAOwtH,EAAM1yJ,KAAKklC,MAClB9sB,IAAK,EACL9pB,KAAMokK,EAAM1yJ,KAAK+rC,SACjB3J,SAAUswH,EAAMrpH,QAAQz8D,IAAI,aAEhC,SAAAhD,GACeA,EAAOkG,QAQ9Bq4L,UAAW,SAASv+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,GAE3C,GAAIl6H,GAAS5oB,EAAI4oB,MAYjB,OAVc,IAAI0tH,GAAA9oI,QAASy8I,uBACvBjgM,EAAOkG,KACPo6D,EAAOt9D,IAAI,SACXs9D,EAAOt9D,IAAI,OACXc,KAAKu/C,OAAOutB,oBACZ5Q,GAGImjB,KAAKntC,EAAK4oB,EAAO5vD,MAAO4vD,EAAO3sD,OAAQ6mL,GAExC,GAAID,GAAK/0L,KAAMw8D,EAAQw4H,EAASl6H,EAAQ5+D,EAAOkG,QAO9D,IAAImrL,GAAe,SAASj7J,EAAMO,EAAW+2J,GACzCkO,EAAWn8L,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GACvC5pL,KAAKmtE,cAAcl0C,SAAS,iBAC5Bj5B,KAAKo8L,oBAAsB,GAC3Bp8L,KAAKm4L,YACLn4L,KAAKq8L,iBACLr8L,KAAKg4L,YAAc,IAGnBh4L,KAAKs8L,0BAETn0L,GAAOolL,EAAa/wL,UAAWmtL,EAASntL,UAAWs7L,EAAWt7L,WAC1D4+L,eAAgB,OAAQ,WAAY,QAAS,SAAU,QAEvDC,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAE1B9nL,IAAK,cACL0pD,MAAO,cACP7tD,KAAM,UAGNmE,IAAK,uBACL0pD,MAAO,yBACP7tD,KAAM,UAGNmE,IAAK,cACL0pD,MAAO,cACP7tD,KAAM,QACNokE,cAAe,UAGfjgE,IAAK,cACL0pD,MAAO,sBACP7tD,KAAM,OACNokE,eAAe,EACfuL,KAAM,wEAGNxrE,IAAK,YACL0pD,MAAO,oBACP7tD,KAAM,QACNokE,kBAAe9kE,GACfqwE,KAAM,qCAGNxrE,IAAK,YACL0pD,MAAO,oBACP7tD,KAAM,QACNokE,kBAAe9kE,GACfqwE,KAAM,qCAGNxrE,IAAK,kBACL0pD,MAAO,kBACP7tD,KAAM,SACNokE,cAAe,YACf9gE,UAEQuqD,MAAO,mBACP3iD,MAAO,aAET2iD,MAAO,OAAQ3iD,MAAO,WAI5B/G,IAAK,OACLnE,KAAM,SACNokE,cAAepiE,KAAKk8D,KACpB5uD,QAAQ,IAGRnL,IAAK,SACLnE,KAAM,MACNokE,cAAe,EACf90D,QAAQ,MAKpB48K,gBAAiB,WACblqL,KAAKkrL,SAASlrL,KAAKu/C,OAAOwtB,UAAU,SACpC/sE,KAAKs8L,0BACLt8L,KAAKgrL,cAAe6B,kBAAkB,KAG1CyP,wBAAyB,WAC4B,SAA7Ct8L,KAAKu/C,OAAOwtB,UAAU,mBACtB/sE,KAAKu8L,QAAU/T,EAAA9oI,QAAS88I,wBAExBx8L,KAAKu8L,QAAU/T,EAAA9oI,QAAS+8I,sBAQhC1J,iBAAkB,SAASmG,EAAOhuL,EAAO8pL,EAAS6D,GAC9Cf,EAAWt7L,UAAUu2L,iBAAiBp3L,KAAKqE,KAAMk5L,EAAOhuL,EAAO8pL,EAAS6D,EAExE,IACIp9L,GADAupL,EAAQhlL,IASZ,IAAgC,IANT0B,EAAEV,OAAOk4L,EAAO,SAAAnsK,GAAA,MAAKA,aAAaooK,KAMpC/4L,OAAc,CAE/B,GAAIsgM,KACJh7L,GAAEH,KAAKG,EAAEumC,MAAMixJ,EAAO,uBAAwB,SAAAyD,GAC1Cj7L,EAAEH,KAAKo7L,EAAc,SAAA/kH,GACjB8kH,EAAwB9kH,EAAQ,IAAMA,KAK9C,IAAIruE,GAAOvJ,IACX0B,GAAEH,KAAK23L,EAAO,SAAAE,GAEV,GAAIwD,GAA2Bl7L,EAAE0rC,KAC7BsvJ,EACAh7L,EAAEgI,IAAI0vL,EAAK7D,oBAAqB,SAAAhsE,GAAA,MAAKA,GAAE,KAO3C,IAHAqzE,EAA2Bl7L,EAAE0rC,KAAKwvJ,EAA0Bl7L,EAAEiY,KAAKy/K,EAAK1D,6BAG/B,IAArCh0L,EAAEiiC,KAAKi5J,GAAiC,CAGxC,GAAIp+C,IACAp8I,KAAMV,EAAE6L,OAAOqvL,IAGfziI,EAAa5wD,EAAK+oB,KAAK87J,eAAej0H,aACtC0iI,EAAiB1iI,EAAWE,WAAW,KAC3CF,GAAWhsD,OAAS7B,KAAKC,IACrB6sL,EAAKt+H,OAAO3sD,OACZ5E,EAAK6wL,kBAAkB57C,EAAU46C,EAAKl9H,KAAMk9H,EAAKpE,QAAS,MAE9D76H,EAAWjvD,MAAQkuL,EAAKt+H,OAAO5vD,MAC/B2xL,EAAevlE,UAAU8hE,EAAKt+H,OAAQ,EAAG,GACzC+hI,EAAeloE,UAAUqwD,EAAMgT,YAAa,EAC5C,IAAI8E,GAAWvzL,EAAKkxL,UAChBj8C,EACAq+C,EACAzD,EAAKl9H,KACLk9H,EAAK58H,OACL48H,EAAKpE,QACLoE,EAAK5D,SAETzxJ,GAAEq1J,EAAKt+H,QAAQhpC,YAAYiS,EAAE+4J,EAAShiI,SACtCs+H,EAAKt+H,OAASX,EACdz4D,EAAEyG,OAAOixL,EAAK1D,2BAA4BgH,MAiCtD,GAAI1X,EAAMjpH,gBAAiB,CACvB,GACIwtD,GADArjG,EAAU8+J,EAAMjpH,gBAAgB71C,OAEpC,KAAKqjG,EAAI,EAAGA,EAAIrjG,EAAQ9pB,OAAQmtH,IAC5BrjG,EAAQqjG,GAAGwzE,eAKf,IAEIC,GACAh8L,EAHA+2L,GAAoB,CAIxB,KAAKt8L,EAAI,EAAGA,EAAIy9L,EAAM98L,OAAQX,IAC1B,GAAIy9L,EAAMz9L,GAAG2G,KAAKhG,OAEd,IADA4gM,EAAkB9D,EAAMz9L,GAAG2G,KAAK,GAC3BmnH,EAAI,EAAGA,EAAIrjG,EAAQ9pB,OAAQmtH,IAE5B,GADAvoH,EAASklB,EAAQqjG,GACbvoH,EAAOi8L,WAAWD,IAAoBh8L,EAAO+jC,MAAQ/jC,EAAOuL,IAAK,CACjEwrL,GAAoB,CACpB,OAOZ/S,EAAM+S,oBAAsBA,IAC5B/S,EAAM+S,kBAAoBA,EACrB/S,EAAM+S,mBACP/S,EAAMjpH,gBAAgBjsD,OAE1Bk1K,EAAMuG,gBAOd,GAAI2N,EAAM,YAAc9D,GAAkB,CACtC,GAAIC,IAAc,CAClB,KAAK55L,EAAI,EAAGA,EAAIy9L,EAAM98L,OAAQX,IAC1B,IAAKy9L,EAAMz9L,GAAG45L,YAAa,CACvBA,GAAc,CACd,OAGRr1L,KAAKgqL,aAAakT,oBAAoBtuL,QAAQymL,OAE9Cr1L,MAAKgqL,aAAakT,oBAAoBptL,QAO9C2pL,iBAAkB,SAASv9H,GACL,SAAdl8D,KAAKk8D,OACQ,cAATA,IACAA,EAAO,iBAEXl8D,KAAKgqL,aAAauO,UAAU31K,KAAK,QAAjC,+BAAyEs5C,EAAzE,OASRihI,kBAAmB,SAAS/wH,EAAOoyE,EAAUtiF,GAIzC,GAAI9B,GAAgBp6D,KAAKsyB,KAAK87J,eAAeh0H,cAEzCgjI,EAAUp9L,KAAKm4L,SAAS/rH,EAM5B,OALKgxH,IAAWA,EAAQlhI,OAASA,IAC7BkhI,EAAU,GAAI9U,GAAA5oI,QAAS29I,eAAejxH,EAAOlQ,EAjrIrC,IAirI8D,SAAA0S,GAAA,MAAKxU,GAAcI,YAAYoU,KACrG5uE,KAAKm4L,SAAS/rH,GAASgxH,GAGpBA,EAAQE,cAAc9+C,IAMjCg7C,SAAU,SAASp3L,GAwBf,MArBwB,cAApBA,EAAK44L,YAA8Bh7L,KAAK+pL,YACjC,YAcH/pL,KAAKsyB,KAAK1R,KAAO5gB,KAAKsyB,KAAKoY,IA1sInB,KA2sID,SAEA,QAUnB0vJ,kBAAmB,SAASl+L,EAAQggE,EAAM84H,EAAS0F,GAC/C,GAAa,aAATx+H,GAA+C,WAAxBhgE,EAAO0iE,aAC9B,MAAO5+D,MAAKo8L,mBAGZ,IAAImB,GAAgBv9L,KAAKm9L,kBAAkBnI,EAAS94L,EAAOkG,KAAM85D,GAG7DshI,EAAgB,GAAIx9L,MAAKu8L,QAAQ,KAAM,KAAM,KAAMv8L,KAAKu/C,OAAOutB,oBAAqB5Q,EACxF,OAAO5vD,MAAKC,IAAIvM,KAAKg2L,cAAewH,EAAcC,oBAAoBF,EAAe7C,KAc7FD,UAAW,SAASv+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,EAAS6F,EAAS6C,GAC7D,GAAI1Y,GAAQhlL,KACR86D,EAAS5oB,EAAI4oB,OACbu/H,EAAW79H,EAAOt9D,IAAI,SACtBo7L,EAAY99H,EAAOt9D,IAAI,OACvB84L,EAAch4L,KAAKg4L,WAGvB,IAA4B,WAAxB97L,EAAO0iE,aACP,MAAO5+D,MAAK26L,sBAAsBz+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,EAMjE,IAAI1xG,MAEAq6G,EAAQ39L,KAAKm4L,SAASnD,GAAS2I,MAC/BtI,GAAc,CAClB,IAAIn5L,EAAOkG,KAEP,IAAK,GADD8jB,GAAUlmB,KAAK+7D,gBAAgB71C,QAC1BzqB,EAAI,EAAG0a,EAAMja,EAAOkG,KAAKhG,OAAQX,EAAI0a,EAAK1a,IAAK,CAIpD,IAAK,GADDuF,GAFA42E,EAAU17E,EAAOkG,KAAK3G,GACtBmiM,GAAe,EAEVr0E,EAAI,EAAGs0E,EAAO33K,EAAQ9pB,OAAQmtH,EAAIs0E,EAAMt0E,IAG7C,GAFAvoH,EAASklB,EAAQqjG,GACjBvoH,EAAO88L,aAAalmH,IACf52E,EAAO8uI,KAAKl4D,GAAU,CACvBgmH,GAAe,CACf,OAGHA,IAEDt6G,EAAShnF,KAAKs7E,GAERA,EAAQ,IAAM+lH,KAChBtI,GAAc,IAO9B,GAAI0I,GAAsB/9L,KAAK+7D,gBAAgBiiI,aACzC,GAAIvJ,GAAaz0L,KAAK+7D,gBAAgBiiI,cACtC,KAEFC,EAAuBj+L,KAAK+7D,gBAAgBmiI,cAC1C,GAAIzJ,GAAaz0L,KAAK+7D,gBAAgBmiI,eACtC,KAEF3B,EAAU,GAAIv8L,MAAKu8L,QACnBj5G,EACA+2G,EACAC,EACAt6L,KAAKu/C,OAAOutB,oBACZ5Q,EACA6hI,EACAE,EAEApD,EACA,SAAAvgL,GAAA,MAAK0qK,GAAM1yJ,KAAK0+J,eAAe12K,KAG/Bg7K,EAAiB,IAMrB,IAJApjJ,EAAIikF,UAAYn2H,KAAKu/C,OAAOwtB,UAAU,eACtC76B,EAAIooB,KAAOpoB,EAAI4oB,OAAOC,QAAQd,aAC9B/nB,EAAI4pJ,UAAY,QAEZ5/L,EAAOkG,KAAM,CAEb,GAAI+7L,GAAe5B,EAAQl9G,KAAKntC,EAAK4oB,EAAO5vD,MAAO4vD,EAAO3sD,OAAQ6mL,EAAS2I,EAC3ErI,GAAiB6I,EAAa7I,eAC9BC,oBAAsB4I,EAAa5I,oBACnCD,EAAe8I,aAAepG,EAIlC,MAAK0F,OAAL,GACW,GAAItI,GACPpQ,EACAxoH,EACAw4H,EACAl6H,EACA5+D,EAAOkG,KACP85D,EACAhgE,EAAOoqD,QACP+uI,EACAC,EACAC,oBACAsF,KAShB,IAAI5D,IAAe,SAAS3kK,EAAMO,EAAW+2J,GACzCkO,EAAWn8L,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GACvC5pL,KAAKu8L,QAAU/T,EAAA9oI,QAAS2+I,eACxBr+L,KAAKo8L,oBAAsB,GAI3Bp8L,KAAKg4L,YAAc,GAGvB7vL,GAAO8uL,GAAaz6L,UAAWmtL,EAASntL,UAAWs7L,EAAWt7L,WAC1D4+L,eAAgB,OAAQ,WAAY,QAAS,SAAU,QAEvDC,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAE1B9nL,IAAK,QACL0pD,MAAO,kBACP7tD,KAAM,UAGNmE,IAAK,mBACL0pD,MAAO,mBACP7tD,KAAM,OACNokE,eAAe,IAGfjgE,IAAK,cACL0pD,MAAO,iCACP7tD,KAAM,OACNokE,eAAe,IAGfjgE,IAAK,iBACL0pD,MAAO,uBACP7tD,KAAM,QACNokE,cAAe,KAGfjgE,IAAK,OACLnE,KAAM,SACNokE,cAAepiE,KAAKk8D,KACpB5uD,QAAQ,IAGRnL,IAAK,SACLnE,KAAM,MACNokE,cAAe,EACf90D,QAAQ,MAKpB48K,gBAAiB,WACblqL,KAAKkrL,SAASlrL,KAAKu/C,OAAOwtB,UAAU,SACpC/sE,KAAKgrL,cAAe6B,kBAAkB,KAM1C4N,UAAW,SAASv+L,EAAQg2C,EAAKgqB,EAAMM,EAAQw4H,GAE3C,GAA4B,WAAxB94L,EAAO0iE,aACP,MAAO5+D,MAAK26L,sBAAsBz+L,EAAQg2C,EAAK,YAAasqB,EAAQw4H,EAGpE,IAAI1iK,GAAOtyB,KAAKsyB,IAYhB,OAVc,IAAItyB,MAAKu8L,QACnBrgM,EAAOkG,KACPo6D,EAAOt9D,IAAI,SACXs9D,EAAOt9D,IAAI,OACXc,KAAKu/C,OAAOutB,oBACZ5Q,EACA,SAAA5hD,GAAA,MAAKgY,GAAK0+J,eAAe12K,KAGrB+kE,KAAKntC,EAAKA,EAAI4oB,OAAO5vD,MAAOgnC,EAAI4oB,OAAO3sD,OAAQ6mL,GAChD,GAAID,GAAK/0L,KAAMw8D,EAAQw4H,EAAS9iJ,EAAI4oB,OAAQ5+D,EAAOkG,OAQlEg4L,kBAAmB,SAASl+L,EAAQggE,EAAM84H,EAAS0F,GAC/C,GAA4B,WAAxBx+L,EAAO0iE,aACP,MAAO5+D,MAAKo8L,mBAMZ,IAAIr9H,GAAc/+D,KAAK27D,QAAQ7G,aAAa,gBACtC90D,KAAK27D,QAAQ7G,aAAa,gBAAgB14D,OAC1C,CAYN,OAXoB,KAAhB2iE,GAA4C,IAAvB7iE,EAAOkG,KAAKhG,SAEjC2iE,EAAc7iE,EAAOkG,KAAK,GAAG,GAAGZ,MAAM,MAElCu9D,EADgB,OAAhBA,EACc,EAEAA,EAAY3iE,OAAS,GAIvB,GAAI4D,MAAKu8L,QAAQ,KAAM,KAAM,KAAMv8L,KAAKu/C,OAAOutB,oBAAqB5Q,GACnEuhI,oBAAoB1+H,IAOjDw4H,aAAc,WACV,GAAI+G,IAAa3I,EAAMn5L,UAAU+6L,aAAa57L,KAAKqE,MAMnD,OAHKA,MAAK27D,QAAQ7G,aAAa,iBAC3BwpI,EAAUhiM,KAAK0D,KAAK27D,QAAQ7mB,SAEzBwpJ,GAOXvL,iBAAkB,SAASmG,EAAOhuL,EAAO8pL,EAAS6D,GAC9Cf,EAAWt7L,UAAUu2L,iBAAiBp3L,KAAKqE,KAAMk5L,EAAOhuL,EAAO8pL,EAAS6D,EAExE,IAAI0F,GAAmB78L,EAAEV,OAAOk4L,EAAO,SAAAnsK,GAAA,MAAKA,aAAaooK,KAGrDqJ,EAAex+L,KAAK27D,QAAQ7G,aAAa,eAC7C,IACgC,IAA5BypI,EAAiBniM,QACjB4D,KAAKu/C,OAAOwtB,UAAU,gBACtByxH,GACAA,EAAapiM,OAAS,EACxB,CACE,GAAIqiM,EAGJ,IAA8D,IAA1Dz+L,KAAKmtE,cAAclvD,KAAK,uBAAuB7hB,SAI/CqiM,EAAYz+L,KAAKu/C,OAAOwtB,UAAU,kBAAoB,EACtD/sE,KAAK8sL,UAAUp7J,QACXqS,EAAE,UACG3sB,KAAK,WACL6hB,SAAS,0BACT51B,KACGq7L,YAAgBD,EAAhB,KACAt9K,KAASnhB,KAAKu/C,OAAOwtB,UAAU,kBAAoB0xH,GAAa,EAAhE,QAKRz+L,KAAKu/C,OAAOwtB,UAAU,qBAAqB,CAC3C,GAAI4xH,GAAmBH,EAAaplL,KAAK,QAEzCpZ,MAAK8sL,UAAUp7J,QACXqS,EAAE,UACGt6B,KAAKk1L,GACL1lK,SAAS,iCACT51B,KACG8d,IAAKnhB,KAAKu/C,OAAOwtB,UAAU,qBAS/C0xH,GAA6B,WAAdz+L,KAAKk8D,KAAoB,EAAI,IAA5C,KACAn4B,EAAE/jC,KAAK8sL,WACF7uK,KAAK,WACL5a,KACGq7L,YAAaD,EACbG,cAAeH,IAGvB16J,EAAE/jC,KAAK8sL,WACF7uK,KAAK,eACL5a,IAAI,QAASrD,KAAKu/C,OAAOwtB,UAAU,oBAGxC/sE,MAAKmtE,cAAclvD,KAAK,uBAAuBlU,WAQ3D,IAAIitL,IAAY,SAAS1kK,EAAMO,EAAW+2J,GACtC2D,EAAa5xL,KAAKqE,KAAMsyB,EAAMO,EAAW+2J,GACzC5pL,KAAKu8L,QAAU/T,EAAA9oI,QAASm/I,YACxB7+L,KAAKurL,eAGTpjL,GAAO6uL,GAAUx6L,UAAWmtL,EAASntL,UAAWs7L,EAAWt7L,UAAW+wL,EAAa/wL,WAC/E6+L,oBAAqB,WACjB,MAAO35L,GAAE0oC,MAAMu/I,EAASntL,UAAUytL,gBAE1B9nL,IAAK,cACL0pD,MAAO,kBACP7tD,KAAM,UAGNmE,IAAK,qBACL0pD,MAAO,2BACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,uBACL0pD,MAAO,+BACP7tD,KAAM,QACNokE,cAAe,YAGfjgE,IAAK,cACL0pD,MAAO,cACP7tD,KAAM,QACNokE,cAAe,UAGfjgE,IAAK,kBACL0pD,MAAO,kBACP7tD,KAAM,OACNokE,eAAe,IAGfjgE,IAAK,mBACL0pD,MAAO,wBACP7tD,KAAM,OACNokE,eAAe,IAGfjgE,IAAK,cACL0pD,MAAO,sBACP7tD,KAAM,OACNokE,eAAe,IAGfjgE,IAAK,OACLnE,KAAM,SACNokE,cAAepiE,KAAKk8D,KACpB5uD,QAAQ,IAGRnL,IAAK,YACL0pD,MAAO,oBACP7tD,KAAM,QACNokE,kBAAe9kE,GACfqwE,KAAM,qCAGNxrE,IAAK,YACL0pD,MAAO,oBACP7tD,KAAM,QACNokE,kBAAe9kE,GACfqwE,KAAM,qCAGNxrE,IAAK,SACLnE,KAAM,MACNokE,cAAe,EACf90D,QAAQ,MAKpB48K,gBAAiB,WACblqL,KAAKkrL,SAASlrL,KAAKu/C,OAAOwtB,UAAU,SACpC/sE,KAAKgrL,cAAe6B,kBAAkB,MAO9C,IAAIiS,KACA5R,eAAgBA,EAChB/H,cAAeA,EACf+W,qBAAsBA,EACtB3O,aAAcA,EACdC,UAAWA,EACXwJ,UAAWA,GACXC,aAAcA,GAEd8H,SAAU9H,IAOV/R,GAAuB,SAAC70I,EAAU/d,EAAMO,GACxC,GAAI,QAAUwd,GAEV,MAAOA,GAAS/5B,KAAKuc,EAGrB,IAAImsK,GAAgB3uJ,EAAS8yB,QAK7B,OAHK67H,KACDA,EAAgB3uJ,EAAS87I,YAEtB,GAAI2S,IAAgBE,GAAe1sK,EAAMO,EAAWwd,G5E8lzCnE90C,GAAQmkD,S4EzlzCJsmI,cAAeA,EACfb,cAAeA,EACfqI,UAAWA,EACXD,aAAcA,EACd2O,qBAAsBA,EACtBlF,UAAWA,GACXC,aAAcA,GACd/J,eAAgBA,EAChBhI,qBAAsBA,M5E4lzCGvpL,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,GAE/CxnC,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G6E/58CX,IAAAi4C,GAAA/lD,EAAA,GAAYsG,E7Es68CZ,SAAiCvB,GAAO,GAAIA,GAAOA,EAAIf,WAAc,MAAOe,EAAc,IAAIogD,KAAa,IAAW,MAAPpgD,EAAe,IAAK,GAAIgC,KAAOhC,GAAW5D,OAAOC,UAAUC,eAAed,KAAKwE,EAAKgC,KAAMo+C,EAAOp+C,GAAOhC,EAAIgC,GAAgC,OAAtBo+C,GAAOb,QAAUv/C,EAAYogD,GAFlOY,G6Eh68C5BmpI,EAAkBv5I,EAASuG,KAAKnvC,QAChCmZ,UAAW,eAEXwyB,WAAY,WAER9zC,KAAK0xC,MAAM6N,OAAOrgD,IAAI,QAAQqH,GAAG,eAAgBvG,KAAKi/L,YAAaj/L,MACnEA,KAAKwwC,UAGTA,OAAQ,WACJxwC,KAAK23C,IAAIlmB,OAAOsS,EAAE,UAAU9K,SAASj5B,KAAK0xC,MAAMo4I,oBAChD9pL,KAAK23C,IAAIlmB,OACLsS,EAAE,UACG9K,SAAS,cACT7hB,KAAKpX,KAAK0xC,MAAM6N,OAAOwtB,UAAU,UAI1C/sE,KAAKgqL,gBACLhqL,KAAKk/L,sBAGLl/L,KAAK23C,IAAIqjG,SAAS,SAAAn+I,GACdA,EAAE6xB,oBAIN1uB,KAAK23C,IAAIlmB,OAAOsS,EAAE,gCAGtBk7J,YAAa,WACTj/L,KAAK23C,IAAI15B,KAAK,eAAe7G,KAAKpX,KAAK0xC,MAAM6N,OAAOwtB,UAAU,UAGlEmyH,oBAAqB,WACjB,GAAI31L,GAAOvJ,IACXA,MAAKuqL,UAAYxmJ,EAAE,UACd9K,SAAS,eACTnpB,OACAzF,SAASrK,KAAK23C,KACnBj2C,EAAEH,KAAKvB,KAAK0xC,MAAM84I,iBAAkB,SAAA2U,GAChC51L,EAAK61L,gBACDD,EAAUvgM,KACVugM,EAAUpjJ,MACVojJ,EAAU1U,UACV0U,EAAUzU,YACVyU,EAAUztK,QACVytK,EAAUrvL,QAKlB9P,KAAKq/L,kBAAkBr/L,KAAK0xC,MAAM0pJ,gBAMtCgE,gBAAiB,SAASxgM,EAAMm9C,EAAO0uI,EAAWC,EAAah5J,EAAS5hB,GACpE,GAAIvG,GAAOvJ,IACXA,MAAKgqL,aAAaprL,GAAQmlC,EAAE,QACvBnhB,KAAK,QAASm5B,GACd9iB,SAAS,eACTA,SAASwxJ,GACT/2H,UACAtjC,MAAM,WACHs6J,EAAYnhL,EAAKmoC,SAEpBrnC,SAASrK,KAAKuqL,WACfz6K,GACA9P,KAAKgqL,aAAaprL,GAAMkR,QAOhCuvL,kBAAmB,SAASC,EAAWC,GACnC,GAAKD,EAAL,CAOAt/L,KAAK0xC,MAAM0pJ,cAAgBkE,EAC3Bt/L,KAAK0xC,MAAMwqB,KAAOqjI,GAAav/L,KAAK0xC,MAAM6N,OAAOwtB,UAAU,SAAW/sE,KAAK0xC,MAAM0pJ,cAAc,GAE/Fp7L,KAAKgqL,aAAauO,UAAU31K,KAAK,QAAjC,0BAAoE5iB,KAAKk8D,KAAzE,IAOA,KAAK,GAFD8oH,GAAQhlL,KAAK0xC,MACb8tJ,KACK/jM,EAAI,EAAG0a,EAAM6uK,EAAMoW,cAAch/L,OAAQX,EAAI0a,EAAK1a,IAAK,CAC5D,GAAIygE,GAAO8oH,EAAMoW,cAAc3/L,EAC/B+jM,GAAatjI,GAAS,SAAAA,GAAA,MAAQ,YAC1B8oH,EAAMqP,YAAYn4H,KAKnBA,GAGP6S,eAAe/uE,KAAKgqL,aAAauO,UAAWiH,M7Ey58CpDjkM,GAAQmkD,S6Ep58CJ4qI,gBAAiBA,K7Eu58CQ3uL,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,EAASH,GAEjC,YAGAmB,QAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G8Eph9CX,IAAAi4C,GAAA/lD,EAAA,GAAYsG,E9E2h9CZ,SAAiCvB,GAAO,GAAIA,GAAOA,EAAIf,WAAc,MAAOe,EAAc,IAAIogD,KAAa,IAAW,MAAPpgD,EAAe,IAAK,GAAIgC,KAAOhC,GAAW5D,OAAOC,UAAUC,eAAed,KAAKwE,EAAKgC,KAAMo+C,EAAOp+C,GAAOhC,EAAIgC,GAAgC,OAAtBo+C,GAAOb,QAAUv/C,EAAYogD,GAFlOY,G8Exh9C5Bh5C,EAASzG,EAAEyG,OAUXs3L,EAAc,SAASC,EAAM9nH,GAC7B53E,KAAK0/L,KAAOA,EACZ1/L,KAAK43E,QAAUA,GAUfylH,EAAiB,SAASrI,EAAS94H,EAAMk8H,EAAU59H,GACnDx6D,KAAK29L,SACL39L,KAAKq8L,iBACLr8L,KAAKg1L,QAAUA,EACfh1L,KAAKk8D,KAAOA,EACZl8D,KAAK2/L,cAAyB,SAATzjI,EACrBl8D,KAAKo4L,SAAWA,EAChBp4L,KAAKw6D,YAAcA,EAOvBryD,GAAOk1L,EAAe7gM,WAIlBojM,iBAAkB,SAAShoH,GAEvB,GAAIioH,GAAavzL,KAAKs+B,MAAMgtC,EAAQ,GAAK53E,KAAKg1L,SAE1C8K,EAAWxzL,KAAKy+B,KAAK6sC,EAAQ,GAAK53E,KAAKg1L,SACvC+K,EAASnoH,EAAQ,EAKrB,QAAet6E,KAAXyiM,GAAwB//L,KAAK2/L,cAAe,CAG5C,GAAIK,GAAWhgM,KAAKw6D,YAAYulI,GAAQ70L,MAAzB,CACX20L,GAAaG,GAAY,GACzBH,GAAcG,EACD,SAEbF,GAAYE,EACC,SA0BrB,OAAQH,EAAYC,IAOxBG,WAAY,SAASC,GAKjB,IAAK,GAHDL,GAAaK,EAAY,GAEzBJ,EAAWI,EAAY,GAClBC,EAAW,EAAGA,GAAYngM,KAAKo4L,SAAU+H,IAAY,CAC1D,GAAIC,IAAc,EACdV,EAAO1/L,KAAKq8L,cAAc8D,EAC9B,QAAa7iM,KAAToiM,EAEA,IAAK,GAAIpxI,GAAI,EAAG+xI,EAAQX,EAAKtjM,OAAQkyD,EAAI+xI,EAAO/xI,IAAK,CACjD,GAAIgyI,GAAMZ,EAAKpxI,EACf,IAAIwxI,EAAWQ,EAAI,IAAMT,EAAaS,EAAI,GAAI,CAE1CF,GAAc,CACd,QAIZ,IAAKA,EACD,MAAOD,GAGf,OAAQ,GAMZ7C,cAAe,SAAS9+C,GAUpB,IAAK,GAND5mE,GACA2oH,EAJAlE,EAAgBr8L,KAAKq8L,cACrBmE,KACAC,EAAe,EAOVhlM,EAAI,EAAG0a,EAAMqoI,EAASpiJ,OAAQX,EAAI0a,EAAK1a,IAAK,CACjDm8E,EAAU4mE,EAAS/iJ,GACnB8kM,EAAc3oH,EAAQ,EACtB,IAAI8oH,GAAe1gM,KAAK29L,MAAM4C,EAG9B,IAAIG,EAAc,CAGd,GAAI9oH,EAAQ,GAAK8oH,EAAa9oH,QAAQ,IAAM8oH,EAAa9oH,QAAQ,GAAKA,EAAQ,GAO1E,IAAK,GAJD+oH,GAAkB3gM,KAAK4/L,iBAAiBc,EAAa9oH,SAErDgpH,EAAkB5gM,KAAK4/L,iBAAiBhoH,GACxCipH,EAAiB7gM,KAAKq8L,cAAcqE,EAAahB,MAC5CpxI,EAAI,EAAGA,EAAIuyI,EAAezkM,OAAQkyD,IAAK,CAC5C,GAAIwyI,GAAKD,EAAevyI,EACpBwyI,GAAG,KAAOH,EAAgB,IAAMG,EAAG,KAAOH,EAAgB,KAE1DE,EAAevyI,GAAKsyI,GAIhCH,EAAen0L,KAAKC,IAAIk0L,EAAczgM,KAAK29L,MAAM4C,GAAab,UAE9Dc,GAAOlkM,KAAKb,GAOpB,IAAK,GAAIA,GAAI,EAAG0a,EAAMqqL,EAAOpkM,OAAQX,EAAI0a,EAAK1a,IAAK,CAC/Cm8E,EAAU4mE,EAASgiD,EAAO/kM,IAC1B8kM,EAAc3oH,EAAQ,EACtB,IAAIsoH,GAAclgM,KAAK4/L,iBAAiBhoH,GAGpCuoH,EAAWngM,KAAKigM,WAAWC,EAG3BC,IAAY,QAEoB7iM,KAA5B++L,EAAc8D,KACd9D,EAAc8D,OAElB9D,EAAc8D,GAAU7jM,KAAK4jM,GAC7BlgM,KAAK29L,MAAM4C,GAAe,GAAId,GAAYU,EAAUvoH,GACpD6oH,EAAen0L,KAAKC,IAAIk0L,EAAcN,IAgB9C,MAAOM,GAAe,K9E+h9C9BllM,EAAQmkD,S8E1h9CJ29I,eAAgBA,I9Egi9Cd,SAAU7hM,EAAQD,EAASH,GAEjC,YAGAmB,QAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G+Ehv9CX,IAAAi4C,GAAA/lD,EAAA,GAAYsG,E/Euv9CZ,SAAiCvB,GAAO,GAAIA,GAAOA,EAAIf,WAAc,MAAOe,EAAc,IAAIogD,KAAa,IAAW,MAAPpgD,EAAe,IAAK,GAAIgC,KAAOhC,GAAW5D,OAAOC,UAAUC,eAAed,KAAKwE,EAAKgC,KAAMo+C,EAAOp+C,GAAOhC,EAAIgC,GAAgC,OAAtBo+C,GAAOb,QAAUv/C,EAAYogD,GAFlOY,G+Etu9C5B0f,EAAkB,SAACkgI,EAAcC,GACjC,GAAI//H,GAAc8/H,EAAa,GAC3B5/H,EAAY4/H,EAAa,GACzB7/H,EAAe8/H,EAAc,GAC7B5/H,EAAa4/H,EAAc,EAsB/B,OApBI//H,GAAcC,EACVC,GAAaD,EAdZ,KAgBMC,GAAaC,EAbZ,KADL,KAsBHH,EAAcG,EAlBd,KAoBOD,GAAaC,EArBb,KADD,MAmCd6/H,EAAa,SAACF,EAAcC,GAC5B,GAAIE,GAAUrgI,EAAgBkgI,EAAcC,EAC5C,OAzCS,QAyCFE,GAnCC,OAmCqBA,GAS7BC,EAAa,SAACjvJ,EAAKmjF,EAAIE,EAAIC,EAAIC,EAAI2rE,OACnB9jM,KAAZ8jM,IACAA,EAAU,EAEd,IAKI5lH,GALA6lH,EAAK7rE,EAAKH,EACVisE,EAAK7rE,EAAKF,EACVgsE,EAASj1L,KAAKs+B,MAAMt+B,KAAKk1L,KAAKH,EAAKA,EAAKC,EAAKA,GAAMF,GACnDK,EAAQJ,EAAKE,EACbG,EAAQJ,EAAKC,CAGjB,KAAK/lH,EAAI,EAAGA,EAAI+lH,EAAQ/lH,IAAK65C,GAAMosE,EAAOlsE,GAAMmsE,EACxClmH,EAAI,GAAM,GAGdtpC,EAAIylF,SAAStC,EAAIE,EAAI6rE,EAAS,IAOlCO,EAAkC,SAASzvJ,EAAK0vJ,EAAeC,EAAeC,GAE9E,GAAIzsE,GAAKusE,EAAgBE,EAAW,EAEhCtsE,EAAKosE,EAAgBE,EAAW,EAChClhH,EAAIihH,EAAgBv1L,KAAKk1L,KAAgB,EAAXM,EAAe,EAGjD5vJ,GAAIkkF,YACJlkF,EAAImkF,OAAOhB,EAAIz0C,GACf1uC,EAAIqkF,OAAOf,EAAI50C,GACf1uC,EAAIqkF,OAAOqrE,EAAeC,GAC1B3vJ,EAAIqkF,OAAOlB,EAAIz0C,GAEf1uC,EAAIskF,YAAcx2H,KAAKm2H,UACvBjkF,EAAIitC,OACJjtC,EAAIukF,SACJvkF,EAAI2tH,aAMJ80B,EAAS,SAASD,GAClB10L,KAAK00L,YAAcA,GAA4B,EAMnDC,GAAOn4L,UAAUo4L,QAAU,SAAShzK,GAChC,MAAO5hB,MAAK00L,YAMhB,IAAIqN,GAAc,SAASzgM,GACvBtB,KAAKu1L,oBAAsBj0L,EAAQi0L,oBACnCv1L,KAAKs1L,eAAiBh0L,EAAQg0L,gBAQ9B0M,EAAU,SAAS5/L,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,GAEtDl8D,KAAKoC,KAAOA,EAEZpC,KAAKiiM,WAAaA,EAClBjiM,KAAKkiM,SAAWA,EAEhBliM,KAAKuiE,MAAQ7gE,EAAEyG,UAAWnI,KAAKmiM,cAAe5/H,GAC9CviE,KAAKk8D,KAAOA,EAGhB8lI,GAAQxlM,UAAU2lM,iBAKlBH,EAAQxlM,UAAU6iF,KAAO,SAACntC,EAAKhnC,EAAOiD,EAAQ6mL,KAK9CgN,EAAQxlM,UAAU4lM,mBAAqB,SAASrQ,EAAWiD,GACvD,MAAOh1L,MAAKqiM,uBAAuBtQ,EAAWiD,GAAU,KAM5DgN,EAAQxlM,UAAU8lM,iBAAmB,SAASvQ,EAAWiD,GACrD,MAAOh1L,MAAKqiM,uBAAuBtQ,EAAWiD,EAAS,KAM3DgN,EAAQxlM,UAAU+lM,aAAe,SAASxQ,EAAWiD,GACjD,MAAOh1L,MAAKqiM,uBAAuBtQ,EAAWiD,EAAS,IAM3DgN,EAAQxlM,UAAU6lM,uBAAyB,SAAStQ,EAAWiD,EAAShzJ,GACpE,MAAO11B,MAAKs+B,MAAMoqJ,GAAW1oL,KAAKC,IAAI,EAAGwlL,EAAY/xL,KAAKiiM,YAAcjgK,IAG5E,IAAI44J,GAAc,SAASx4L,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,GAC1D8lI,EAAQrmM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,GAG1D0+H,GAAYp+L,UAAU2lM,eAClBzK,cAAWp6L,GACXq6L,cAAWr6L,GACX4+D,KAAM,YACNlV,MAAO,OACPw7I,eAAgB,QAGpB5H,EAAYp+L,UAAU6iF,KAAO,SAASntC,EAAKhnC,EAAOiD,EAAQ6mL,GACtD,GAAIyN,IAAU,EACV/K,EAAY13L,KAAKuiE,MAAMm1H,UACvBC,EAAY33L,KAAKuiE,MAAMo1H,UACvB+K,EAAiB/K,EAAYD,EAC7BiL,EAAYx0L,EACZ8zL,EAAajiM,KAAKiiM,WAClB/lI,EAAOl8D,KAAKk8D,KACZ95D,EAAOpC,KAAKoC,IAEhB8vC,GAAIgD,MAGJ,IAAI0tJ,GAASt2L,KAAK4xC,MAAM/vC,EAASupL,EAAYgL,EAAiBv0L,EAGjD,eAAT+tD,IACAhqB,EAAIikF,UAAY,OAChBjkF,EAAIylF,SAAS,EAAGirE,EAAQ13L,EAAO,IAGnCgnC,EAAIkkF,WACJ,IAAIysE,GACAjiH,EACAkiH,CAEAA,GADA1gM,EAAKhG,OAAS,EACAsF,EAAEgI,IAAItH,EAAK6J,MAAM,GAAI,GAAI,SAACtN,EAAGlD,GAAJ,MAAU6Q,MAAKy+B,MAAM3oC,EAAK3G,EAAI,GAAG,GAAK2G,EAAK3G,GAAG,IAAMu5L,MAE5E,GAiBnB,KAAK,GADD+N,GAZAC,EAAgBhjM,KAAKuiE,MAAM0gI,aAAejjM,KAAKuiE,MAAMvb,MAGzDk8I,EAAarqK,SAASmqK,EAAc/2L,MAAM,GAAI,IAE1Ck3L,GAAuB,SAAbD,IAA0B,GACpCE,GAAuB,MAAbF,IAA0B,EACpCG,EAAsB,IAAbH,EACTI,GAAe,EACfC,GAAe,EAIV9nM,EAAI,EAAG0a,EAAM/T,EAAKhG,OAAQX,EAAI0a,EAAK1a,IAUxC,GARAy2C,EAAIikF,UAAYjkF,EAAIskF,YAAcwsE,EAClCM,EAAeC,GAAe,EAC9BR,EAAaD,EAAYrnM,GAEzBonM,EAAWv2L,KAAKs+B,OAAOxoC,EAAK3G,GAAG,GAAKwmM,EAAa,IAAOjN,GAI9C,QAHVp0G,EAAIx+E,EAAK3G,GAAG,IAGZ,CAkBA,GATImlF,EAAI82G,GACJ6L,GAAe,EACf3iH,EAAI82G,GACG92G,EAAI+2G,IACX2L,GAAe,EACf1iH,EAAI+2G,GAIK,cAATz7H,EAEA0kB,EAAIt0E,KAAK4xC,MAAM0iC,EAAI8hH,EAAiBC,GACpCzwJ,EAAIylF,SAASkrE,EAAUD,EAAQG,GAAaniH,OACzC,IAAa,cAAT1kB,EAAsB,CAC7B,GAAIsnI,IAAc5iH,EAAI82G,GAAagL,EAGnCe,EAAQn3L,KAAK4xC,MAAMilJ,GAAU,IAAMA,IAAW,EAAIK,IAE9CE,EAAQp3L,KAAK4xC,MAAMklJ,GAAU,IAAMA,IAAW,EAAII,IAClDG,EAAQr3L,KAAK4xC,MAAMmlJ,GAAU,IAAMA,IAAW,EAAIG,GACtDtxJ,GAAIikF,UAAJ,OAAuBstE,EAAvB,IAAgCC,EAAhC,IAAyCC,EAAzC,IACAzxJ,EAAIylF,SAASkrE,EAAU,EAAGE,EAAYJ,OAKtC/hH,GAAIt0E,KAAK4xC,MAAMykJ,GAAa/hH,EAAI82G,GAAagL,EAAiBC,GAC1DF,EACAvwJ,EAAIqkF,OAAOssE,EAAUjiH,IAErB6hH,GAAU,EACG,WAATvmI,GACAhqB,EAAImkF,OAAOwsE,EAAUF,GACrBzwJ,EAAIqkF,OAAOssE,EAAUjiH,IAErB1uC,EAAImkF,OAAOwsE,EAAUjiH,GAWjC,IADA1uC,EAAIikF,UAAYn2H,KAAKuiE,MAAMigI,eACvBc,GAAgBC,EAAc,CAC9B,GAAIK,EACS,eAAT1nI,GAAiC,cAATA,EACxB0nI,EAAab,GAGbF,GAAY,EACZe,EAAa,GAEbN,GACApxJ,EAAIylF,SAASkrE,EAAU,EAAGe,EAAY,GAEtCL,GACArxJ,EAAIylF,SAASkrE,EAAUF,EAAY,EAAGiB,EAAY,GAG1D1xJ,EAAIikF,UAAY6sE,MAvERP,IAAoB,WAATvmI,GACXhqB,EAAIqkF,OAAOssE,EAAUF,GAEzBF,GAAU,CAsEL,YAATvmI,GACIumI,IACAvwJ,EAAIqkF,OAAOssE,EAAUD,GACrB1wJ,EAAIqkF,OAAO,EAAGqsE,IAElB1wJ,EAAIitC,QAEJjtC,EAAIukF,SAGRvkF,EAAIwkF,UAMR,IAAImtE,GAAwB,SAASC,GACjC9jM,KAAK+jM,qBACL/jM,KAAK8jM,YAAcA,EACnB9jM,KAAKo+L,YAAc,EACnBp+L,KAAKgkM,cAAgB,EAMzBH,GAAsBrnM,UAAUynM,iBAAmB,SAASpP,EAAc6K,EAAMwE,EAASC,GAChFnkM,KAAK+jM,kBAAkBrE,KACxB1/L,KAAK+jM,kBAAkBrE,OAE3B1/L,KAAK+jM,kBAAkBrE,GAAMpjM,MACzB8F,KAAMyyL,EACNqP,QAASA,EACTC,MAAOA,KAOfN,EAAsBrnM,UAAU4nM,iBAAmB,SAASx1H,EAAGgS,GAE3D,GAEIyjH,GAFA3E,EAAOpzL,KAAKs+B,OAAOg2C,EAAI5gF,KAAKgkM,eAAiBhkM,KAAK8jM,YAKtD,KAAK9jM,KAAK+jM,kBAAkBrE,GACxB,MAAO,KAIX9wH,IAAK5uE,KAAKo+L,WACV,KAAK,GAAI3iM,GAAI,EAAGA,EAAIuE,KAAK+jM,kBAAkBrE,GAAMtjM,OAAQX,IAErD,GADA4oM,EAAerkM,KAAK+jM,kBAAkBrE,GAAMjkM,GACxCmzE,GAAKy1H,EAAaH,SAAWt1H,GAAKy1H,EAAaF,MAC/C,MAAOE,GAAajiM,KAUhC,IAAIkiM,GAAiB,SAASliM,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAMqoI,EAAcC,GACjFxC,EAAQrmM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,GACtDl8D,KAAKukM,aAAeA,GAA8B,GAAI5P,GACtD30L,KAAKwkM,cAAgBA,GAAgC,GAAI7P,GACzD30L,KAAKykM,iBAAmB,IAG5BH,GAAe9nM,UAAU2lM,eACrBc,YAAa,OACbyB,gBAAiB,QAGrBhjM,EAAEyG,OAAOm8L,EAAe9nM,WACpBihM,oBAAqB,SAASF,EAAeryL,GAEzC,GAAIy5L,GAAkB3kM,KAAK4kM,iBAEvBC,EAAUF,EACVzoI,EAAOl8D,KAAKk8D,IAKhB,OAHa,cAATA,GAAiC,WAATA,GAA8B,SAATA,IAC7CyoI,EAAkBpH,EAAgBsH,GAE/BF,EAAkB3kM,KAAK8kM,gBAAgB55L,IAIlD45L,gBAAiB,SAAS55L,GACtB,MAAO,IAOXm0E,KAAM,SAASntC,EAAKhnC,EAAOiD,EAAQ6mL,EAAS2I,GACxC,GAAIv7L,GAAOpC,KAAKoC,KACZ6/L,EAAajiM,KAAKiiM,WAClBC,EAAWliM,KAAKkiM,QAEpBhwJ,GAAIgD,OAEJhD,EAAIikF,UAAYn2H,KAAKuiE,MAAM0gI,YAC3B/wJ,EAAI4pJ,UAAY,OAOhB,KAAK,GAHDiJ,GAFAF,EAAU7kM,KAAK4kM,iBACftP,EAAiB,GAAIuO,GAAsBgB,GAE3CtP,KAEK95L,EAAI,EAAG0a,EAAM/T,EAAKhG,OAAQX,EAAI0a,EAAK1a,IAAK,CAC7C,GAAIm8E,GAAUx1E,EAAK3G,GACf8kM,EAAc3oH,EAAQ,GACtBotH,EAAgBptH,EAAQ,GACxBqtH,EAAcrtH,EAAQ,GAI1B8nH,EAAO/B,OAAgCrgM,KAAvBqgM,EAAM4C,GAA6B5C,EAAM4C,GAAab,KAAO,MAI1D,UAAd1/L,KAAKk8D,MAA6B,OAATwjI,IAAmBsF,EAAgB9C,GAAY+C,EAAchD,IACvF8C,EAAgB/kM,KAAKklM,aACjBhzJ,EACAlyC,KAAKk8D,KACL0b,EACA8nH,EACAuC,EACAC,EACAlN,EACA6P,EACA35L,GAEJoqL,EAAe2O,iBAAiBrsH,EAAS8nH,EAAMqF,EAAc,GAAIA,EAAc,KAG3EC,EAAgB/C,GAAcgD,EAAc/C,IAC5C3M,EAAoBj5L,KAAKs7E,IAQrC,MAHA1lC,GAAIwkF,UAEJ4+D,EAAe0O,cAAgBhkM,KAAK8kM,gBAAgB55L,GAC7C,GAAI62L,IACPxM,oBAAqBA,EACrBD,eAAgBA,KAOxB4P,aAAc,SAAShzJ,EAAKgqB,EAAM0b,EAAS8nH,EAAMrF,EAAUC,EAAWtF,EAAS6P,EAAS35L,GACpF,OAAQ,EAAG,KAMnB,IAYIuxL,GAAuB,SAASr6L,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAMqoI,EAAcC,GACvFF,EAAe3oM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAMqoI,EAAcC,GAEjFxkM,KAAKmlM,2BAA4B,EAEjCnlM,KAAKolM,4BAA6B,EAGtC1jM,GAAEyG,OAAOs0L,EAAqBjgM,UAAW8nM,EAAe9nM,WAIpDooM,eAAgB,WACZ,GAAI1oI,GAAOl8D,KAAKk8D,IAYhB,OAVa,UAATA,EA3Ba,GA6BG,cAATA,EA3BU,EA6BD,WAATA,EA5BO,EACF,IAuCpBgpI,aAAc,SAAShzJ,EAAKgqB,EAAM0b,EAAS8nH,EAAMrF,EAAUC,EAAWtF,EAAS6P,EAAS35L,GACpF,GAiBIm6L,GAhBAL,GADcptH,EAAQ,GACNA,EAAQ,IACxBqtH,EAAcrtH,EAAQ,GACtB0tH,EAAe1tH,EAAQ,GACvB2tH,EAAiB3tH,EAAQ,GAG7B4tH,EAAUl5L,KAAKs+B,MAAMt+B,KAAKC,IAAI,GAAIy4L,EAAgB3K,EAAW,IAAOrF,IAEhEyQ,EAAQn5L,KAAKy+B,KAAKz+B,KAAKy4B,IAAI75B,EAAOoB,KAAKC,IAAI,GAAI04L,EAAc5K,EAAW,IAAOrF,KAE/E6K,EAAa2F,EACb1F,EAAW2F,EAEXJ,GAAoB,UAATnpI,EAAmB,EAAI,EAAIwjI,GAAQmF,EAAU7kM,KAAK8kM,gBAAgB55L,GAI7Ew6L,EAAc,KACdC,EAAY,KAIhB1C,EACKsC,GAAqC,MAAnBA,GAA6C,MAAnBA,EAEvCvlM,KAAKuiE,MAAMqjI,qBADX5lM,KAAKuiE,MAAM0gI,YAGjB4C,EAAc7lM,KAAKuiE,MAAMsjI,WAU7B,IAPA3zJ,EAAIqoJ,YAAcv6L,KAAKukM,aAAa3P,QAAQh9G,GAG/B,UAAT1b,IACAwjI,EAAO,GAGE,cAATxjI,EAEAhqB,EAAIikF,UAAY8sE,EAChB/wJ,EAAIylF,SAAS6tE,EAASH,EAAU,EAAGI,EAAQD,EAhFxB,OAiFhB,CAGH,GAAIM,GAAaluH,EAAQ,GAErBmuH,EAAanuH,EAAQ,GACrBouH,EAAiBpuH,EAAQ,GAG7BquH,GAAc,CAEVH,IAAcC,IACdL,EAAcp5L,KAAKs+B,MAAMt+B,KAAKC,IAAI,GAAIu5L,EAAazL,GAAYrF,IAC/D2Q,EAAYr5L,KAAKy+B,KAAKz+B,KAAKy4B,IAAI75B,EAAOoB,KAAKC,IAAI,GAAIw5L,EAAa1L,GAAYrF,KAIhF,IAAIkR,GAEAC,CAeJ,IAda,WAATjqI,GACAgqI,EAAc,EACdC,EArGY,EAsGZF,GAAc,IAEdC,EAAc,EACdC,EA1GW,GAkHVH,EAaE,CAUH,GAAII,GAEAC,CACS,YAATnqI,GAA8B,UAATA,GACrBkqI,EAAcf,EAAU/4L,KAAKs+B,MAAM07J,KAA6B,EAChED,EAAa,GAGTd,GACAa,EAAcf,EACdgB,EAAaF,IAEbC,GAAeE,IACfD,EAAa,GAKjBrmM,KAAKmlM,4BACQ,WAATjpI,GAA8B,UAATA,EACrBhqB,EAAIikF,UAzJN,OA4JMovE,EACuB,MAAnBA,EACArzJ,EAAIikF,UAAYjkF,EAAI4oB,OAAOC,QAAQF,YAAY,gBACrB,MAAnB0qI,IACPrzJ,EAAIikF,UAAYjkF,EAAI4oB,OAAOC,QAAQF,YAAY,gBAGnD3oB,EAAIikF,UAnKV,OAsKFjkF,EAAIylF,SAAS6tE,EAASY,EAAaX,EAAQD,EAASa,GAKxD,KAAK,GAAI/3I,GAAI,EAAG+xI,EAAQ2F,EAAe5pM,OAAQkyD,EAAI+xI,EAAO/xI,IAAK,CAC3D,GAOIi4I,GACAC,EARAC,EAAQT,EAAe13I,GAG3Bo4I,EAAcp6L,KAAKs+B,MAAMt+B,KAAKC,IAAI,GAAIk6L,EAAM,GAAKpM,EAAW,IAAOrF,IAE/D2R,EAAYr6L,KAAKy+B,KAAKz+B,KAAKy4B,IAAI75B,EAAOoB,KAAKC,KAAKk6L,EAAM,GAAKpM,EAAW,IAAOrF,IAMjF,MAAI0R,EAAcC,GAAlB,CAeA,GAVAz0J,EAAIikF,UAAY8sE,EAChB/wJ,EAAIylF,SACA+uE,EACArB,GAAWc,EAAeD,GAAe,EAAI,EAC7CS,EAAYD,EACZR,OAMgB5oM,KAAhBooM,GACAK,EAAaD,KACXY,EAAcf,GAAagB,EAAYjB,GAC3C,CACE,GAAIkB,GAAoBt6L,KAAKC,IAAIm6L,EAAahB,GAE1CmB,EAAkBv6L,KAAKy4B,IAAI4hK,EAAWhB,EAC1CzzJ,GAAIylF,SAASivE,EAAmBvB,EAAU,EAAGwB,EAAkBD,EAAmBT,GACpD,IAA1BH,EAAe5pM,QAAyB,SAAT8/D,IAGR,MAAnBqpI,EACArzJ,EAAIikF,UAAYjkF,EAAI4oB,OAAOC,QAAQF,YAAY,oBACrB,MAAnB0qI,IACPrzJ,EAAIikF,UAAYjkF,EAAI4oB,OAAOC,QAAQF,YAAY,oBAG/C+rI,EAAoB,GAAKC,IACzBD,GAAqB,EACrBC,GAAmB,GAEvB30J,EAAIylF,SACAivE,EACAvB,EAAU,EACVwB,EAAkBD,EAClBT,IAKRnmM,KAAKolM,4BAA8BmB,GACnCvmM,KAAK8mM,eAAe50J,EAAKq0J,EAAkBC,EAAgBE,EAAaC,EAAWtB,GAEvFkB,EAAmBG,EACnBF,EAAiBG,GAIrB,GAAa,SAATzqI,EAAiB,CAEjBhqB,EAAIqoJ,YAAc,EAGlBroJ,EAAIikF,UAAY,OAChB,IAAI4wE,GAAgB/mM,KAAKwkM,cAAc5P,QAAQh9G,GAG/Ck/G,EAAaxqL,KAAKy+B,KAAKo7J,EAAeY,GAElCC,EAAY16L,KAAK4xC,OAAOioJ,EAAerP,GAAc,EACnC,KAAlBiQ,IACA70J,EAAIylF,SAAS6tE,EAASY,EAAc,EAAGX,EAAQD,EAASwB,GACxD90J,EAAIylF,SAAS6tE,EAASY,EAAcD,EAAea,EAAY,EAAGvB,EAAQD,EAASwB,SA3I3F90J,GAAIikF,UAAY8sE,EAChB/wJ,EAAIylF,SAAS6tE,EAASH,EAAU,EAAGI,EAAQD,EAASW,GAEhDZ,GAAkBU,IACK,MAAnBV,EACArzJ,EAAIikF,UAAYjkF,EAAI4oB,OAAOC,QAAQF,YAAY,oBACrB,MAAnB0qI,IACPrzJ,EAAIikF,UAAYjkF,EAAI4oB,OAAOC,QAAQF,YAAY,oBAEnD3oB,EAAIylF,SAAS6tE,EAASH,EAAU,EAAGI,EAAQD,EAASW,GAwI5Dj0J,GAAIqoJ,YAAc,EAGd+K,GAAyB,SAATppI,GAAmB8oI,EAAgB3K,IACnDnoJ,EAAIikF,UAAY0vE,EAEC,IAAbxL,GAAkBmL,EAAUtzJ,EAAIsoB,YAAY8qI,GAAcp6L,MAAQ,GAClEgnC,EAAI4pJ,UAAY,OAChB5pJ,EAAI8pJ,SAASsJ,EAAcG,EA1Q3B,EA0QkDJ,EAAU,EAAGrlM,KAAKykM,kBACpE3E,GAAY5tJ,EAAIsoB,YAAY8qI,GAAcp6L,MA3Q1C,IA6QAgnC,EAAI4pJ,UAAY,QAChB5pJ,EAAI8pJ,SAASsJ,EAAcE,EA9Q3B,EA8QoDH,EAAU,EAAGrlM,KAAKykM,kBACtE5E,GAAc3tJ,EAAIsoB,YAAY8qI,GAAcp6L,MA/Q5C,IAwRZ,MAFAgnC,GAAIqoJ,YAAc,GAEVsF,EAAYC,KAI5B,IAAIjB,GAAc,SACdz8L,EACA6/L,EACAC,EACA3/H,EACArG,EACAqoI,EACAC,EACA3J,EACAoM,GAEA3C,EAAe3oM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAMqoI,EAAcC,GACjFxkM,KAAK66L,QAAUA,EAAUA,EAAQz4L,KAAO,KACxCpC,KAAKinM,cAAgBA,EAGzBvlM,GAAEyG,OAAO02L,EAAYriM,UAAW8nM,EAAe9nM,WAI3CooM,eAAgB,WACZ,GAAIz2L,GACA+tD,EAAOl8D,KAAKk8D,IAYhB,OAXa,UAATA,EACA/tD,EA7Ta,GA8TG,WAAT+tD,EACP/tD,EA5Tc,GA+TdA,EA9TY,GA+TRnO,KAAKuiE,MAAM2kI,kBACX/4L,GAAU,IAGXA,GAQXg5L,aAAc,SAASC,GACnB,GAAIC,GAAY,YAGZC,IAAW,EAAG,IAEdC,EAAYD,EAAO,GACnBE,EAAW,EAGfC,EAAe/lM,EAAEgI,IAAI09L,EAAU5lM,MAAM,sBAAuB,SAAAomE,GAExD,GAAI8/H,GAAS7uK,SAAS+uC,EAAG37D,MAAM,GAAI,GAAI,IACnC07L,EAAU//H,EAAG37D,OAAO,EAiBxB,OAdgB,MAAZ07L,EAGqB,IAAjBJ,EAAU,KACVA,GAAaC,EAAWE,EAAQF,EAAWE,GAC3CJ,EAAOhrM,KAAKirM,KAEoB,IAA7B,OAAOtmM,QAAQ0mM,KAEtBJ,EAAU,IAAMG,EAChBF,GAAYE,IAIRL,EAAUpmM,QAAQ0mM,GAAUD,IAGxC,QACIJ,OAAQA,EACRM,MAAOH,IAOfI,UAAW,SAAS31J,EAAKgqB,EAAM84H,EAASqQ,EAAShL,EAAUC,EAAW0K,EAAe4C,EAAOE,EAAQC,GAEhG,GAeAC,GAAiB,SACbC,GADa,MAEZ37L,MAAKs+B,MAAMt+B,KAAKC,IAAI,GAAI07L,EAAiB5N,EAAW,IAAOrF,IAEhE9iJ,GAAI4pJ,UAAY,QAChB,IAeIoM,GACAC,EAhBAxP,GAAe0B,EAAUC,GACzB8N,EAAc,EACdC,EAAa,EACbC,EAAMh8L,KAAK4xC,MAAM82I,EAAU,GAC3Bz6H,EAAgBroB,EAAI4oB,OAAOC,QAAQR,cAEnC0oI,EAAyB,MAAX6E,EAAiB9nM,KAAKuiE,MAAMgmI,mBAAqBvoM,KAAKuiE,MAAMqjI,qBAE1E4C,EAAqB,SAATtsI,EAEZusI,EAAcD,EAjZA,EADE,EAoZhBE,EAASrD,EAAU,EACnBsD,EAAc,GAAIC,GAAiB12J,EAAKu2J,EAAazT,EAAS94H,GAC9D2sI,KAKAC,KAGA/7K,EAAI/sB,KAAKmnM,aAAaS,EAC1BA,GAAQ76K,EAAE66K,MACViB,EAAiB97K,EAAEu6K,MAGnB,KAAK,GAAI7rM,GAAI,EAAGA,EAAIotM,EAAezsM,OAAQX,IAAK,CAC5C,GAAIgrM,GAAQoC,EAAeptM,EAEvBwlM,IAAY+D,EAAgByB,EAAM,GAAIzB,EAAgByB,EAAM,IAAK9N,KACjEuP,EAAUF,EAAehD,EAAgByB,EAAM,IAC/C0B,EAAQH,EAAehD,EAAgByB,EAAM,IAMzCyB,IAAYC,IACZA,GAAS,GAIbj2J,EAAIikF,UAAY8sE,EAChB/wJ,EAAIylF,SAASuwE,EAASQ,EAAQP,EAAQD,EAASO,IAKvD,IAAK,GAAIM,GAAS,EAAG5yL,EAAMyxL,EAAMxrM,OAAQ2sM,EAAS5yL,EAAK4yL,IAAU,CAC7D,GAAIC,GAAMpB,EAAMmB,GACZE,EAAS,YAAYD,EAAI,IACzBE,EAAUF,EAAI,GAEdppI,EAAYolI,EAAgBoD,CAKhC,IAJAF,EAAUF,EAAepoI,GACzBuoI,EAAQH,EAAepoI,EAAYspI,GAG9BjI,GAAYrhI,EAAWA,EAAYspI,GAAUvQ,GAgBlD,OALIuP,IAAYC,IACZA,GAAS,GAILc,GACJ,IAAK,IACL,IAAK,IACL,IAAK,IAED,KACJ,KAAK,IAEDb,GAAec,CACf,MACJ,KAAK,IACL,IAAK,IAMD,GAAIC,GAAU,EACC,OAAXF,EAEAE,EAAUpB,EAAS97L,MAAMo8L,EAAYA,EAAaa,GAC3ClpM,KAAK66L,UAGZsO,EAAUnpM,KAAK66L,QAAQ5uL,MAEnBK,KAAKC,IAAI,EAAGqzD,EAAYy6H,GAExB/tL,KAAKy4B,IAAI66B,EAAYy6H,EAAW6O,EAAS5O,EAAYD,IAM7D,KAAK,GADD+O,GAAY98L,KAAKC,IAAIqzD,EAAWy6H,GAC3B37L,EAAI,EAAGA,EAAIyqM,EAAQ/sM,OAAQsC,IAEhC,GAAKyqM,IAAYnpM,KAAKuiE,MAAM8mI,kBAAgC,MAAXJ,EAAgB,CAE7D,GAAIK,GAAUh9L,KAAKs+B,MAAMt+B,KAAKC,IAAI,GAAI68L,EAAY1qM,EAAI27L,GAAYrF,GAClE9iJ,GAAIikF,UAAYn2H,KAAKinM,cAAckC,EAAQzqM,IACvC8pM,GAAaxT,EAAUz6H,EACvBroB,EAAI8pJ,SAASmN,EAAQzqM,GAAI4qM,EAASjE,EAAU,GACrCrQ,EAAU,KAEjB9iJ,EAAIylF,SAAS2xE,EAAUhB,EAAKI,EAAQp8L,KAAKC,IAAI,EAAGD,KAAK4xC,MAAM82I,IAAWyT,GAMnE,MAAXQ,IACAZ,GAAca,GAElBd,GAAec,CAEf,MACJ,KAAK,IACDh3J,EAAIikF,UAzgBF,OA0gBFjkF,EAAIylF,SAASuwE,EAASQ,GAAUD,EAAc,GAAK,EAAGN,EAAQD,EAAS,GAEvEE,GAAec,CACf,MACJ,KAAK,IACDP,EAAYY,cAAcrB,EAASQ,EAAQQ,GAC3Cd,GAAec,CACf,MACJ,KAAK,IAGD,GAAIM,GAAiBtB,EAAUI,CAE/B,IAAIrH,GAAYrhI,EAAWA,EAAYspI,GAAUvQ,GAAc,CAC3D,GAAI8Q,GAAM1B,EAAS97L,MAAMo8L,EAAYA,EAAaa,EAGlD,IAAIlpM,KAAKuiE,MAAM2kI,gBAAiB,CAO5B,GAAIwC,GAAWxB,GAAWC,EAAQD,GAAW,CAC7C,KACc,SAAThsI,GAAiC,SAAdl8D,KAAKk8D,WACZ5+D,KAAbyqM,GACA/S,EAAUz6H,EACZ,CAUE,OARAroB,EAAIikF,UAAY,SAChBjkF,EAAIylF,SAAS+xE,EAAWpB,EAAKjD,EAAU,EAAG8C,EAAQD,EAAS,GAC3DY,EAAUA,EAAU1sM,SAChB4B,KAAM,WACNoE,MAAOonM,EAAgBnE,EAAU,EAAG,IAExCnzJ,EAAIikF,UA/iBd,OAijBkBt1D,GAAiBjB,EAAWA,EAAYspI,GAAUvQ,IACtD,IAnhChB,MAohCoB8Q,EAAMA,EAAIx9L,MAAMouL,EAAWz6H,EAC3B,MACJ,KArhClB,MAshCsB6pI,EAAMA,EAAIx9L,MAAM,EAAG2zD,EAAY06H,EAC/B,MACJ,KAvhCjB,MAyhCqB,KACJ,KA7hCrB,MA8hCyBmP,EAAMA,EAAIx9L,MAAMouL,EAAWz6H,EAAWA,EAAY06H,GAI1D,IAAK,GAAI57L,GAAI,EAAGq9L,EAAU0N,EAAIrtM,OAAQsC,EAAIq9L,EAASr9L,IAAK,CACpD,GAAI4qM,GAAUh9L,KAAKs+B,MAAMt+B,KAAKC,IAAI,GAAIqzD,EAAYlhE,EAAI27L,GAAYrF,GAClE9iJ,GAAI8pJ,SAASyN,EAAI/qM,GAAI4qM,GAAWnB,EAAQD,GAAW,EAAG7C,QAI1DnzJ,GAAIikF,UAAY,SAEhBjkF,EAAIylF,SACA+xE,EACArE,GAAyB,UAAdrlM,KAAKk8D,KAAmB,EAAI,GACvCisI,EAAQD,EACC,UAAThsI,EA/kBR,EADD,QAqlBe,SAATA,GAAiC,SAAdl8D,KAAKk8D,WACZ5+D,KAAbyqM,GACA/S,EAAUz6H,GAGVuuI,EAAUxsM,MACN0B,KAAM,OACNoE,MAAOqnM,EAAIrtM,OAAQotM,EAAgBnE,EAAU,KAO7DgD,GAAca,MA7JlBd,GAjFiB,SAACpmK,EAAQinK,EAAQC,GAItC,OAHiC,IAA7B,QAAQjoM,QAAQgoM,KAChBjnK,GAAUknK,GAEPlnK,GA6E8BomK,EAAaa,EAAQC,GACtDb,EA3EgB,SAACrmK,EAAQinK,EAAQC,GAIrC,OAH8B,IAA1B,KAAKjoM,QAAQgoM,KACbjnK,GAAUknK,GAEPlnK,GAuE4BqmK,EAAYY,EAAQC,GAqK3Dh3J,EAAIikF,UAAY,QAIhB,KAAK,GAHDrxF,GACA9mC,EACAoE,EACK3G,EAAI,EAAGA,EAAIqtM,EAAU1sM,OAAQX,IAClCqpC,EAAOgkK,EAAUrtM,GACjBuC,EAAO8mC,EAAK9mC,KACZoE,EAAO0iC,EAAK1iC,KACC,SAATpE,GACAk0C,EAAIgD,OACJhD,EAAIooB,KAAJ,QAAmBpoB,EAAIooB,KACvBpoB,EAAI8pJ,SAAS55L,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACpC8vC,EAAIwkF,WACY,aAAT14H,GACP2jM,EAAgCzvJ,EAAK9vC,EAAK,GAAIA,EAAK,GAAIA,EAAK,KAQxE8iM,aAAc,SAAShzJ,EAAKgqB,EAAM0b,EAAS8nH,EAAMrF,EAAUC,EAAWtF,EAAS6P,EAAS35L,GAEpF,GAEI85L,IAFcptH,EAAQ,GAENA,EAAQ,IACxBqtH,EAAcrtH,EAAQ,GACtB0tH,EAAe1tH,EAAQ,GAG3B4tH,EAAUl5L,KAAKs+B,MAAMt+B,KAAKC,KAAK,GAAMyoL,GAAUgQ,EAAgB3K,EAAW,IAAOrF,IAE7EyQ,EAAQn5L,KAAKy+B,KAAKz+B,KAAKy4B,IAAI75B,EAAOoB,KAAKC,IAAI,GAAI04L,EAAc5K,EAAW,IAAOrF,KAE/EqQ,GAAoB,UAATnpI,EAAmB,EAAI,EAAIwjI,GAAQmF,EAE9C4D,EAAuB,SAATvsI,EA/oBA,EADE,CAkpBFl8D,MAAKuiE,MAAMsjI,WAG7B,IAAIjuH,EAAQ,YAAc/gE,OAAO,CAE7B,GAAI8yL,IAAY,CAGZ/xH,GAAQ,GAAG,IAAMyiH,GAAYziH,EAAQ,GAAG,IAAM0iH,GAAa1iH,EAAQ,GAAG,GACtE53E,KAAK6nM,UACD31J,EACAgqB,EACA84H,EACAqQ,EACAhL,EACAC,EACA1iH,EAAQ,GAAG,GACXA,EAAQ,GAAG,GACXA,EAAQ,GAAG,GACXA,EAAQ,GAAG,IAGf+xH,GAAY,EAIZ/xH,EAAQ,GAAG,IAAMyiH,GAAYziH,EAAQ,GAAG,IAAM0iH,GAAa1iH,EAAQ,GAAG,GACtE53E,KAAK6nM,UACD31J,EACAgqB,EACA84H,EACAqQ,EACAhL,EACAC,EACA1iH,EAAQ,GAAG,GACXA,EAAQ,GAAG,GACXA,EAAQ,GAAG,GACXA,EAAQ,GAAG,IAGf+xH,GAAY,CAQhB,IAAIC,GAASt9L,KAAKy+B,KACdz+B,KAAKy4B,IAAI75B,EAAOoB,KAAKC,KAAK,GAAMyoL,GAAUp9G,EAAQ,GAAG,GAAKyiH,EAAW,IAAOrF,KAG5E6U,EAAWv9L,KAAKs+B,MAAMt+B,KAAKC,KAAK,GAAMyoL,GAAUp9G,EAAQ,GAAG,GAAKyiH,EAAW,IAAOrF,GAEtF,IAAI2U,GAAaE,EAAWD,EAAQ,CAChC13J,EAAIikF,UAtsBE,MAusBN,IAAI2zE,GAAczE,EAAU,GAAKoD,EAAc,GAAK,CACpDtH,GAAWjvJ,EAAK03J,EAAQE,EAAaD,EAAUC,QAInD9pM,MAAK6nM,UACD31J,EACAgqB,EACA84H,EACAqQ,EACAhL,EACAC,EACA0K,EACAptH,EAAQ,GACRA,EAAQ,GACRA,EAAQ,GAgBhB,OAba,SAAT1b,GAAmB8oI,GAAiB3K,GAA6B,MAAjBiL,IAEhDpzJ,EAAIikF,UAAYn2H,KAAKuiE,MAAMsjI,YACV,IAAbxL,GAAkBmL,EAAUtzJ,EAAIsoB,YAAY8qI,GAAcp6L,MAAQ,GAClEgnC,EAAI4pJ,UAAY,OAChB5pJ,EAAI8pJ,SAASsJ,EAAcG,EA/tBvB,EA+tB8CJ,EAAU,EAAGrlM,KAAKykM,oBAEpEvyJ,EAAI4pJ,UAAY,QAChB5pJ,EAAI8pJ,SAASsJ,EAAcE,EAluBvB,EAkuBgDH,EAAU,EAAGrlM,KAAKykM,qBAKtE,EAAG,KAInB,IAAIjI,GAA0B,SAASp6L,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAMqoI,EAAcC,GAC1F/H,EAAqB9gM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAMqoI,EAAcC,GAEvFxkM,KAAK+pM,uBAAyB/pM,KAAKgqM,mCACnChqM,KAAKmlM,2BAA4B,EACjCnlM,KAAKolM,4BAA6B,EAGtC1jM,GAAEyG,OAAOq0L,EAAwBhgM,UAAW8nM,EAAe9nM,UAAWigM,EAAqBjgM,WACvFwtM,iCAAkC,WAE9B,IAAK,GADDD,GAAyB,EACpBtuM,EAAI,EAAG0a,EAAMnW,KAAKoC,KAAKhG,OAAQX,EAAI0a,EAAK1a,IAAK,CAClD,GAAIm8E,GAAU53E,KAAKoC,KAAK3G,GACpBupM,EAAgBptH,EAAQ,GACxBqtH,EAAcrtH,EAAQ,EAC1BmyH,GAAyBz9L,KAAKC,IAAIw9L,EAAwB9E,EAAcD,GAE5E,MAAO+E,IAGXjF,gBAAiB,SAAS55L,GACtB,GAAI++L,GAAajqM,KAAKkiM,SAAWliM,KAAKiiM,WAClCjN,EAAU9pL,EAAQ++L,CACtB,OAAO39L,MAAKy4B,IAAI,IAAKz4B,KAAKy+B,KAAK/qC,KAAK+pM,uBAAyB,EAAI/U,KAGrE8R,eAAgB,SAAS50J,EAAKg4J,EAAcC,EAAYC,EAAcC,EAAYhF,GAE9E,GAAIqE,IAAYS,EAAaC,GAAgB,EAEzCl2E,EAASk2E,EAAeV,CAGfp9L,MAAKypB,EAGdm+F,GAAS,IACThiF,EAAIkkF,YACJlkF,EAAIimF,IAAIuxE,EAAUrE,EAAS+E,EAAeV,EAAUp9L,KAAKypB,GAAI,GAC7Dmc,EAAIukF,YAOhB,IAAI6zE,GAAQ,SAAS92E,EAAKn5G,GAOlBxD,MAAM3G,QAAQsjH,GACdxzH,KAAKwzH,IAAMA,EACU,GAAdA,EAAIp3H,OACX4D,KAAKwzH,IAAMA,EAAIhyH,MAAM,SAASkI,IAAI,SAAAhL,GAAA,MAAKm6B,UAASn6B,EAAG,MAC9B,GAAd80H,EAAIp3H,OACX4D,KAAKwzH,IAAMA,EACNliE,UAAU,EAAG,GACb9vD,MAAM,SACNkI,IAAI,SAAAhL,GAAA,MAAKm6B,UAASn6B,EAAG,MAE1BsB,KAAKwzH,IAAMA,EAAIh/G,MAAM,IAAI9K,IAAI,SAAAhL,GAAA,MAAKm6B,UAASn6B,EAAIA,EAAG,MAEtDsB,KAAKuqM,MAAqB,gBAANlwL,GAAiBA,EAAI,EAE7CiwL,GAAM9tM,WACF0a,KAAM,WACF,MAAOlX,OASXwqM,MAAO,WACH,MAAIxqM,MAAKuqM,MAAQ,EACb,QAAevqM,KAAKwzH,IACf9pH,IAAI,SAAAhL,GAAA,MAAK4N,MAAK4xC,MAAMx/C,KACpBkK,OAAO5I,KAAKuqM,OACZnxL,KAAK,MAHV,IAKA,IAAWpZ,KAAKwzH,IACX9pH,IAAI,SAAAjO,GAGD,MAFAA,GAAI6Q,KAAK4xC,MAAMziD,GACfA,GAAKA,EAAI,IAAM,IAAMA,EAAI,EAAI,EAAIA,GAAG2Z,SAAS,IACzB,IAAb3Z,EAAEW,OAAF,IAAqBX,EAAMA,IAErC2d,KAAK,KAIlBqxL,MAAO,WACH,GAMI3+E,GACAnvH,EAPA6nE,EAAIxkE,KAAKwzH,IAAI,GAAK,IAClB/uD,EAAIzkE,KAAKwzH,IAAI,GAAK,IAClBl5G,EAAIta,KAAKwzH,IAAI,GAAK,IAClBn5G,EAAIra,KAAKuqM,MACTh+L,EAAMD,KAAKC,IAAIi4D,EAAGC,EAAGnqD,GACrByqB,EAAMz4B,KAAKy4B,IAAIy/B,EAAGC,EAAGnqD,GAGrB5e,GAAK6Q,EAAMw4B,GAAO,EAClBpmC,EAAI4N,EAAMw4B,CAEd,IAAIx4B,IAAQw4B,EACR+mF,EAAInvH,EAAI,MACL,CAGH,OAFAA,EAAIjB,EAAI,GAAMiD,GAAK,EAAI4N,EAAMw4B,GAAOpmC,GAAK4N,EAAMw4B,GAEvCx4B,GACJ,IAAKi4D,GACDsnD,GAAKrnD,EAAInqD,GAAK3b,GAAK8lE,EAAInqD,EAAI,EAAI,EAC/B,MACJ,KAAKmqD,GACDqnD,GAAKxxG,EAAIkqD,GAAK7lE,EAAI,CAClB,MACJ,KAAK2b,GACDwxG,GAAKtnD,EAAIC,GAAK9lE,EAAI,EAG1BmtH,GAAK,EAET,OAASA,EAAO,IAAJA,EAASnvH,EAAGA,EAAGjB,EAAGA,EAAG2e,EAAGA,IAGxCqwL,OAAQ,WAEJ,WADYp+L,KAAK4xC,MAAmB,IAAbl+C,KAAKuqM,QAAc3hM,OAAO5I,KAAKwzH,KAEjD9pH,IAAI,SAAAjO,GAGD,MAFAA,GAAI6Q,KAAK4xC,MAAMziD,GACfA,GAAKA,EAAI,IAAM,IAAMA,EAAI,EAAI,EAAIA,GAAG2Z,SAAS,IACzB,IAAb3Z,EAAEW,OAAF,IAAqBX,EAAMA,IAErC2d,KAAK,KAGduxL,IAAK,SAAS70E,EAAQ80E,GAClB,GAAI91E,GAAS90H,KAET1B,EAAIssM,EACJ7qM,EAAQ,EAAJzB,EAAQ,EACZ+b,EAAIy6G,EAAO21E,QAAQpwL,EAAIy7G,EAAO20E,QAAQpwL,EAEtCwwL,IAAO9qM,EAAIsa,IAAM,EAAIta,GAAKA,EAAIsa,IAAM,EAAIta,EAAIsa,IAAM,GAAK,EACvDywL,EAAK,EAAID,EAETr3E,GACAsB,EAAOtB,IAAI,GAAKq3E,EAAK/0E,EAAOtC,IAAI,GAAKs3E,EACrCh2E,EAAOtB,IAAI,GAAKq3E,EAAK/0E,EAAOtC,IAAI,GAAKs3E,EACrCh2E,EAAOtB,IAAI,GAAKq3E,EAAK/0E,EAAOtC,IAAI,GAAKs3E,GAGrCP,EAAQz1E,EAAOy1E,MAAQjsM,EAAIw3H,EAAOy0E,OAAS,EAAIjsM,EAEnD,OAAO,IAAIgsM,GAAM92E,EAAK+2E,IAM9B,IAAIQ,GAAa,SAASC,EAAaC,EAAWC,EAAaC,GAI3DnrM,KAAKgrM,YAAc,GAAIV,GAAMU,GAC7BhrM,KAAKirM,UAAY,GAAIX,GAAMW,GAC3BjrM,KAAKkrM,YAAcA,EACnBlrM,KAAKmrM,UAAYA,EACjBnrM,KAAKorM,YAAcD,EAAYD,EAGnCH,GAAWvuM,UAAU6uM,UAAY,SAASniM,GAMtC,MALAA,GAAQoD,KAAKC,IAAIrD,EAAOlJ,KAAKkrM,aAC7BhiM,EAAQoD,KAAKy4B,IAAI77B,EAAOlJ,KAAKmrM,WAC7BjiM,GAASA,EAAQlJ,KAAKkrM,aAAelrM,KAAKorM,YAGnCprM,KAAKgrM,YAAYL,IAAI3qM,KAAKirM,UAAW,EAAI/hM,GAAOshM,QAG3D,IAAIc,GAAY,SAASN,EAAaO,EAAcN,EAAWC,EAAaC,GAIxEnrM,KAAKwrM,cAAgB,GAAIT,GAAWQ,EAAcN,EAAW,EAAGE,GAChEnrM,KAAKyrM,cAAgB,GAAIV,GAAWQ,EAAcP,EAAa,GAAIE,GACnElrM,KAAKkrM,YAAcA,EACnBlrM,KAAKmrM,UAAYA,EAGrBG,GAAU9uM,UAAU6uM,UAAY,SAASniM,GAGrC,MAFAA,GAAQoD,KAAKC,IAAIrD,EAAOlJ,KAAKkrM,aAC7BhiM,EAAQoD,KAAKy4B,IAAI77B,EAAOlJ,KAAKmrM,WACzBjiM,GAAS,EACFlJ,KAAKwrM,cAAcH,UAAUniM,GAE7BlJ,KAAKyrM,cAAcJ,WAAWniM,GAI7C,IAAIizL,GAAyB,SAAS/5L,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,GACrE8lI,EAAQrmM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EACtD,IAAIzgE,GACA0a,CAEJ,QAA6B7Y,KAAzB0C,KAAKuiE,MAAMm1H,UAAyB,CACpC,GAAIA,GAAYpxJ,GAChB,KAAK7qC,EAAI,EAAG0a,EAAMnW,KAAKoC,KAAKhG,OAAQX,EAAI0a,EAAK1a,IACzCi8L,EAAYprL,KAAKy4B,IAAI2yJ,EAAW13L,KAAKoC,KAAK3G,GAAG,GAEjDuE,MAAKuiE,MAAMm1H,UAAYA,EAE3B,OAA6Bp6L,KAAzB0C,KAAKuiE,MAAMo1H,UAAyB,CACpC,GAAIA,IAAarxJ,GACjB,KAAK7qC,EAAI,EAAG0a,EAAMnW,KAAKoC,KAAKhG,OAAQX,EAAI0a,EAAK1a,IACzCk8L,EAAYrrL,KAAKC,IAAIorL,EAAW33L,KAAKoC,KAAK3G,GAAG,GAEjDuE,MAAKuiE,MAAMo1H,UAAYA,GAI/BwE,GAAuB3/L,UAAU2lM,eAC7BzK,cAAWp6L,GACXq6L,cAAWr6L,GACX4+D,KAAM,UACNwvI,UAAW,UACXC,UAAW,WAGfxP,EAAuB3/L,UAAU6iF,KAAO,SAASntC,EAAKhnC,EAAOiD,EAAQ6mL,GACjE,GAWIr2L,GACAitM,EACAC,EACAC,EACAC,EACA7iM,EAhBAwuL,EAAY13L,KAAKuiE,MAAMm1H,UACvBC,EAAY33L,KAAKuiE,MAAMo1H,UAGvBsK,EAAajiM,KAAKiiM,WAElB7/L,GADOpC,KAAKk8D,KACLl8D,KAAKoC,MACZ4pM,EAAW,EAAI1/L,KAAKk1L,KAAK,GAEzByK,EAAO,GAAIX,GAAUtrM,KAAKuiE,MAAMopI,UAAW,UAAW3rM,KAAKuiE,MAAMmpI,UAAWhU,EAAWC,GASvFz0L,EAAQ,SAAA5E,GAAA,OAAMA,EAAI2jM,GAAcjN,EAEpC9iJ,GAAIgD,OAGJhD,EAAIg6J,QAAQ,GAAK5/L,KAAKypB,GAAK,KAC3Bmc,EAAIhvC,MAAM8oM,EAAUA,EAGpB,KAAK,GAAIvwM,GAAI,EAAG0a,EAAM/T,EAAKhG,OAAQX,EAAI0a,EAAK1a,IACxCkD,EAAIyD,EAAK3G,GAETmwM,EAAK1oM,EAAMvE,EAAE,IACbktM,EAAK3oM,EAAMvE,EAAE,IACbmtM,EAAK5oM,EAAMvE,EAAE,IACbotM,EAAK7oM,EAAMvE,EAAE,IACbuK,EAAQvK,EAAE,GAEVuzC,EAAIikF,UAAY81E,EAAKZ,UAAUniM,GAC/BgpC,EAAIylF,SAASi0E,EAAIE,EAAID,EAAKD,EAAIG,EAAKD,EAGvC55J,GAAIwkF,UAMR,IAAIkyE,GAAmB,SAAS12J,EAAKi6J,EAAYC,EAAalwI,GAC1Dl8D,KAAKkyC,IAAMA,EACXlyC,KAAKmsM,WAAaA,EAClBnsM,KAAKosM,YAAcA,EACnBpsM,KAAKqsM,cAAyB,SAATnwI,GAA4B,SAATA,IAAoBkwI,GAAel6J,EAAI4oB,OAAOC,QAAQR,cAC9Fv6D,KAAKssM,yBAA2B,GAGpC5qM,GAAEyG,OAAOygM,EAAiBpsM,WAKtB+sM,cAAe,SAAS36H,EAAGgS,EAAGzqE,GAC1BnW,KAAKkyC,IAAIikF,UAAY,OACrB,IAAIo2E,IAAavsM,KAAKqsM,aAAersM,KAAKssM,yBAA2B,GAAKtsM,KAAKmsM,UAC/EvrH,IAAK,IAAO5gF,KAAKmsM,WAAaI,GAC9BvsM,KAAKkyC,IAAIylF,SAAS/oD,EAAGgS,EAAGzqE,EAAMnW,KAAKosM,YAAaG,KAOxD,IAAIlO,GAAiB,SAASj8L,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,EAAM+qI,GACnEjF,EAAQrmM,KAAKqE,KAAMoC,EAAM6/L,EAAYC,EAAU3/H,EAAOrG,GACtDl8D,KAAKinM,cAAgBA,EACrBjnM,KAAKwsM,eAAiB,EAG1B9qM,GAAEyG,OAAOk2L,EAAe7hM,UAAWwlM,EAAQxlM,WAIvCooM,eAAgB,WACZ,GAAI1oI,GAAOl8D,KAAKk8D,IAUhB,OARa,UAATA,EAhjCa,GAkjCG,WAATA,EA/iCO,EACF,IA0jCpBuhI,oBAAqB,SAAS1+H,GAG1B,GAAI5wD,GAASnO,KAAKuiE,MAAMkqI,cAMxB,OAHI1tI,GAAc,GAAK/+D,KAAKuiE,MAAMmqI,mBAC9Bv+L,GAAUnO,KAAKwsM,eAAiBztI,EAAc/+D,KAAK4kM,kBAEhDz2L,GAMXkxE,KAAM,SAASntC,EAAKhnC,EAAOiD,EAAQ6mL,GAC/B9iJ,EAAIgD,MAEJ,IA+BIy3J,GAEAjlL,EAEAklL,EACAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAmBAloM,EAxDJmoM,EAAiB,SAACR,EAAKC,GACnB,GAAIQ,GAAUT,EAAIxwM,OACdkxM,EAAUT,EAAIzwM,OACdyH,EAAQ,EACRsS,EAAM,EACNnY,EAAO,IAeX,OAdY,MAAR6uM,GACA7uM,EAAO,WACPmY,EAAMy2L,EAAIxwM,QACkB,IAArBwwM,EAAI3rM,QAAQ4rM,IAAcQ,EAAUC,GAC3CtvM,EAAO,WACPmY,EAAMk3L,EAAUC,EAChBzpM,EAAQypM,GACoB,IAArBT,EAAI5rM,QAAQ2rM,IAAcS,EAAUC,IAE3CtvM,EAAO,YACPmY,EAAMm3L,EAAUD,EAChBxpM,EAAQypM,GAGI,OAATtvM,GAAkBA,KAAMA,EAAM6F,MAAOA,EAAOsS,IAAKA,OAoB5Do3L,EAAUjhM,KAAKC,IAAI,EAAGD,KAAKs+B,MAAMoqJ,IAGjCj2H,EAAc/+D,KAAKoC,KAAKhG,OAAS4D,KAAKoC,KAAK,GAAG,GAAGoS,MAAM,KAAKpY,OAAS,EAEjE+vM,EAA2B,WAAdnsM,KAAKk8D,KAjoCJ,EACF,GAooChBsxI,EACIxY,EAAU,GAAMmX,EAA2B,WAAdnsM,KAAKk8D,KAloClB,EACF,EAmoCduxI,GAAe,EAEf9E,EAAc,GAAIC,GAAiB12J,EAAKi6J,EAAYnX,EAASh1L,KAAKk8D,KAKlD,KAAhB6C,IACAotI,EAAaqB,EACTxY,EAAU9iJ,EAAI4oB,OAAOC,QAAQR,cAAgBv6D,KAAKuiE,MAAMkqI,eAAiBN,EAC7ExD,EAAYwD,WAAaA,EAEzBsB,GAAe,GAIfztM,KAAKuiE,MAAMmqI,kBAAoBe,IAC/Bv7J,EAAIikF,UAAY,UAChBjkF,EAAIqoJ,YAAc,EAClBroJ,EAAIylF,SAAS,EAAG33H,KAAKuiE,MAAMkqI,eAAiBzsM,KAAKwsM,eAAgBthM,EAAOlL,KAAKwsM,iBAIjFt6J,EAAI4pJ,UAAY,QAChB,KAAK,GAAIrgM,GAAI,EAAGA,EAAIuE,KAAKoC,KAAKhG,OAAQX,IAuBlC,GArBAkxM,EAAa3sM,KAAKoC,KAAK3G,GACvBisB,EAAMilL,EAAW,GACjBC,EAAMD,EAAW,GACjBE,GAAOF,EAAW,GAAGn4L,MAAM,MAC3Bs4L,EAAaH,EAAW,GAAGn4L,MAAM,KACjCu4L,EAAgBJ,EAAW1gM,MAAM,GAGjC4gM,EAAMnrM,EAAEgI,IAAIhI,EAAE8nC,QAAQqjK,GAAM,SAAAxyL,GACxB,GAAIqzL,IACA1vM,KAAM,MACNkL,MAAOmR,EACPxW,MAAO,GAGP8pM,EAAaP,EAAeR,EAAKvyL,EAErC,OAAO3Y,GAAEyG,OAAOulM,EAAUC,OAI1BjmL,EAAM1nB,KAAKiiM,YAAcv6K,EAAM1nB,KAAKkiM,UAAxC,CAKA,GAAIuL,EAGA,IAFAv7J,EAAIikF,UAAY,UAChBjkF,EAAIqoJ,YAAc,EACbt1L,EAAI,EAAGA,EAAI4nM,EAAIzwM,OAAQ6I,IAMxB,IAJAgoM,EAAejtM,KAAKoiM,mBAAmB16K,EAAMmlL,EAAI5nM,GAAGpB,MAAOmxL,GAC3D9iJ,EAAIylF,SAASs1E,EAAc,EAAGM,EAASvtM,KAAKuiE,MAAMkqI,gBAClDS,EAAeltM,KAAKuiE,MAAMkqI,eAErBxnM,EAAI,EAAGA,EAAI4nM,EAAIzwM,OAAQ6I,IAAK,CAC7BitC,EAAIikF,UAA4B,aAAhB02E,EAAI5nM,GAAGjH,KAAsB,QAAUgC,KAAKinM,cAAc4F,EAAI5nM,GAAGiE,MACjF,IAAI0kM,GAAcb,EAAgBD,EAAW1wM,OACzCqsM,EAAcn8L,KAAKy+B,KAAK/qC,KAAKuiE,MAAMkqI,eAAiBmB,EACxD17J,GAAIylF,SAASs1E,EAAcC,EAAezE,EAAa8E,EAAS9E,GAChEyE,GAAgBzE,EAM5B,GAAKzoM,KAAKuiE,MAAMmqI,iBAMhB,IADAQ,EAAeO,EAAeztM,KAAKuiE,MAAMkqI,eAAiBzsM,KAAKwsM,eAAiB,EAC3EvnM,EAAI,EAAGA,EAAI6nM,EAAW1wM,OAAQ6I,IAAKioM,GAAgBf,EAsBpD,GArBAgB,EAAWL,EAAW7nM,GAAK6nM,EAAW7nM,GAAGuP,MAAM,UAAY,IAAK,KAGhEw4L,EAAU,KACNG,EAAS,KAAOA,EAAS,GACL,MAAhBA,EAAS,IAEc,MAAhBA,EAAS,KAEhBH,EAAUH,EAAIh0K,SAASs0K,EAAS,GAAI,IAAM,GAC1Cj7J,EAAIqoJ,YAAc,IAKtByS,EAA0B,MAAhBG,EAAS,GAAaA,EAAS,GAAKA,EAAS,GACvDH,EAAUH,EAAIh0K,SAASm0K,EAAS,IAAM,GACtC96J,EAAIqoJ,YAAc,IAIlByS,EAEA,GADAC,EAAejtM,KAAKoiM,mBAAmB16K,EAAMslL,EAAQnpM,MAAOmxL,GACvC,QAAjBgY,EAAQhvM,KAAgB,CACxB,GAAI6vM,GAAMb,EAAQ9jM,KAClBgpC,GAAIikF,UAAYn2H,KAAKinM,cAAc4G,GAC/BlF,EAAY0D,aACZn6J,EAAI8pJ,SAAS6R,EAAK7tM,KAAKuiM,aAAa76K,EAAKstK,GAAUkY,EAAef,GAElEj6J,EAAIylF,SAASs1E,EAAcC,EAAe,EAAGK,EAASC,OAElC,aAAjBR,EAAQhvM,MACf2qM,EAAYY,cAAc0D,EAAcC,EAAe,EAAGF,EAAQ72L,KAQlF+7B,EAAIwkF,a/Ewq9CZn7H,EAAQmkD,S+Enq9CJi1I,OAAQA,EACRiG,YAAaA,EACb6B,qBAAsBA,EACtBoC,YAAaA,EACbrC,wBAAyBA,EACzBL,uBAAwBA,EACxBkC,eAAgBA,I/Eyq9Cd,SAAU7iM,EAAQD,EAASH,GAEjC,cAC4B,SAAS2oC,GAErCxnC,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GgF95gDX,IAAAi4C,GAAA/lD,EAAA,GAAYsG,EhFq6gDZ,SAAiCvB,GAAO,GAAIA,GAAOA,EAAIf,WAAc,MAAOe,EAAc,IAAIogD,KAAa,IAAW,MAAPpgD,EAAe,IAAK,GAAIgC,KAAOhC,GAAW5D,OAAOC,UAAUC,eAAed,KAAKwE,EAAKgC,KAAMo+C,EAAOp+C,GAAOhC,EAAIgC,GAAgC,OAAtBo+C,GAAOb,QAAUv/C,EAAYogD,GAFlOY,GgFl6gD5Bh5C,EAASzG,EAAEyG,OAKX2lM,EAAS,SAASlkB,GAClB5pL,KAAK+6D,QAAU,KACf/6D,KAAKpB,KAAOgrL,EAAShrL,KAErBoB,KAAKsJ,MAAQsgL,EAAStgL,MACtBtJ,KAAK2yI,QAAUi3C,EAASj3C,QAExB3yI,KAAK+tM,cAAgBnkB,EAASmkB,cAGlC5lM,GAAO2lM,EAAOtxM,WAIVioL,QAAS,WACL,OACI7lL,KAAMoB,KAAKpB,KACX0K,MAAOtJ,KAAKsJ,MACZqpI,QAAS3yI,KAAK2yI,QACdo7D,cAAe/tM,KAAK+tM,iBAQhC,IAAIC,GAAqB,SAACjyJ,EAAO0uI,EAAWC,GAAnB,MACrB3mJ,GAAE,QACGnhB,KAAK,OAAQ,uBACbA,KAAK,QAASm5B,GACd9iB,SAAS,eACTA,SAASwxJ,GACT/2H,UACAtjC,MAAMs6J,IAKXmD,EAAe,SAASjE,GAIxBkkB,EAAOnyM,KAAKqE,KAAM4pL,GAElB5pL,KAAK0qC,IAAM,OAASk/I,GAAWA,EAASl/I,KAAOuvC,OAAO66G,UACtD90L,KAAK4gB,KAAO,QAAUgpK,GAAWA,EAAShpK,KAAOq5D,OAAO66G,UAExD90L,KAAK+kC,IAAM,OAAS6kJ,GAAWA,EAAS7kJ,IAAMk1C,OAAO66G,UACrD90L,KAAKuM,IAAM,OAASq9K,GAAWA,EAASr9K,KAAO0tE,OAAO66G,UAEtD90L,KAAK6yB,UAAY,KACjB7yB,KAAKsjL,OAAS,KACdtjL,KAAKiuM,aAAe,IAQpB,IA4EIjtM,GAAShB,IAEbgB,GAAOsrL,WAAavoJ,EAAE,UAAU9K,SAAS,wBAGzC,IAAIi1K,GAAenqK,EAAE,UAChB9K,SAAS,aACT5uB,SAASrJ,EAAOsrL,YAOjB6hB,GALYpqK,EAAE,WACb9K,SAAS,eACT7hB,KAAQpW,EAAOpC,KAFJ,MAGXyL,SAAS6jM,GAEInqK,EAAE,WAAW3sB,KAAQpX,KAAK0qC,IAA1B,IAAiC1qC,KAAK4gB,OAEpDwtL,EAAwBrqK,EAAE,WACzB9K,SAAS,gBACT5uB,SAAS6jM,GACTz8K,OAAO,KACPA,OAAO08K,GACP18K,OAAO,IAEZzwB,GAAOmtM,YAAcA,CAGrB,IAAIE,GAAatqK,EAAE,UACd9K,SAAS,UACT5uB,SAASrJ,EAAOsrL,WACrBtrL,GAAOstM,gBAAkBvqK,EAAE,UACtBnhB,KAAK,KAAS5hB,EAAOpC,KADD,mBAEpByL,SAASgkM,GACdrtM,EAAOstM,gBAAgBhrB,QACnBx4I,OAAO,EACP/F,IAAK/kC,KAAK+kC,IACVx4B,IAAKvM,KAAKuM,IACVopB,KAAM31B,KAAKuuM,gBAAgBvuM,KAAK+kC,IAAK/kC,KAAKuM,KAC1CgB,QAASvN,KAAK0qC,IAAK1qC,KAAK4gB,MACxB4tL,MAAO,SAAS3nM,EAAOkgH,GACnB/lH,EAAOwtM,MAAM3nM,EAAOkgH,IAExB3/D,OAAQ,SAASvgD,EAAOkgH,GACpB/lH,EAAOstM,gBAAgBhrB,OAAO,SAAU,SAAS3nL,KAAKqF,EAAOstM,gBAAiBznM,EAAOkgH,MAG7F/lH,EAAOsiL,OAAStiL,EAAOstM,gBACvBttM,EAAOitM,aAAeE,EA1HG,SAACt7K,EAAW49J,EAAMnN,GACvCzwJ,EAAUzC,MAAM,WACZ,GAAIshC,GAAY++H,EAAKr5K,OACjB7K,EAAMY,WAAWm2K,EAAOA,OAAO,SAAU,QAEzCz+C,EAAat4H,GAAO,EAAI,EAAIA,GAAO,IAAUA,EAAI6I,WAAWhZ,OAAS,EAErEqyM,GAAc,EACdC,EAAa3qK,EAAE/jC,MAAM6nB,QAAQ,cAGjC6mL,GAAWz1K,SAAS,SAGhBqqJ,EAAOA,OAAO,SAAU,YACxBz+C,EAAa,EAAIA,EAAa,EAC9B4pE,GAAc,GAElBhe,EAAKr5K,KAAK,IAEV2sB,EAAE,wBACGnhB,KAAK,OAAQiiH,GACbjiH,KAAK,YAAaiiH,GAClBjiH,KAAK,QAAS8uC,GACdrnD,SAASomL,GACT3rK,QACAtL,SACA4W,MAAM,SAAAvzB,GAEHA,EAAE6xB,oBAELyB,KAAK,WACF4T,EAAE/jC,MAAM+J,SACR0mL,EAAKr5K,KAAKs6C,GACVg9I,EAAWp1K,YAAY,WAE1B+1B,MAAM,SAASxyD,GACZ,GAAkB,KAAdA,EAAEqyB,QAEF6U,EAAE/jC,MAAMkwB,QAAQ,YACb,IAAkB,KAAdrzB,EAAEqyB,QAAgB,CAKzB,GAAIy/K,GAAarrB,EAAOA,OAAO,SAAU,OAErCsrB,EAAatrB,EAAOA,OAAO,SAAU,OAErCurB,EAAU,SAAAC,GAAA,MAASjgL,OAAMigL,IAAUA,EAAQF,GAAcE,EAAQH,GAEjEn9I,EAAYztB,EAAE/jC,MAAM4M,KACxB,IAAK6hM,GAUD,GAFAj9I,EAAYA,EAAUh9C,MAAM,KAC5Bg9C,GAAarkD,WAAWqkD,EAAU,IAAKrkD,WAAWqkD,EAAU,KACxDq9I,EAAQr9I,EAAU,KAAOq9I,EAAQr9I,EAAU,IAE3C,MADAzP,gDAA+C4sJ,EAA/C,IAA6DC,EAA7D,KACO7qK,EAAE/jC,UAVb,IADAwxD,EAAYrkD,WAAWqkD,GACnBq9I,EAAQr9I,GAER,MADAzP,gDAA+C4sJ,EAA/C,IAA6DC,EAA7D,KACO7qK,EAAE/jC,KAajBsjL,GAAOA,OAAOmrB,EAAc,SAAW,QAASj9I,GAChDk9I,EAAWp1K,YAAY,eAuDxB80K,EAAuBD,EAAantM,EAAOstM,gBAG9D,IAAIS,GAAuBhrK,EAAE,UACxB9K,SAAS,oBACT5uB,SAASrJ,EAAOsrL,WACrBtsL,MAAKgvM,kBAAoBhB,EAAmB,mCAAoC,oBAAqB,WAC7FhtM,EAAO+5D,QAAQijI,eAAiBh9L,GAEhCA,EAAO+5D,QAAQijI,aAAeh9L,EAE9BA,EAAO+5D,QAAQuxH,WACVruK,KAAK,sBACLqb,YAAY,UACZxpB,OACL9O,EAAOguM,kBAAkB/1K,SAAS,UAAU5rB,SAG5CrM,EAAO+5D,QAAQijI,aAAe,KAC9Bh9L,EAAOguM,kBAAkB11K,YAAY,WAEzCt4B,EAAO+5D,QAAQiqH,MAAMgG,cACjBvvD,OAAO,EACPo9D,aAAa,MAGhBxuL,SAAS0kM,GACTj/L,OACL9P,KAAKivM,YAAcjB,EAAmB,6BAA8B,mBAAoB,WAChFhtM,EAAO+5D,QAAQmjI,gBAAkBl9L,GAEjCA,EAAO+5D,QAAQmjI,cAAgBl9L,EAE/BA,EAAO+5D,QAAQuxH,WACVruK,KAAK,qBACLqb,YAAY,UACZxpB,OACL9O,EAAOiuM,YAAYh2K,SAAS,UAAU5rB,SAGtCrM,EAAO+5D,QAAQmjI,cAAgB,KAC/Bl9L,EAAOiuM,YAAY31K,YAAY,WAEnCt4B,EAAO+5D,QAAQiqH,MAAMgG,cACjBvvD,OAAO,EACPo9D,aAAa,MAGhBxuL,SAAS0kM,GACTj/L,OACL9O,EAAOsrL,WAAW/xJ,MACd,WACIv5B,EAAOguM,kBAAkB3hM,OACzBrM,EAAOiuM,YAAY5hM,QAEvB,WACQrM,EAAO+5D,QAAQijI,eAAiBh9L,GAChCA,EAAOguM,kBAAkBl/L,OAEzB9O,EAAO+5D,QAAQmjI,gBAAkBl9L,GACjCA,EAAOiuM,YAAYn/L,SAM/Bi0B,EAAE,+BAA+B15B,SAASrJ,EAAOsrL,YAErDnkL,GAAO0lL,EAAarxL,WAIhBioL,QAAS,WACL,GAAImF,GAAWkkB,EAAOtxM,UAAUioL,QAAQ9oL,KAAKqE,KAC7C,OAAOmI,GAAOyhL,GACV5rL,KAAM,SACN+mC,IAAK/kC,KAAK+kC,IACVx4B,IAAKvM,KAAKuM,IACVm+B,IAAK1qC,KAAK0qC,IACV9pB,KAAM5gB,KAAK4gB,QAMnBtK,KAAM,WACF,MAAO,IAAIu3K,IACPjvL,KAAMoB,KAAKpB,KACX0K,MAAOtJ,KAAKsJ,MACZqpI,QAAS3yI,KAAK2yI,QACdo7D,cAAe/tM,KAAK+tM,iBAO5BQ,gBAAiB,SAASxpK,EAAKx4B,GAE3B,MADYA,GAAMw4B,GACF,EAAI,IAAO,GAK/BypK,MAAO,SAAS3nM,EAAOkgH,GACnB,GAAIx5G,GAASw5G,EAAGx5G,MAGhBvN,MAAKmuM,YAAY/2L,KAAQ7J,EAAO,GAAhC,IAAsCA,EAAO,IAG7CvN,KAAK0qC,IAAMn9B,EAAO,GAClBvN,KAAK4gB,KAAOrT,EAAO,EAGnB,IAAIhE,GAAOvJ,IACXzB,YAAW,WACHgP,EAAO,KAAOhE,EAAKmhC,KAAOn9B,EAAO,KAAOhE,EAAKqX,MAC7CrX,EAAKwxD,QAAQiqH,MAAMgG,cACfvvD,OAAO,EACPo9D,aAAa,KAGtB,KAKPoE,WAAY,SAASnlJ,GACjB,MAAIA,GAAQ17C,OAAS4D,KAAKsJ,OAQ9B4lM,UAAW,SAAStiM,GAChB,MAAOiiB,OAAMjiB,IAASA,GAAO5M,KAAK0qC,KAAO99B,GAAO5M,KAAK4gB,MAMzDkvH,KAAM,SAASh4F,GACX,IAAK93C,KAAKi9L,WAAWnlJ,GAEjB,OAAO,CAIX,IAGIq3J,GAAYr3J,EAAQ93C,KAAKsJ,MAC7B,IAAI6lM,YAAqBt4L,OAAO,CAE5B,IAAK,GADDu4L,IAAY,EACP3zM,EAAI,EAAGA,EAAI0zM,EAAU/yM,OAAQX,IAClC,IAAKuE,KAAKkvM,UAAUC,EAAU1zM,IAAK,CAE/B2zM,GAAY,CACZ,OAGR,MAAOA,GAEP,MAAOpvM,MAAKkvM,UAAUp3J,EAAQ93C,KAAKsJ,SAM3Cw0L,aAAc,SAAShmJ,GACnB,GAAIqqH,IAAU,CACd,KAAKniK,KAAKi9L,WAAWnlJ,GACjB,MAAOqqH,EAQX,IAAI50J,GAASuqC,EAAQ93C,KAAKsJ,MACpBiE,aAAkBsJ,SACpBtJ,GAAUA,GAId,KAAK,GAAI9R,GAAI,EAAGA,EAAI8R,EAAOnR,OAAQX,IAAK,CACpC,GAAIyN,GAAQqE,EAAO9R,EACfyN,GAAQlJ,KAAK+kC,MACb/kC,KAAK+kC,IAAMz4B,KAAKs+B,MAAM1hC,GACtBi5J,GAAU,GAEVj5J,EAAQlJ,KAAKuM,MACbvM,KAAKuM,IAAMD,KAAKy+B,KAAK7hC,GACrBi5J,GAAU,GAGlB,MAAOA,IAKX46B,cAAe,WAIP/8L,KAAK+kC,IAAM/kC,KAAKuM,IAChBvM,KAAKssL,WAAWj/K,OAEhBrN,KAAKssL,WAAWx8K,MAGpB,IAAI6+L,GAAa3uM,KAAKsjL,OAAOA,OAAO,SAAU,OAC1CsrB,EAAa5uM,KAAKsjL,OAAOA,OAAO,SAAU,QAC1CtjL,KAAK+kC,IAAM4pK,GAAc3uM,KAAKuM,IAAMqiM,KAEpC5uM,KAAKsjL,OAAOA,OAAO,SAAU,MAAOtjL,KAAK+kC,KACzC/kC,KAAKsjL,OAAOA,OAAO,SAAU,MAAOtjL,KAAKuM,KACzCvM,KAAKsjL,OAAOA,OAAO,SAAU,OAAQtjL,KAAKuuM,gBAAgBvuM,KAAK+kC,IAAK/kC,KAAKuM,MAIzEvM,KAAKsjL,OAAOA,OAAO,SAAU,UAAWtjL,KAAK+kC,IAAK/kC,KAAKuM,SAWnE,IAAI8/K,GAAiB,SAASrH,EAAO4E,GAkCjC,GAjCA5pL,KAAKglL,MAAQA,EACbhlL,KAAKg+L,aAAe,KACpBh+L,KAAKk+L,cAAgB,KACrBl+L,KAAKkmB,WASLlmB,KAAKssL,WAAavoJ,EAAE,UACf9K,SAAS,WACTnpB,OAEL9P,KAAKssL,WACA/oJ,KAAK,OAAQ,SAAA1mC,GACVA,EAAE6xB,oBAEL0B,MAAM,SAAAvzB,GACHA,EAAE6xB,oBAEL6U,KAAK,WAAY,SAAA1mC,GACdA,EAAE6xB,oBAEL6U,KAAK,UAAW,SAAA1mC,GACbA,EAAE6xB,oBAMNk7J,GAAY,WAAaA,GAAU,CAQnC,IAAK,GADD5oL,GALAquM,GAAoB,gBAAkBzlB,GAAWA,EAASoU,aAAe,MAEzEsR,GAAqB,iBAAmB1lB,GAAWA,EAASsU,cAAgB,MAE5EqR,EAAe3lB,EAAS1jK,QAEnBzqB,EAAI,EAAGA,EAAI8zM,EAAanzM,OAAQX,IACR,WAAzB8zM,EAAa9zM,GAAGuC,MAChBgD,EAAS,GAAI6sL,GAAa0hB,EAAa9zM,IACvCuE,KAAK+wD,WAAW/vD,GACZA,EAAOpC,OAASywM,IAChBrvM,KAAKg+L,aAAeh9L,EACpBA,EAAOguM,kBAAkB/1K,SAAS,UAAU5rB,QAE5CrM,EAAOpC,OAAS0wM,IAChBtvM,KAAKk+L,cAAgBl9L,EACrBA,EAAOiuM,YAAYh2K,SAAS,UAAU5rB,SAG1C5N,QAAQq4D,IAAI,8BAA+Bl5D,KAAMZ,KAIrD,YAAa4rL,IAAYA,EAAStqJ,SAClCt/B,KAAKssL,WAAWj/K,OAKxB,GAA4B,IAAxBrN,KAAKkmB,QAAQ9pB,OAAc,CAC3B,GAAIozM,GAAkBzrK,EAAE,UACnB9K,SAAS,aACT5uB,SAASrK,KAAKssL,YAIfmjB,EAAiBzvM,IAHO+jC,GAAE,0BACzBnhB,KAAK,QAAS,2BACdvY,SAASmlM,GAEQp/K,MAAM,WACxBq/K,EAAe5b,oBAK3B1rL,GAAOkkL,EAAe7vL,WAElB6Q,KAAM,WACFrN,KAAKssL,WAAWj/K,QAEpByC,KAAM,WACF9P,KAAKssL,WAAWx8K,QAEpBlB,OAAQ,WACJ5O,KAAKssL,WAAW19K,UAEpB0wB,QAAS,WACL,MAAOt/B,MAAKssL,WAAWxlK,GAAG,aAK9B29J,QAAS,WAML,IAAK,GAHDzjL,GAFA4oL,KACA8lB,KAIKj0M,EAAI,EAAGA,EAAIuE,KAAKkmB,QAAQ9pB,OAAQX,IACrCuF,EAAShB,KAAKkmB,QAAQzqB,GACtBi0M,EAAapzM,KAAK0E,EAAOyjL,UAW7B,OATAmF,GAAS1jK,QAAUwpL,EAGnB9lB,EAASoU,aAAeh+L,KAAKg+L,aAAeh+L,KAAKg+L,aAAap/L,KAAO,KACrEgrL,EAASsU,cAAgBl+L,KAAKk+L,cAAgBl+L,KAAKk+L,cAAct/L,KAAO,KAGxEgrL,EAAStqJ,QAAUt/B,KAAKssL,WAAWxlK,GAAG,YAE/B8iK,GAKXtzK,KAAM,SAAS69K,GAEX,IAAK,GADD79K,GAAO,GAAI+1K,GAAe8H,GACrB14L,EAAI,EAAGA,EAAIuE,KAAKkmB,QAAQ9pB,OAAQX,IACrC6a,EAAKy6C,WAAW/wD,KAAKkmB,QAAQzqB,GAAG6a,OAEpC,OAAOA,IAKXy6C,WAAY,SAAS/vD,GACjBA,EAAO+5D,QAAU/6D,KACjBA,KAAKssL,WAAW76J,OAAOzwB,EAAOsrL,YAC9BtsL,KAAKkmB,QAAQ5pB,KAAK0E,IAKtB0sL,WAAY,WACR1tL,KAAKkmB,WACLlmB,KAAKssL,WAAWhlK,WAAWvd,UAM/B+jL,aAAc,WACV,IAAK,GAAIryL,GAAI,EAAGA,EAAIuE,KAAKkmB,QAAQ9pB,OAAQX,IAAK,CAC7BuE,KAAKkmB,QAAQzqB,GACnBshM,kBAMfpQ,cAAe,WACX,IAAK,GAAIlxL,GAAI,EAAGA,EAAIuE,KAAKkmB,QAAQ9pB,OAAQX,IAAK,CAC1C,GAAIuF,GAAShB,KAAKkmB,QAAQzqB,EAC1BuF,GAAOsiL,OAAOA,OAAO,SAAU,UAAWtiL,EAAO+jC,IAAK/jC,EAAOuL,MAEjEvM,KAAKg+L,aAAe,KACpBh+L,KAAKk+L,cAAgB,KAGrBl+L,KAAKssL,WAAWruK,KAAK,gBAAgBnO,QAEzC+jL,eAAgB,WAkBZ,IAAK,GAFD7yL,GACA2uM,EAfAC,GAA0B,SAACtzJ,EAAMn6C,EAAK0tM,GAKtC,MAHM1tM,KAAOm6C,KACTA,EAAKn6C,GAAO0tM,GAETvzJ,EAAKn6C,KAOZ2tM,KAIKr0M,EAAI,EAAGA,EAAIuE,KAAKkmB,QAAQ9pB,OAAQX,IACrCuF,EAAShB,KAAKkmB,QAAQzqB,GAClBuF,EAAO2xI,UAEH3xI,EAAO+jC,MAAQ/jC,EAAO0pC,MACtBilK,EAAyBC,EAAwBE,EAAgB9uM,EAAO2xI,YACxEg9D,EAAuBA,EAAuBvzM,QAAa4E,EAAO+sM,cAAlE,OAAsF/sM,EAAO0pC,KAE7F1pC,EAAOuL,MAAQvL,EAAO4f,OACtB+uL,EAAyBC,EAAwBE,EAAgB9uM,EAAO2xI,YACxEg9D,EAAuBA,EAAuBvzM,QAAa4E,EAAO+sM,cAAlE,OAAsF/sM,EAAO4f,MAUzG,IAAImvL,KACJ,KAAK,GAAIp9D,KAAWm9D,GAChBC,EAAoBA,EAAoB3zM,SAAWu2I,EAASm9D,EAAen9D,KAK/E,QAAUq9D,GAAWC,EAAkB/pL,GACnC,GACAgqL,GAAehqL,EAAQ,GAEnBysH,EAAUu9D,EAAa,GACvBC,EAAeD,EAAa,GAC5BE,MAAsBD,EAAa/2L,KAAK,WAAxC,IAEA26K,GACAsc,KAAMD,EACNxuL,MAAOquL,EACP39D,kBAAmB29D,EACnBt9D,QAASA,EAIbzsH,GAAUA,EAAQja,MAAM,GAExB83B,EAAE/E,QAAQsxK,aAAcvc,EAAY,SAAA//K,GAC5BA,EAAStU,MAETk+C,OAAOga,MAAMvqD,MACT0uC,MAAO,iBACPzxC,2BAA4BqoI,EAC5B9oF,SAAW4gF,MAAO7sF,OAAOga,MAAM9nD,UAET,IAAnBoW,EAAQ9pB,OAEfwhD,OAAOga,MAAMvqD,MACT0uC,MAAO,oBACPzxC,KAAM,mFACNu/C,SAAW4gF,MAAO7sF,OAAOga,MAAM9nD,UAInCkgM,EAAWh8L,EAASyjD,WAAYvxC,MAGzClmB,KAAKglL,MAAMvtH,WAAYs4I,MhFu3gDlCx0M,EAAQmkD,SgFl3gDJ2sI,eAAgBA,EAChBwB,aAAcA,KhFq3gDWlyL,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,EAAGriC,EAAGtB,GA8BrD,QAASigD,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GA5BvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GiFviiDX,IAAAo8C,GAAAlqD,EAAA,GjF4iiDIiyD,EAAUhN,EAAuBiF,GiF3iiDrCqF,EAAAvvD,EAAA,GACAqvD,GjF8iiDepK,EAAuBsK,GiF9iiDtCvvD,EAAA,KjFkjiDIsvD,EAAcrK,EAAuBoK,GiFjjiDzC8lJ,EAAAn1M,EAAA,KjFqjiDIo1M,EAAenwJ,EAAuBkwJ,GiFpjiD1CE,EAAAr1M,EAAA,KjFwjiDIs1M,EAAcrwJ,EAAuBowJ,GiFvjiDzCE,EAAAv1M,EAAA,KjF2jiDIw1M,EAAmBvwJ,EAAuBswJ,GiF1jiD1Cr5J,EAAOvG,EAASuG,KAAKnvC,QACrB2rC,WAAY,SAAS8nG,EAAKt6I,GACtBtB,KAAK47I,IAAMA,EACX57I,KAAKgtD,OAAS1rD,EAAQ0rD,OACtBhtD,KAAK6wM,WAAa,GAAAD,GAAAlxJ,QAClB1/C,KAAK63C,WAAW9T,EAAE,WAClB/jC,KAAKwwC,UAITA,OAAQ,WACJ,GAAIjnC,GAAOvJ,IACXA,MAAK23C,IAAItoC,QACT3N,EAAEH,KAAKvB,KAAKgtD,OAAQ,SAAAprC,GAChBrY,EAAKrC,IAAI0a,MAKjB1a,IAAK,SAAS0a,GACV,GAAIq2H,GAAY73I,EAAO+H,QAAO,KAAUyZ,EAGxC,QAFAq2H,EAAUt/H,GAAKiJ,EAAMjJ,GAAK00C,EAAA3N,QAAMz9C,MAChCjC,KAAK47I,IAAInwF,WAAWwsF,EAAUt/H,IAAMs/H,EAC5BA,EAAUj6I,MACd,IAAK,cACDgC,KAAK8wM,gBAAgB74D,EACrB,MACJ,KAAK,SACDj4I,KAAK+wM,WAAW94D,EAChB,MACJ,KAAK,UACDj4I,KAAKgxM,YAAY/4D,EACjB,MACJ,SACIj4I,KAAKixM,QAAQh5D,KAKzB64D,gBAAiB,SAAS74D,GACtB,GAAI1uI,GAAOvJ,IACXi4I,GAAUoE,WAAW1jI,GAAKs/H,EAAUt/H,GACpC3Y,KAAK47I,IAAIlqG,MAAMxyC,IAAI,0BAA4B+4I,EAAUoE,WAAWl3H,UAAW,EAC/E,IAAIumC,GAAQ1rD,KAAKixM,QAAQh5D,EAAUoE,WAGnC3wF,GAAMha,OACFga,EAAMha,MAAM9uC,IAAI,WAAY,SAAAsG,GACxB,GAAIozI,GAAe/yI,EAAKqyI,IAAIx5I,KAAKm6I,UAAUtE,EAAW/uI,EACtD,KAAK,GAAIzN,KAAKw8I,GAAU+E,MAAO,CAC3B,GAAIk0D,GAAWj5D,EAAU+E,MAAMvhJ,GAC3B01M,EAAc5nM,EAAKw6B,EAAL,IAAWk0G,EAAUt/H,GAArB,YAAmCld,GACjD21M,GAAY,CAChB,KAAK,GAAInsM,KAAKisM,GAASlkJ,OACnB,IAAKkkJ,EAASlkJ,OAAO/nD,GAAGqI,OAAQ,CAC5B8jM,GAAY,CACZ,OAGJ31M,GAAK6gJ,GAAgB80D,EACrBD,EAAY/5K,OAAO,QAEnB+5K,EAAYrhM,OAGpBvG,EAAKqyI,IAAI1rH,QAAQ,WAIzB,KAAK,GAAIz0B,KAAKw8I,GAAU+E,MAAO,CAC3B,GAAIq0D,GAAc,GAAI/5J,GAAKt3C,KAAK47I,KAC5B5uF,OAAQirF,EAAU+E,MAAMvhJ,GAAGuxD,QAE/BhtD,MAAKsxM,QAAQD,EAAY15J,IAAI1e,SAAS,mBAAuBg/G,EAAUt/H,GAAvE,YAAqFld,GAIzFiwD,EAAMx7B,QAAQ,WAIlB6gL,WAAY,SAAS94D,GAgBjB,QAASpyG,GAAOmnB,GACZ,GAAIukJ,GAAoBt5D,EAAUt/H,GAA9B,YAA4C64L,IAC5CH,EAAc,GAAI/5J,GAAK/tC,EAAKqyI,KAAO5uF,OAAQA,GAC/CykJ,GAAOvqM,KACHyR,GAAI44L,EACJ55J,IAAK05J,EAAY15J,IACjB+5J,MAAO,WACHD,EAAOhhI,IAAI8gI,GACXhoM,EAAKqyI,IAAI1rH,QAAQ,aAS7B,IAAK,GAhCD3mB,GAAOvJ,KACPwxM,EAAc,EAGdC,EAAS,GAAIjB,GAAA9wJ,QAAOpI,MACpByE,MAAOk8F,EAAUl8F,OAAS,SAC1BhX,IAAKkzG,EAAUlzG,IACfx4B,IAAK0rI,EAAU1rI,IACfolM,MAAO,WACH9rK,EAAOoyG,EAAUjrF,QACjBzjD,EAAKqyI,IAAI1rH,QAAQ,aAqBrB0hL,EAAUlwM,EAAEiiC,KAAKs0G,EAAUv+H,OACtBje,EAAI,EAAGA,EAAI6Q,KAAKC,IAAID,KAAKC,IAAIqlM,EAAS35D,EAAUlzG,KAAO,GAAIkzG,EAAUv4F,SAAW,GAAIjkD,IACzFoqC,EAAOpqC,EAAIm2M,EAAU35D,EAAUv+H,MAAMje,GAAKw8I,EAAUjrF,OAIxDhtD,MAAK47I,IAAIlqG,MAAMxyC,IAAI,oBAAsBuyM,EAAOI,aAGhD,IAAI3lJ,GAAgB,GAAAwkJ,GAAAhxJ,QAAiB1/C,KAAK47I,KACtC/vF,MAAOosF,EAAUl8F,OAASk8F,EAAUr5I,KACpC+uE,KAAMsqE,EAAUtqE,KAChBjiB,MAAO+lJ,GAEXzxM,MAAKsxM,QAAQplJ,EAAcvU,IAAKsgG,EAAUt/H,KAI9Cq4L,YAAa,SAAS/4D,GAClB,GAAI7rF,GAAU,GAAI1B,GAAAhL,QAAQpI,MACtByE,MAAOk8F,EAAUl8F,OAASk8F,EAAUr5I,KACpC2nD,IAAK,qBACL2G,aAAa,EACbmY,oBAAoB,EACpBlY,WAAY8qF,EAAU1iH,UAE1B62B,GAAQ36B,OAAO,GAAI6lB,GAAKt3C,KAAK47I,KAAO5uF,OAAQirF,EAAUjrF,SAAUrV,KAChEyU,EAAQ36B,OACJsS,EAAE,UACG9K,SAAS,gBACTxvB,KAAKwuI,EAAUtqE,OAExB3tE,KAAK47I,IAAIr1I,GAAG,SAAU,SAAAilD,GAClBY,EAAQroB,EAAR,IAAcynB,GAAYpvD,OAAS,GAAKgwD,EAAQh8C,WAEpDpQ,KAAKsxM,QAAQllJ,EAAQzU,IAAKsgG,EAAUt/H,KAIxCs4L,QAAS,SAASh5D,GACd,GAAI1uI,GAAOvJ,KACP2Y,EAAKs/H,EAAUt/H,EACnBs/H,GAAU5sF,SACN4sF,EAAU5sF,UACT,WACG9hD,EAAKqyI,IAAI1rH,QAAQ,SAAUvX,GAEnC,IAAI+yC,GAAQ1rD,KAAK6wM,WAAWhrK,OAAOoyG,EACnCj4I,MAAK47I,IAAIjwF,WAAWhzC,GAAM+yC,CAC1B,IAAIQ,GAAgB,GAAAwkJ,GAAAhxJ,QAAiB1/C,KAAK47I,KACtCh9I,KAAMq5I,EAAUr5I,KAChBitD,MAAOosF,EAAU65D,WAAa,GAAK75D,EAAUpsF,OAASosF,EAAUr5I,KAChEsK,MAAO+uI,EAAU/uI,MACjB6oM,WAAY95D,EAAU85D,WACtBt1D,kBAAmBxE,EAAUwE,kBAC7Bu1D,oBAAqB/5D,EAAU+5D,oBAC/BrkI,KAAMsqE,EAAUtqE,KAChB/yD,SAAUq9H,EAAUr9H,SACpBuK,SAAU8yH,EAAU9yH,SACpB6hC,MAAOixF,EAAUjxF,MACjBpjD,MAAOq0I,EAAUr0I,MACjBolD,SAAUivF,EAAUjvF,SACpB17C,OAAQ2qI,EAAU3qI,OAClB2kM,MAAOh6D,EAAUg6D,MACjBvmJ,MAAOA,GAIX,OAFA1rD,MAAK47I,IAAIzvF,aAAaxzC,GAAMuzC,EAC5BlsD,KAAKsxM,QAAQplJ,EAAcvU,IAAKsgG,EAAUt/H,IACnC+yC,GAIX4lJ,QAAS,SAAS35J,EAAKh/B,GACnB3Y,KAAK23C,IAAIlmB,OAAOkmB,EAAI1e,SAAS,eAAerW,KAAK,KAAMjK,MjF8jiD/Dpd,GAAQmkD,SiFzjiDJpI,KAAMA,KjF4jiDmB37C,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIjI,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,EAAGriC,GAkBlD,QAAS2+C,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAhBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GkF7wiDX,IAAAo8C,GAAAlqD,EAAA,GlFkxiDIiyD,EAAUhN,EAAuBiF,GkFjxiDrCmF,EAAArvD,EAAA,IlFqxiDIsvD,EAAcrK,EAAuBoK,GkFpxiDzCE,EAAAvvD,EAAA,GlFwxiDIwvD,EAAWvK,EAAuBsK,GkFvxiDlCrT,EAAOvG,EAASuG,KAAKnvC,QACrB2rC,WAAY,SAASxyC,GACjBtB,KAAKgf,QACLhf,KAAKsB,QAAU+rD,EAAA3N,QAAMr7C,MAAM/C,GACvBy6C,MAAO,SACPuyF,WAAY,iBACZ/hI,IAAK,KACLw4B,IAAK,OAET/kC,KAAKkyM,WAAa,GAAItnJ,GAAAlL,QAAG2I,YACrB6C,KAAM,UACNnP,gBAAiB/7C,KAAKsB,QAAQy6C,MAC9B2X,mBAAoB1zD,KAAKsB,QAAQy6C,MAAjC,SACAwK,IAAK,gDACLqK,QAAS,WACLtvD,EAAQqwM,OAASrwM,EAAQqwM,WAGjC3xM,KAAK63C,WACD9T,EAAE,UACGtS,OAAQzxB,KAAKmyM,MAAQpuK,EAAE,WACvBtS,OAAOsS,EAAE,UAAUtS,OAAOzxB,KAAKkyM,WAAWv6J,QAKvDhU,KAAM,WACF,MAAOjiC,GAAEiiC,KAAK3jC,KAAKgf,OAIvB9X,IAAK,SAAS5F,GACV,IAAKA,EAAQqX,IAAM3Y,KAAKgf,KAAK1d,EAAQqX,IAEjC,WADAilC,QAAOkO,KAAKzO,MAAM,qBAAsB,wCAG5C,IAAI+0J,GAAgB,GAAIxnJ,GAAAlL,QAAG2I,YACvB6C,KAAM,aACNwI,QAAS,2BACTnN,IAAK,0CACLqK,QAAS,WACLtvD,EAAQowM,OAASpwM,EAAQowM,WAG7BtlJ,EAAU,GAAI1B,GAAAhL,QAAQpI,MACtB3+B,GAAIrX,EAAQqX,GACZojC,MAAO,cACPwK,IAAKjlD,EAAQilD,KAAO,oBACpB0G,YAAcmlJ,cAAeA,IAEjChmJ,GAAQ36B,OAAOnwB,EAAQq2C,KACvByU,EAAQzU,IAAI1e,SAAS,eAAenpB,OACpC9P,KAAKgf,KAAK1d,EAAQqX,IAAMyzC,EACxBpsD,KAAKmyM,MAAM1gL,OAAO26B,EAAQzU,IAAIvgB,OAAO,SACrCp3B,KAAKsB,QAAQiL,IAAM,GAAKvM,KAAK2jC,QAAU3jC,KAAKsB,QAAQiL,KAAOvM,KAAKkyM,WAAWvpL,UAC3E3oB,KAAKq7I,YAIT5qE,IAAK,SAAS93D,GACV,IAAK3Y,KAAKgf,KAAKrG,GAEX,WADAilC,QAAOkO,KAAKzO,MAAM,qBAAsB,2BAG5Cr9C,MAAKmyM,MAAMl0L,KAAX,IAAoBtF,GAAM5O,eACnB/J,MAAKgf,KAAKrG,GACjB3Y,KAAKkyM,WAAWnsI,SAChB/lE,KAAKq7I,YAIT3qE,OAAQ,WACJ,IAAK,GAAI/3D,KAAM3Y,MAAKgf,KAChBhf,KAAKywE,IAAI93D,IAKjBk5L,YAAa,WACT7xM,KAAKkyM,WAAWv6J,IAAI7nC,OACpBpO,EAAEH,KAAKvB,KAAKgf,KAAM,SAAAotC,GACdA,EAAQuZ,cAAc,mBAE1BjkE,EAAEqsC,QAAQ/tC,KAAKgf,OACXhf,KAAK23C,IAAIlmB,OACLsS,EAAE,UACG9K,SAAS,gBACTxvB,KAAKzJ,KAAKsB,QAAQgtI,cAKnC+M,SAAU,WACN,GAAI/xI,GAAQ,CACZ,KAAK,GAAIqP,KAAM3Y,MAAKgf,KAAM,CACtB,GAAIotC,GAAUpsD,KAAKgf,KAAKrG,EACxByzC,GAAQrQ,QAAWzyC,EAAnB,KAA6BtJ,KAAKsB,QAAQy6C,OAC1CqQ,EAAQpsD,KAAK2jC,OAAS3jC,KAAKsB,QAAQyjC,IAAM,gBAAkB,iBAAiB,oBlFsxiDxFxpC,GAAQmkD,SkFhxiDJpI,KAAMA,KlFmxiDmB37C,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,EAAGriC,GAElDnF,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,IAMX3N,EAAQmkD,QmF14iDO3O,EAASuG,KAAKnvC,QACzB2rC,WAAY,SAAS8nG,EAAKt6I,GACtBtB,KAAK47I,IAAMA,EACX57I,KAAKqyM,YAAcz2D,EAAIlqG,MAAQkqG,EAAIlqG,MAAMtyB,cACzCpf,KAAK0rD,MAASpqD,GAAWA,EAAQoqD,OAAU,GAAI3a,GAASuG,KACxDt3C,KAAK0xC,MACApwC,GAAWA,EAAQowC,OACpB,GAAIX,GAAS2C,OACT4+J,YAAatyM,KAAKqyM,YAAYC,aAAe,SAC7CC,aAAcvyM,KAAKqyM,YAAYE,cAAgB,UAC/CC,WAAYxyM,KAAKqyM,YAAYG,YAAc,4BAC3CC,YAAazyM,KAAKqyM,YAAYI,aAAe,0BAC7CtnJ,eAAgBnrD,KAAKqyM,YAAYlnJ,iBAClCvoD,IAAItB,GAGXtB,KAAK63C,WAAW73C,KAAKupD,aACrBvpD,KAAK0yM,OAAS1yM,KAAK+jC,EAAE,kBACrB/jC,KAAKwnD,MAAQxnD,KAAK+jC,EAAE,iBACpB/jC,KAAK2yM,SAAW3yM,KAAK+jC,EAAE,oBACvB/jC,KAAK4yM,aAAe5yM,KAAK+jC,EAAE,wBAC3B/jC,KAAK6yM,kBAAoB7yM,KAAK+jC,EAAE,6BAChC/jC,KAAK8yM,kBAAoB9yM,KAAK+jC,EAAE,6BAChC/jC,KAAKsxE,OAAStxE,KAAK+jC,EAAE,kBACrB/jC,KAAKslE,YAActlE,KAAK+jC,EAAE,uBAC1B/jC,KAAK+yM,YAAc/yM,KAAK+jC,EAAE,uBAC1B/jC,KAAKgzM,OAAShzM,KAAK+jC,EAAE,kBACrB/jC,KAAKqpD,UAAYrpD,KAAK+jC,EAAE,qBAGxB/jC,KAAK0yM,OAAOhhL,QAAQ1xB,KAAK0rD,MAAM/T,IAG/B,IAAI8kG,GAAoBz8I,KAAK0xC,MAAMxyC,IAAI,oBACvCc,MAAK0rD,MAAMyB,cACe7vD,KAAtBm/I,GACA3hH,KAAKyd,UAAUv4C,KAAK0xC,MAAMxyC,IAAI,WAAa47B,KAAKyd,UAAUkkG,GAC9Dz8I,KAAKoyC,SAASpyC,KAAK0xC,MAAO,SAAU1xC,KAAKwwC,OAAQxwC,MACjDA,KAAKwwC,QAGL,IAAIjnC,GAAOvJ,IACXA,MAAK4yM,aAAarsM,GAAG,QAAS,WAC1BgD,EAAKmiD,MAAMyB,WAAa5jD,EAAKmiD,MAAMyB,UACnCyuF,EAAI1rH,SAAW0rH,EAAI1rH,QAAQ,UAC3B3mB,EAAKinC,WAILxwC,KAAK0rD,MAAMha,QAAU1xC,KAAK0xC,MAAMxyC,IAAI,mBACpCc,KAAKoyC,SAASpyC,KAAK0rD,MAAMha,MAAO,eAAgB,WAC5CnoC,EAAK0c,WAMjB+iC,SAAU,WACNhpD,KAAK0xC,MAAM9uC,IAAI,YAAY,IAI/BlD,MAAO,SAAS0X,GACZpX,KAAK0xC,MAAM9uC,IAAI,aAAcwU,IAIjC6O,MAAO,YACFjmB,KAAK0xC,MAAMxyC,IAAI,UAAYc,KAAK0xC,MAAM9uC,IAAI,aAAc,OAG7D4tC,OAAQ,WAEJzM,EAAE,YAAYj0B,MACd,IAAIojD,GAAYlzD,KAAK0xC,MAAMxyC,IAAI,OAAQ,IACnC+zM,EAAgBjzM,KAAK0xC,MAAMxyC,IAAI,WAC/B+zM,KAA6D,GAA5C//I,EAAUjyD,QAAV,IAAsBgyM,EAAtB,OACjB//I,QAAkB+/I,EAAlB,KAEJjzM,KAAKwnD,MAAM/9C,KAAKypD,GAEhBlzD,KAAK23C,IAAI33C,KAAK0xC,MAAMxyC,IAAI,UAAY,OAAS,UAE7Cc,KAAK2yM,SACA3yM,KAAK0rD,MAAMyB,WAAantD,KAAK0xC,MAAMxyC,IAAI,wBAA2Bc,KAAK0xC,MAAMxyC,IAAI,YAC5E,OACA,UACNuK,KAAK/H,EAAE2tC,OAAOrvC,KAAK0xC,MAAMxyC,IAAI,eAEjC,IAAImvI,GAAaruI,KAAK0xC,MAAMxyC,IAAI,aAehC,IAdAc,KAAKgzM,OAAO3kE,EAAa,OAAS,UAClCruI,KAAK23C,IAAI02F,EAAa,WAAa,eAAe,YAClDruI,KAAK+yM,YAAYtpM,KAAK4kI,GAEtBruI,KAAKqpD,UAAUrpD,KAAK0xC,MAAMxyC,IAAI,YAAc,OAAS,UAErDc,KAAK0rD,MAAMyB,WAAantD,KAAK0xC,MAAMxyC,IAAI,YAAcc,KAAK0yM,OAAO5iM,OAAS9P,KAAK0yM,OAAOrlM,OAEtFrN,KAAK0rD,MAAMha,OACP1xC,KAAK0rD,MAAMha,MAAM9uC,KACbokD,MAAOhnD,KAAK0xC,MAAMxyC,IAAI,SACtB0E,MAAO5D,KAAK0xC,MAAMxyC,IAAI,WAGzBc,KAAK0xC,MAAMxyC,IAAI,iBAAuD5B,KAAxC0C,KAAK0xC,MAAMxyC,IAAI,qBAY9Cc,KAAKslE,YAAYj4D,OAAO+J,KAAKpX,KAAK0xC,MAAMxyC,IAAI,UAC5Cc,KAAK4yM,aAAa9iM,WAbgE,CAClF,GAAIojM,GAAoBlzM,KAAK0rD,MAAMyB,UAAY,SAAW,SAC1DntD,MAAKslE,YAAYx1D,OACjB9P,KAAK4yM,aAAavlM,OAClBrN,KAAK6yM,kBAAkBz7L,KAAKpX,KAAK0xC,MAAMxyC,IAAI,UAC3Cc,KAAK8yM,kBACAx5K,cACAL,SAAS,QACTA,SAASj5B,KAAK0xC,MAAMxyC,IAAX,OAAsBg0M,IAC/BtwL,KAAK,sBAAuB5iB,KAAK0xC,MAAMxyC,IAAX,QAAuBg0M,IACnDx/I,SAAUqd,UAAW,aAOlCxnB,UAAW,WACP,MAAOxlB,GAAE,UACJ9K,SAAS,mBACTxH,OACGsS,EAAE,UACG9K,SAAS,0BACTxH,OAAOsS,EAAE,WAAW9K,SAAS,qBAC7BxH,OAAOsS,EAAE,WAAW9K,SAAS,wBAErCxH,OACGsS,EAAE,UACG9K,SAAS,iBACTxH,OACGsS,EAAE,UACG9K,SAAS,uBACTxH,OAAOsS,EAAE,QAAQ9K,SAAS,6BAC1BxH,OAAOsS,EAAE,WAAW9K,SAAS,8BAErCxH,OAAOsS,EAAE,WAAW9K,SAAS,wBAErCxH,OACGsS,EAAE,UACG9K,SAAS,iBACTxH,OAAOsS,EAAE,WAAW9K,SAAS,iBAC7BxH,OAAOsS,EAAE,UAAU9K,SAAS,sBAEpCxH,OAAOsS,EAAE,UAAU9K,SAAS,yBnFs2iDZt9B,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUrvC,EAAGqiC,GAkClD,QAASsc,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAhCvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GoFpgjDX,IAAAo8C,GAAAlqD,EAAA,GpFygjDIiyD,EAAUhN,EAAuBiF,GoFxgjDrCqF,EAAAvvD,EAAA,GpF4gjDIwvD,EAAWvK,EAAuBsK,GoF3gjDtCwoJ,EAAA/3M,EAAA,KpF+gjDIg4M,EAAoB/yJ,EAAuB8yJ,GoF9gjD/CE,EAAAj4M,EAAA,KpFkhjDIk4M,EAAoBjzJ,EAAuBgzJ,GoFjhjD/CE,EAAAn4M,EAAA,KpFqhjDIo4M,EAAgBnzJ,EAAuBkzJ,GoFphjD3CE,EAAAr4M,EAAA,KpFwhjDIs4M,EAAwBrzJ,EAAuBozJ,GoFvhjDnDE,EAAAv4M,EAAA,KpF2hjDIw4M,EAAkBvzJ,EAAuBszJ,EAK7Cp4M,GAAQmkD,QoF9hjDO3O,EAAS2C,MAAMvrC,QAE1B3B,OACI4Q,KAAM,aACN0O,SAAU,aACVtM,OAAQ,eACRq6L,YAAa,eACbC,YAAa,eACb1xM,KAAM,aACN2xM,gBAAiB,aACjB3iE,QAAS,eACTt8G,MAAO,eACPk/K,QAAS,gBACTC,WAAY,kBACZjtJ,MAAO,cACP15C,OAAQ,eACR4mM,YAAa,eACbC,QAAS,eACTC,aAAc,gBACdC,QAAS,YACT13H,OAAQ,eACR23H,gBAAiB,qBAIrBzuK,OAAQ,SAASoyG,GACb,GAAIs8D,GAAav0M,KAAKwG,MAAMyxI,EAAUj6I,MAClC0tD,EAAoC,kBAArB1rD,MAAKu0M,GAA6Bv0M,KAAKu0M,GAAY54M,KAAKqE,KAAMi4I,GAAa,IAO9F,OANKvsF,KACDA,EAAQusF,EAAU32I,QAAUtB,KAAKw0M,aAAav8D,GAAaj4I,KAAKy0M,WAAWx8D,GAC3Er6F,OAAOkO,KAAKzO,MAAM,6BAAlB,4BAA4E46F,EAAUj6I,KAAtF,WAEgBV,KAApB26I,EAAU/uI,QAAwB+uI,EAAU/uI,MAAQ,MACpDwiD,EAAMxiD,MAAM+uI,EAAU/uI,OACfwiD,GAIXgpJ,WAAY,SAASz8D,GACjB,MAAO,IAAIm7D,GAAA1zJ,QAAcpI,MACrB3+B,YAAas/H,EAAUt/H,GACvBg8L,WAAY18D,EAAU08D,WACtB96J,SAAUo+F,EAAUp+F,SACpBksE,SAAUkyB,EAAUlyB,SACpB/nH,KAAMi6I,EAAUj6I,KAChB42M,OAAQ38D,EAAU28D,OAClBxyM,KAAM61I,EAAU32I,QAChB+pD,SAAU4sF,EAAU5sF,YAK5BmpJ,aAAc,SAASv8D,GAEnB,GAAIA,EAAU48D,YACV,MAAO70M,MAAKy0M,WAAWx8D,EAIL,gBAAlBA,EAAUj6I,OACVi6I,EAAU5J,WAAa,yCAI3B,IAAIjsI,GAAO61I,EAAU71I,IAChBA,KACDA,KACAV,EAAEH,KAAK02I,EAAU32I,QAAS,SAAAuqB,GACtBzpB,EAAK9F,MAAOuvD,MAAOhgC,EAAO,GAAI3iB,MAAO2iB,EAAO,OAKpD,IAAIipL,GAAclqJ,EAAAlL,QAAGmJ,MACrB,QAAQovF,EAAU1tI,SACd,IAAK,aACDuqM,EAAclqJ,EAAAlL,QAAGiJ,QACjB,MACJ,KAAK,QACDmsJ,EAAclqJ,EAAAlL,QAAGkJ,KACjB,MACJ,KAAK,cACDksJ,EAAclqJ,EAAAlL,QAAGgJ,YAKzB,MAAO,IAAIosJ,GAAYx9J,MACnB3+B,YAAas/H,EAAUt/H,GACvBvW,KAAMA,EACNisI,WAAY4J,EAAU5J,YAAc,uBACpCvnF,SAAUmxF,EAAUnxF,SACpBi/D,SAAUkyB,EAAUlyB,SACpBlsE,SAAUo+F,EAAUp+F,SACpBwR,SAAU4sF,EAAU5sF,SACpBmjF,WAAYyJ,EAAUzJ,WACtBD,WAAiC,aAArB0J,EAAU28D,UAK9BG,gBAAiB,SAAS98D,GAEtB,MAAIA,GAAU48D,YACH70M,KAAKy0M,WAAWx8D,GAIpB,GAAIrtF,GAAAlL,QAAGqJ,UAAUzR,MACpB3+B,YAAas/H,EAAUt/H,GACvBvW,KAAM61I,EAAU32I,QAChBiJ,QAAS0tI,EAAU1tI,QACnBsvC,SAAUo+F,EAAUp+F,SACpBwR,SAAU4sF,EAAU5sF,YAK5BopJ,WAAY,SAASx8D,GAEjB,GAAIA,EAAU32I,SAAW22I,EAAU71I,KAE/B,GADA61I,EAAUlxF,KAAOkxF,EAAUlyB,SACvB14D,EAAA3N,QAAM3R,QAAQkqG,EAAU/uI,OACxB+uI,EAAU/uI,MAAQ,SAElB,IAAI66B,EAAE7zB,QAAQ+nI,EAAU/uI,OAAQ,CAC5B,GAAI8rM,GAAY,EAChB,KAAK,GAAIv5M,KAAKw8I,GAAU/uI,MAAO,CAE3B,GADA8rM,GAAan0L,OAAOo3H,EAAU/uI,MAAMzN,KAC/Bw8I,EAAUlyB,SACX,KAEJivF,IAAa,KAEjB/8D,EAAU/uI,MAAQ8rM,EAK9B,MAAO,IAAIpqJ,GAAAlL,QAAGkH,OACVjuC,YAAas/H,EAAUt/H,GACvB3a,KAAMi6I,EAAUj6I,KAChB+oD,KAAMkxF,EAAUlxF,KAChBD,SAAUmxF,EAAUnxF,SACpBD,YAAaoxF,EAAUpxF,YACvBK,SAAU+wF,EAAU/wF,SACpBmE,SAAU4sF,EAAU5sF,YAK5B4pJ,aAAc,SAASh9D,GACnB,MAAO,IAAIrtF,GAAAlL,QAAGoJ,OAAOxR,MACjB3+B,YAAas/H,EAAUt/H,GACvBsqK,QAA2B,SAAlBhrC,EAAUj6I,KACnB62M,YAAa58D,EAAU48D,YACvB9vK,IAAKkzG,EAAUlzG,IACfx4B,IAAK0rI,EAAU1rI,IACf8+C,SAAU4sF,EAAU5sF,YAK5B6pJ,aAAc,SAASj9D,GACnB,MAAO,IAAIrtF,GAAAlL,QAAG6H,QACV5uC,YAAas/H,EAAUt/H,GACvByoH,KAAM6W,EAAU7W,QAKxB+zE,cAAe,SAASl9D,GACpB,MAAO,IAAIrtF,GAAAlL,QAAGgJ,YAAYpR,MACtB3+B,YAAas/H,EAAUt/H,GACvBvW,OAASypD,MAAO,MAAO3iD,MAAO,SAAY2iD,MAAO,KAAM3iD,MAAO,UAC9DmiD,SAAU4sF,EAAU5sF,YAK5B+pJ,YAAa,SAASn9D,GAClB,MAAO,IAAA27D,GAAAl0J,SACH/mC,YAAas/H,EAAUt/H,GACvB0yC,SAAU4sF,EAAU5sF,YAK5BgqJ,cAAe,SAASp9D,GACpB,MAAO,IAAIq7D,GAAA5zJ,QAAcpI,MACrB3+B,YAAas/H,EAAUt/H,GACvBkhC,SAAUo+F,EAAUp+F,SACpBksE,SAAUkyB,EAAUlyB,SACpB16D,SAAU4sF,EAAU5sF,YAK5BiqJ,UAAW,SAASr9D,GAChB,MAAO,IAAIu7D,GAAA9zJ,QAAUpI,MACjB3+B,YAAas/H,EAAUt/H,GACvBkhC,SAAUo+F,EAAUp+F,SACpBksE,SAAUkyB,EAAUlyB,SACpB16D,SAAU4sF,EAAU5sF,YAM5BkqJ,kBAAmB,SAASt9D,GACxB,GAAI1uI,GAAOvJ,IACX,OAAO,IAAI0zM,GAAAh0J,QAAkBpI,MACzB3+B,YAAas/H,EAAUt/H,GACvB0yC,SAAU,WACN9hD,EAAKqyI,IAAI1rH,QAAQ,cAM7BslL,aAAc,SAASv9D,GACnB,MAAO,IAAIrtF,GAAAlL,QAAGgI,QACV/uC,YAAas/H,EAAUt/H,GACvB0yC,SAAU4sF,EAAU5sF,gBpFoijDH1vD,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,EAAGriC,GAkBlD,QAAS2+C,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAhBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GqFxxjDX,IAAAo8C,GAAAlqD,EAAA,GrF6xjDIiyD,EAAUhN,EAAuBiF,GqF5xjDrCqF,EAAAvvD,EAAA,GrFgyjDIwvD,EAAWvK,EAAuBsK,GqF/xjDtCpF,EAAAnqD,EAAA,IrFmyjDIoqD,EAAoBnF,EAAuBkF,GqFjyjD3CkwJ,GAAUC,SAAU,WAAYC,QAAS,UAAWC,OAAQ,UAG5DC,GACAzzM,OAEQ/D,IAAK,MACL6sD,KAAM,YACNwI,QAAS,iBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGbr3M,IAAK,MACL6sD,KAAM,aACNwI,QAAS,oBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMG,SAGbv3M,IAAK,OACL6sD,KAAM,cACNwI,QAAS,qBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMG,SAGrBE,gBAEQz3M,IAAK,MACL6sD,KAAM,aACNwI,QAAS,oBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGbr3M,IAAK,OACL6sD,KAAM,cACNwI,QAAS,sBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGrB3B,kBAEQ11M,IAAK,OACL6sD,KAAM,cACNwI,QAAS,qBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGrBK,gBAEQ13M,IAAK,MACL6sD,KAAM,YACNwI,QAAS,iBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGrBM,yBAEQ33M,IAAK,MACL6sD,KAAM,aACNwI,QAAS,oBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGrBO,2BAEQ53M,IAAK,OACL6sD,KAAM,cACNwI,QAAS,qBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGrBQ,cAEQ73M,IAAK,MACL6sD,KAAM,YACNwI,QAAS,iBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGbr3M,IAAK,MACL6sD,KAAM,aACNwI,QAAS,oBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAME,UAGrBQ,yBAEQ93M,IAAK,OACL6sD,KAAM,cACNwI,QAAS,qBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAMC,WAGbr3M,IAAK,OACL6sD,KAAM,YACNwI,QAAS,uBACTqyD,UAAU,EACVmyB,MAAOu9D,EAAME,WAMrBr+J,EAAOvG,EAASuG,KAAKnvC,QACrB2rC,WAAY,SAASxyC,GACjB,GAAIiI,GAAOvJ,IACXA,MAAK0xC,MACApwC,GAAWA,EAAQowC,OACpB,GAAIX,GAAS2C,OACT0iK,YAAcC,IAAK,UAAWC,KAAM,sBACpCC,UAAW,IACXC,YAAa,MACd5zM,IAAItB,GACXtB,KAAK63C,WAAW9T,EAAE,UAAU9K,SAAS,sBACrCj5B,KAAKy2M,eAAiB,GAAI7rJ,GAAAlL,QAAGgJ,YAAYpR,MACrCpuC,MAAO,QACP9G,OAEQ8oD,KAAM,cACNhiD,MAAO,QACPwqD,QACI,yHAGJxI,KAAM,qBACNhiD,MAAO,OACPwqD,QAAS,qEAIrB,IAAIgjJ,GAAa3yK,EAAE,UACd9K,SAAS,gBACTxH,OAAOsS,EAAE,QAAQ9K,SAAS,kBAC1BxH,OACGsS,EAAE,WAAWt6B,KACT,iGAGZzJ,MAAK22M,QACDC,OAAQF,EAAW/sM,QACnBub,QAASwxL,EACJ/sM,QACA8nB,OACGsS,EAAE,UACGtS,OACGsS,EAAE,UACG9K,SAAS,iBACTxvB,KAAK,mBAEbgoB,OAAOzxB,KAAKy2M,eAAe9+J,MAEnClmB,OAAOsS,EAAE,UAAU1gC,IAAI,QAAS,UAIzCrD,KAAK23C,IACApxC,GAAG,YAAa,SAAS1J,GACtBmD,KAAK62M,UAAYh6M,EAAEqW,OACnB3J,EAAKouC,IAAI1e,SAAS,iBAErB1yB,GAAG,WAAY,SAAA1J,GACZA,EAAE4xB,mBAELloB,GAAG,YAAa,SAAS1J,GACtBmD,KAAK62M,YAAch6M,EAAEqW,QAAU3J,EAAKouC,IAAIre,YAAY,iBAEvD/yB,GAAG,OAAQ,SAAA1J,GACR0M,EAAKutM,YAAYj6M,KAIzBmD,KAAKy5C,WAGLz5C,KAAKoyC,SAASpyC,KAAK0xC,MAAO,cAAe1xC,KAAK0uI,YAAa1uI,MAC3DA,KAAKoyC,SAASpyC,KAAK0xC,MAAO,cAAe1xC,KAAK4uI,YAAa5uI,MAC3DA,KAAKoyC,SAASpyC,KAAK0xC,MAAO,iBAAkB1xC,KAAK+2M,eAAgB/2M,MACjEA,KAAKoyC,SAASpyC,KAAK0xC,MAAO,eAAgB1xC,KAAK8uI,aAAc9uI,MAC7DA,KAAKoyC,SACDpyC,KAAK0xC,MACL,gEACA1xC,KAAKg3M,YACLh3M,MAEJA,KAAKwwC,SAGLxwC,KAAKuG,GAAG,SAAU,WACdjF,EAAQ+pD,UAAY/pD,EAAQ+pD,SAAS9hD,EAAKL,YAIlDsnC,OAAQ,WACJxwC,KAAKg3M,cACLh3M,KAAK8uI,eACL9uI,KAAK4uI,eAIT1kH,KAAM,WACFlqB,KAAK0xC,MAAM9uC,IAAI,QAAQ,IAI3BopD,OAAQ,WACJhsD,KAAK0xC,MAAM9uC,IAAI,QAAQ,IAI3B+1C,OAAQ,SAASr3C,GACbtB,KAAK0xC,MAAM9uC,IAAI,OAAQtB,IAI3B4H,MAAO,SAASsoD,OACEl0D,KAAdk0D,GAA2BxxD,KAAK0xC,MAAM9uC,IAAI,QAAS4uD,EACnD,IAAIr9C,GAAUnU,KAAK0xC,MAAMxyC,IAAI,UAC7B,IAAIc,KAAKu/C,OAAOprC,GAAU,CACtB,GAAI8iM,GAAUj3M,KAAK49I,OAAOzpI,GAASjL,OACnC,IAAgB,OAAZ+tM,IACAA,EAAUlzK,EAAE7zB,QAAQ+mM,GAAWA,GAAWA,GACtCA,EAAQ76M,OAAS,GAAG,CACpB,GAAIF,GAAS8D,KAAKk3M,QAAS3pM,WAC3B,KAAK,GAAI9R,KAAKw7M,GAAS,CACnB,GAAI34F,GAAUt+G,KAAKy5C,QAAWw9J,EAAQx7M,GAAxB,IAA8BuE,KAAKu/C,OAAOprC,GAAS9V,IACjE,KAAIigH,EAOA,MAJA1gE,QAAOkO,KAAKzO,MACR,6BADJ,oCAEwC45J,EAAQx7M,GAFhD,MAIO,IANPS,GAAOqR,OAAOjR,KAAKgiH,GAU3B,MADApiH,GAAOqR,OAAO6I,KAAK,SAACiE,EAAGC,GAAJ,MAAUD,GAAEg+H,IAAM/9H,EAAE+9H,MAChCn8I,OAIf0hD,QAAOkO,KAAKzO,MAAM,6BAAlB,yBAAyEmU,EAAzE,KAEJ,OAAO,OAIXulJ,eAAgB,WACZ,GAAIxtM,GAAOvJ,IACX0B,GAAEH,KAAKvB,KAAK49I,OAAQ,SAAClyF,EAAOjwD,GACpB8N,EAAKmoC,MAAMxyC,IAAI,YAAczD,GAC7BiwD,EAAM/T,IAAItqC,OACV3L,EAAEH,KAAKgI,EAAKotM,OAAQ,SAACQ,EAAaC,GAC9BD,EAAY5tM,EAAKg2C,OAAO9jD,GAAGy8I,OAASk/D,EAAY,OAAS,YAE7D7tM,EAAK8tM,YAAYnuM,MAAMzN,IAEvBiwD,EAAM/T,IAAI7nC,UAMtBknM,YAAa,WACT,GAAIztM,GAAOvJ,KAGPs3M,GACCt3M,KAAK0xC,MAAMxyC,IAAI,UAAec,KAAK0xC,MAAMxyC,IAAI,UAA7C,IAA4D,IAC7D2hB,OAAO7gB,KAAK0xC,MAAMxyC,IAAI,UACrBc,KAAK0xC,MAAMxyC,IAAI,YAAc,YAAc,GAC5C22M,GAAeyB,GACft3M,KAAKu/C,OAASs2J,EAAeyB,IAE7Bt3M,KAAKu/C,OAASs2J,EAAA,KACdj4J,OAAOkO,KAAKzO,MAAM,mCAAlB,kCAAwFi6J,EAAxF,MAIJ,IAAIl1M,GAAOmH,EAAKmoC,MAAMxyC,IAAI,QACtBy1M,EAAatnJ,EAAA3N,QAAM1C,QAAQh9C,KAAK0xC,MAAMxyC,IAAI,eAC1Ck3M,EAAap2M,KAAK0xC,MAAMxyC,IAAI,aAGhCc,MAAK49I,UACL59I,KAAKu3M,eACL71M,EAAEH,KAAKvB,KAAKu/C,OAAQ,SAAC7gD,EAAGjD,GACpB8N,EAAKguM,YAAYj7M,MACb4M,MAAOzN,EACPyvD,KAAMxsD,EAAEwsD,KACRwI,QAASh1D,EAAEg1D,UAEfnqD,EAAKq0I,OAAOthJ,KACR,GAAIkpD,GAAA9F,QAAOpI,MACPuC,SAAUtwC,EAAKmoC,MAAMxyC,IAAI,YACzB6mH,SAAUrnH,EAAEqnH,SACZwoB,YACK7vI,EAAEqnH,UAAa3jH,GAAQA,EAAK1D,EAAEL,MAAQ+D,EAAK1D,EAAEL,KAAKjC,OAASmN,EAAKmoC,MAAMxyC,IAAI,aAC/EsvI,YAAY,EACZH,kBAAkBsmE,EAAgBA,EAAhB,IAAgC,KAAKyB,EAAW13M,EAAEL,MAAQ,WAA5E,cACAgtD,SAAU,WACN9hD,EAAK2mB,QAAQ,gBAK7BlwB,KAAKq3M,YAAc,GAAIzsJ,GAAAlL,QAAGgJ,YAAYpR,MAClCpuC,MAAOlJ,KAAK0xC,MAAMxyC,IAAI,WACtBkD,KAAMpC,KAAKu3M,YACXlsJ,SAAU,SAASniD,GACfK,EAAKmoC,MAAM9uC,IAAI,UAAWsG,GAC1BK,EAAK2mB,QAAQ,aAKrBlwB,KAAK23C,IAAItoC,OACT,IAAImoM,GAAe,CACfx3M,MAAK49I,OAAOxhJ,OAAS,IACrB4D,KAAK23C,IAAIlmB,OAAOzxB,KAAKq3M,YAAY1/J,KACjC6/J,EAAkBlrM,KAAKC,IAAI,EAAwB,GAArBvM,KAAK49I,OAAOxhJ,QAA1C,MAEJsF,EAAEH,KAAKvB,KAAK49I,OAAQ,SAAAlyF,GAChBniD,EAAKouC,IAAIlmB,OAAOi6B,EAAM/T,IAAIt0C,KAAM47E,cAAeu4H,OAEnD91M,EAAEH,KAAKvB,KAAK22M,OAAQ,SAACQ,EAAaC,GAC9B7tM,EAAKouC,IAAIlmB,OAAO0lL,EAAY9zM,KAAM47E,cAAeu4H,OAErDx3M,KAAK0xC,MAAM9uC,IAAI,UAAW,GAC1B5C,KAAK+2M,iBACL/2M,KAAK0uI,eAITE,YAAa,WACT,GAAIrlI,GAAOvJ,IACX0B,GAAEH,KAAKvB,KAAK49I,OAAQ,SAAAlyF,GAChBA,EAAMniD,EAAKmoC,MAAMxyC,IAAI,QAAU,OAAS,eAKhDwvI,YAAa,WACT,GAAIptI,GAAUtB,KAAK0xC,MAAMxyC,IAAI,QACzBqK,EAAOvJ,KACPy3M,IACJ/1M,GAAEH,KAAKD,EAAS,SAAC8sD,EAAO/vD,GACpBo5M,EAAep5M,MACfqD,EAAEH,KAAK6sD,EAAO,SAAAtpB,GACV2yK,EAAep5M,GAAK/B,MAChB+7I,IAAKvzG,EAAKuzG,IACVvI,KAAMhrG,EAAKgrG,KACXjkF,MAAU/mB,EAAKuzG,IAAf,KAAuBvzG,EAAKlmC,KAC5BsK,MAAO47B,EAAKnsB,GACZ8qE,KAAM3+C,EAAK2+C,OAEfl6E,EAAKkwC,QAAW3U,EAAKnsB,GAArB,IAA2Bta,GAASymC,MAG5CpjC,EAAEH,KAAKvB,KAAKu/C,OAAQ,SAAC7gD,EAAGjD,GACpBg8M,EAAe/4M,EAAEL,MAAQkL,EAAKq0I,OAAOniJ,GAAGyL,IAAIuwM,EAAe/4M,EAAEL,KAAM,SAACgc,EAAGC,GAAJ,MAAUA,GAAE+9H,IAAMh+H,EAAEg+H,SAK/FvJ,aAAc,WACV,GAAIt9E,GAAYxxD,KAAK0xC,MAAMxyC,IAAI,QAC/B,IAAIsyD,GAAaA,EAAUjkD,QAAUikD,EAAUjkD,OAAOnR,OAAS,EAAG,CAE9D,GAAI4iB,KACJtd,GAAEH,KAAKiwD,EAAUjkD,OAAQ,SAAArE,GACrB8V,EAAK1iB,KAAK4M,EAAMyP,KAKpB,KAAK,GAFDta,GAAMmzD,EAAUjkD,OAAO,GAAGlP,IAC1B0nH,EAAWv0D,EAAUjkD,OAAOnR,OAAS,EAChCX,EAAI,EAAGA,EAAIuE,KAAKu/C,OAAOnjD,OAAQX,IAAK,CACzC,GAAIiwD,GAAQ1rD,KAAK49I,OAAOniJ,GACpBiD,EAAIsB,KAAKu/C,OAAO9jD,EACpB,IAAIiD,EAAEL,KAAOA,IAAiD,KAAzC0nH,GAAU,GAAM9kH,QAAQvC,EAAEqnH,UAAkB,CAC7D/lH,KAAK0xC,MAAM9uC,IAAI,UAAWnH,GAC1BiwD,EAAMxiD,MAAM8V,EACZ,aAIRtd,GAAEH,KAAKvB,KAAK49I,OAAQ,SAAAlyF,GAChBA,EAAMxiD,MAAM,SAMxB4tM,YAAa,SAASxjK,GAClB,IACI,GAAIlxC,GAAOpC,KAAK0xC,MAAMxyC,IAAI,QACtBiV,EAAUnU,KAAK0xC,MAAMxyC,IAAI,WACzBqgD,EAASv/C,KAAKu/C,OAAOprC,GACrBu3C,EAAQ1rD,KAAK49I,OAAOzpI,GACpBujM,EAAY58K,KAAKC,MAAMuY,EAAGzjB,cAAc40B,aAAakzJ,QAAQ,SAAS,GACtE96D,EAAS66D,EAAU/+L,GACnBi/L,EAA4C,WAAlCF,EAAUG,qBAAoC,MAAQ,OAChErmJ,GAAc74C,GAAIkkI,EAAQx+I,IAAKu5M,EACnC,IAAIx1M,GAAQV,EAAEymC,UAAU/lC,EAAKw1M,GAAUpmJ,GAAY,CAC/C,GAAIjS,EAAOlhD,KAAOu5M,EAAS,CACvB,GAAIE,GAAgBpsJ,EAAMxiD,OACtB4uM,IAAiBv4J,EAAOwmE,UACc,GAAlC+xF,EAAc72M,QAAQ47I,IACtBi7D,EAAcx7M,KAAKugJ,GAGvBi7D,EAAgBj7D,EAEpBnxF,EAAMxiD,MAAM4uM,OAEZ93M,MAAK0xC,MAAM9uC,IAAI,SAAW2K,QAASikD,KACnCxxD,KAAK0xC,MAAMxhB,QAAQ,eAEvBlwB,MAAKkwB,QAAQ,UACblwB,KAAK+3M,kBAAkB,eAEvB/3M,MAAK+3M,kBAAkB,UAE7B,MAAOl7M,GACLmD,KAAK+3M,kBAAkB,UAE3BzkK,EAAG7kB,kBAIPspL,kBAAmB,SAASj7K,GACxB,GAAIvzB,GAAOvJ,IACXA,MAAK23C,IAAIre,YAAY,eAAeL,SAApC,eAA4D6D,GAC5Dv+B,WAAW,WACPgL,EAAKouC,IAAIre,YAAT,eAAoCwD,IACrC98B,KAAK0xC,MAAMxyC,IAAI,iBAItBg4M,OAAQ,SAASh7M,GACbA,EAAA,OAAkB,CAClB,IAAIiY,GAAUnU,KAAK0xC,MAAMxyC,IAAI,WACzBqgD,EAASv/C,KAAKu/C,OAAOprC,EACzB,IAAkB,QAAdorC,EAAOlhD,MAAkBkhD,EAAOwmE,SAAU,CAC1C,GAAIuwF,GAAOt2M,KAAKy5C,QAAWz5C,KAAK49I,OAAOzpI,GAASjL,QAArC,QACPotM,IAAQA,EAAK0B,gBACb97M,EAAA,OAAkB,GAS1B,MANIqjD,GAAO24F,OAASu9D,EAAMG,QAAUr2J,EAAO24F,OAASu9D,EAAME,UACtDz5M,EAAA,OAAkB,EACdqjD,EAAO24F,OAASu9D,EAAME,SAA2C,SAAhC31M,KAAKy2M,eAAevtM,UACrDhN,EAAA,SAAoB,IAGrBA,IrF+ujDfX,GAAQmkD,SqF1ujDJpI,KAAMA,KrF6ujDmB37C,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB,KAIzG,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,GAsBrC,QAASsP,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GApBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GsFhtkDX,IAAAo8C,GAAAlqD,EAAA,GACAuvD,GtFotkDctK,EAAuBiF,GsFptkDrClqD,EAAA,ItFwtkDIwvD,EAAWvK,EAAuBsK,GsFvtkDtCstJ,EAAA78M,EAAA,IACA88M,GtF0tkDgB73J,EAAuB43J,GsF1tkDvC78M,EAAA,KtF8tkDI+8M,EAAW93J,EAAuB63J,GsF5tkDlCE,EAAYrnK,EAAS0E,WAAWttC,QAChC2zB,IAAQ8hB,OAAO/4B,KAAf,gCAIAwzL,EAAkBtnK,EAAS0E,WAAWttC,QACtC2rC,WAAY,WACR,GAAIvqC,GAAOvJ,IACXA,MAAKu/C,OAAS,GAAIxO,GAAS2C,OAAQ4kK,WAAY,OAC/Ct4M,KAAKu/C,OAAOh5C,GAAG,SAAU,WACrBgD,EAAKurC,OAAQ7uB,OAAO,OAG5B6V,IAAK,WACD,MAAU8hB,QAAO/4B,KAAjB,iBAAsC7kB,KAAKu/C,OAAOrgD,IAAI,cAAtD,eAKJo4C,EAAOvG,EAASuG,KAAKnvC,QAErB2rC,WAAY,SAASxyC,GAEjB,GAAIiI,GAAOvJ,IAGXA,MAAKu4M,UAAY,GAAIH,GACrBp4M,KAAKw4M,SAAW,GAAIH,GAGpBr4M,KAAKsB,QAAUA,EAIftB,KAAKy4M,eAAiB,GAAI7tJ,GAAAlL,QAAGmJ,OAAOvR,MAChC+T,SAAU,SAASniD,GACfK,EAAKivM,SAASj5J,OAAO38C,IAAI,aAAcsG,MAK/ClJ,KAAKu+K,aAAe,GAAI45B,GAAAz4J,QAAKpI,MACzB14C,KAAM,UACNi7C,SAAUv4C,EAAQu4C,SAClBksE,SAAUzkH,EAAQykH,SAClB16D,SAAU,WACN9hD,EAAK2mB,QAAQ,aAKrBlwB,KAAKu4M,UAAUhyM,GAAG,QAAS,WACvB,GAAInE,KACJmH,GAAKgvM,UAAUh3M,KAAK,SAAAmwC,GAChBtvC,EAAK9F,MACD4M,MAAOwoC,EAAM/4B,GACbkzC,MAAOna,EAAMxyC,IAAI,YAGzBqK,EAAKkvM,eAAe9/J,OAAOv2C,KAI/BpC,KAAKw4M,SAASjyM,GAAG,QAAS,WACtB,GAAInE,KAEoB,QADFmH,EAAKkvM,eAAerhM,QAEtC7N,EAAKivM,SAASj3M,KAAK,SAAAmwC,GACW,SAAtBA,EAAMxyC,IAAI,SACVkD,EAAK9F,MACD4M,MAAOwoC,EAAM/4B,GACbkzC,MAAOna,EAAMxyC,IAAI,YAKjCqK,EAAKg1K,aAAa5lI,OAAOv2C,KAI7BpC,KAAKuG,GAAG,SAAU,WACdjF,EAAQ+pD,UAAY/pD,EAAQ+pD,SAAS9hD,EAAKL,WAI9ClJ,KAAK63C,WAAW73C,KAAKupD,aACrBvpD,KAAK+jC,EAAE,mBAAmBtS,OAAOzxB,KAAKy4M,eAAe9gK,KACrD33C,KAAK23C,IAAIlmB,OAAOzxB,KAAKu+K,aAAa5mI,KAGlC33C,KAAKu4M,UAAUzjK,OACX7uB,OAAO,EACPgX,QAAS,WACL1zB,EAAKkvM,eAAevoL,QAAQ,cACD5yB,KAAvBiM,EAAKjI,QAAQ4H,OACbK,EAAKL,MAAMK,EAAKjI,QAAQ4H,WAOxCA,MAAO,SAAS0D,GACZ,MAAO5M,MAAKu+K,aAAar1K,MAAM0D,IAInC28C,UAAW,WACP,MACI,qKtFqukDZhuD,GAAQmkD,SsF1tkDJpI,KAAMA,KtF6tkDmB37C,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,GAcrC,QAASsP,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAZvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GuFp2kDX,IAAAo8C,GAAAlqD,EAAA,GvFy2kDIiyD,EAAUhN,EAAuBiF,GuFx2kDrC4yJ,EAAA98M,EAAA,IvF42kDI+8M,EAAW93J,EAAuB63J,GuFx2kDlC5gK,EAAOvG,EAASuG,KAAKnvC,QAErB2rC,WAAY,SAASxyC,GAEjB,GAAIiI,GAAOvJ,IAGXA,MAAK04M,aAAe,GAAIP,GAAAz4J,QAAKpI,MACzB14C,KAAM,OACNi7C,SAAUv4C,EAAQu4C,SAClBksE,SAAUzkH,EAAQykH,SAClB16D,SAAU,WACN/pD,EAAQ+pD,UAAY/pD,EAAQ+pD,SAAS9hD,EAAKL,YAKlDlJ,KAAK63C,WAAW73C,KAAK04M,aAAa/gK,KAGlC0V,EAAA3N,QAAMxgD,KACF48B,IAAQ8hB,OAAO/4B,KAAf,mBACAoY,QAAS,SAASjpB,GACd,GAAI5R,KACJ,KAAK,GAAI3G,KAAKuY,GACV5R,EAAK9F,MACD4M,MAAO8K,EAASvY,GAAT,KACPowD,MAAO73C,EAASvY,GAAT,MAGf8N,GAAKmvM,aAAa//J,OAAOv2C,OAMrC8G,MAAO,SAAS0D,GACZ,MAAO5M,MAAK04M,aAAaxvM,MAAM0D,KvFo3kDvCrR,GAAQmkD,SuF/2kDJpI,KAAMA,KvFk3kDmB37C,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,GAkBrC,QAASsP,GAAuBlgD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,GAhBvF5D,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,GwF36kDX,IAAAo8C,GAAAlqD,EAAA,GACAuvD,GxF+6kDctK,EAAuBiF,GwF/6kDrClqD,EAAA,IxFm7kDIwvD,EAAWvK,EAAuBsK,GwFl7kDtCguJ,EAAAv9M,EAAA,KxFs7kDIw9M,EAAoBv4J,EAAuBs4J,GwFl7kD3CrhK,EAAOvG,EAASuG,KAAKnvC,QAErB2rC,WAAY,SAASxyC,GAEjB,GAAIiI,GAAOvJ,IAGXA,MAAK64M,cAAgB,GAAIjuJ,GAAAlL,QAAG2I,YACxBtM,MAAO,SACPmP,KAAM,gBACNwI,QAAS,qBACT9C,QAAS,WACLrnD,EAAKuvM,uBAKb94M,KAAK+4M,iBAAmB,GAAInuJ,GAAAlL,QAAGkH,MAG/B5mD,KAAKg5M,cAAgB,GAAIpuJ,GAAAlL,QAAGkH,OACxB5oD,KAAM,aAIVgC,KAAK63C,WAAW73C,KAAKupD,UAAUjoD,IAC/BtB,KAAK+jC,EAAE,wBAAwBtS,OAAOzxB,KAAK64M,cAAclhK,KACzD33C,KAAK+jC,EAAE,2BAA2BtS,OAAOzxB,KAAK+4M,iBAAiBphK,KAC/D33C,KAAK+jC,EAAE,wBAAwBtS,OAAOzxB,KAAKg5M,cAAcrhK,MAI7DmhK,kBAAmB,SAASx3M,GACxB,GAAIiI,GAAOvJ,IACX44M,GAAAl5J,QAAmBu5J,iBACfC,gBAAiB,SAAS92M,GACtBmH,EAAKL,MAAS9G,EAAK+2M,YAAnB,IAAkC/2M,EAAKmkB,WAMnDgjC,UAAW,SAASjoD,GAChB,MACI,6SAcR4H,MAAO,SAASsoD,GAEZ,OAAkBl0D,KAAdk0D,EAGA,MAAOxxD,MAAKkvI,WAFZlvI,MAAK2vI,UAAUn+E,IAOvB09E,UAAW,WACP,MAAUlvI,MAAK+4M,iBAAiB7vM,QAAhC,IAA2ClJ,KAAKg5M,cAAc9vM,SAIlEymI,UAAW,SAASn+E,GACZA,IACAjkD,OAASikD,EAAUh9C,MAAM,KACzBxU,KAAK+4M,iBAAiB7vM,MAAMqE,OAAO,IACnCvN,KAAKg5M,cAAc9vM,MAAMqE,OAAO,OxFk7kD5ChS,GAAQmkD,SwF56kDJpI,KAAMA,KxF+6kDmB37C,KAAKJ,EAASH,EAAoB,KAIzD,SAAUI,EAAQD,EAASH,GAEjC,YAGAmB,QAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,IAKX3N,EAAQmkD,SyFphlDJu5J,gBAAiB,SAAS33M,GACtB,GAAI83M,GAAYv9M,OAAO+hD,OAAO2B,OAAO85J,mBACjCC,EAAmBF,EAAnB,oDAEAG,EAAS19M,OAAO0kC,KAAK+4K,EAAe,2BAA4B,2BAEpEE,gBAAiBl4M,EAAA,gBACjBzF,OAAOulB,iBACH,UACA,SAAAvkB,GACI28M,eAAe38M,EAAEuF,QAErB,GAGJm3M,EAAOz0L,QAEyB,MAA5BxjB,EAAA,gBAAkCi4M,EAAOE,2BAA6Bl6J,OAAA,kBzFuhlD5E,SAAU/jD,EAAQD,EAASH,GAEjC,cAC4B,SAAS21C,EAAUhN,GAE/CxnC,OAAOwC,eAAexD,EAAS,cAC3B2N,OAAO,G0FjjlDX,IAAAo8C,GAAAlqD,EAAA,G1FsjlDIiyD,EAEJ,SAAgCltD,GAAO,MAAOA,IAAOA,EAAIf,WAAae,GAAQu/C,QAASv/C,IAFlDmlD,EAIrC/pD,GAAQmkD,Q0FzjlDO3O,EAASuG,KAAKnvC,QACzBy7D,QACI81I,UAAW,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UACrGv+L,MAAO,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,UACjGw+L,QACK,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,WAC1F,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,WAC1F,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,WAC1F,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,WAC1F,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,SAAU,YAInG7lK,WAAY,SAASxyC,GACjBtB,KAAKsB,QAAU+rD,EAAA3N,QAAMr7C,MAAM/C,MAC3BtB,KAAK63C,WAAW73C,KAAKupD,aACrBvpD,KAAKqsD,OAASrsD,KAAK+jC,EAAE,0BACrB/jC,KAAK45M,MAAQ55M,KAAK+jC,EAAE,yBACpB/jC,KAAK65M,OAAS75M,KAAK+jC,EAAE,0BACrB/jC,KAAKwpD,QAAUxpD,KAAK+jC,EAAE,2BACtB/jC,KAAK85M,SACL95M,KAAKs/B,SAAU,EACft/B,KAAKkJ,MAAMlJ,KAAKsB,QAAQ4H,OACxBlJ,KAAK+5M,OAAS/5M,KAAK+jC,EAAE,uBACrB,IAAIx6B,GAAOvJ,IACXA,MAAK+5M,OAAOxzM,GAAG,QAAS,WACpBgD,EAAKL,MAAM66B,EAAE/jC,MAAMqD,IAAI,qBACvBkG,EAAKigD,QAAQt5B,QAAQ,WAEzBlwB,KAAKwpD,QAAQjjD,GAAG,QAAS,WACrBgD,EAAK+1B,SAAW/1B,EAAK+1B,QACjB/1B,EAAK+1B,QACL/1B,EAAKqwM,MAAMxiL,OAAO,QAElB7tB,EAAKqwM,MAAMviL,QAAQ,WAM/BnuB,MAAO,SAAS+9C,GAOZ,WANgB3pD,KAAZ2pD,GAAqC,OAAZA,IACzBjnD,KAAK65M,OAAOx2M,IAAI,mBAAoB4jD,GACpCjnD,KAAK+jC,EAAE,wBAAwB10B,QAC/BrP,KAAK+jC,EAAE/jC,KAAKkvI,aAAazlI,KAAKzJ,KAAKg6M,kBACnCh6M,KAAKsB,QAAQ+pD,UAAYrrD,KAAKsB,QAAQ+pD,SAASpE,IAE5CjnD,KAAKkvI,aAIhBA,UAAW,WACP,GAAI1b,GAAMxzH,KAAK65M,OAAOx2M,IAAI,mBAE1B,IADAmwH,EAAMA,EAAIhyH,MAAM,oCACP,IACIy4M,GAAT,SAAarrI,GACT,OAAO,IAAI/1C,SAAS+1C,GAAGx5D,SAAS,KAAMnJ,OAAO,GAEjD,WAAWguM,EAAIzmF,EAAI,IAAMymF,EAAIzmF,EAAI,IAAMymF,EAAIzmF,EAAI,IAE/C,MAAO,OAKfsmF,OAAQ,WACJ95M,KAAKk6M,UAAWt2I,OAAQ5jE,KAAK4jE,OAAOzoD,MACpC,KAAK,GAAI1f,KAAKuE,MAAK4jE,OAAO+1I,MAAO,CAC7B,GAAIQ,KACK,IAAL1+M,EACA0+M,EAAA,QAAqB,EACd1+M,GAAKuE,KAAK4jE,OAAO+1I,MAAMv9M,OAAS,GACvC+9M,EAAA,KAAkB,EAClBA,EAAA,QAAqB,GAErBA,EAAA,KAAkB,EAEtBA,EAAA,OAAqBn6M,KAAK4jE,OAAO+1I,MAAMl+M,GACvCuE,KAAKk6M,SAASC,GAElBn6M,KAAKk6M,UAAWt2I,OAAQ5jE,KAAK4jE,OAAO81I,YAIxCQ,SAAU,SAAS54M,GACf,GAAIsiE,GAAStiE,EAAQsiE,OACjB4B,EAAWzhC,EAAE/jC,KAAKo6M,oBAClBC,EAAQ70I,EAASvnD,KAAK,QAC1Bje,MAAKqsD,OAAO56B,OAAO+zC,EACnB,KAAK,GAAI/pE,KAAKmoE,GAAQ,CAClB,GAAI02I,GAAOv2K,EAAE/jC,KAAKu6M,aAAa32I,EAAOnoE,IAClC6F,GAAQ6f,MACRm5L,EAAKj3M,IAAI,aAAc,QACvBi3M,EAAKj3M,IAAI,yBAA0B,OACnCi3M,EAAKj3M,IAAI,0BAA2B,QAEpC/B,EAAQ8+G,SACRk6F,EAAKj3M,IAAI,gBAAiB,QAC1Bi3M,EAAKj3M,IAAI,4BAA6B,OACtCi3M,EAAKj3M,IAAI,6BAA8B,QAE3Cg3M,EAAM5oL,OAAO6oL,GAEjB,MAAO90I,IAIXw0I,eAAgB,WACZ,MAAO,oDAIXI,iBAAkB,WACd,MAAO,kEAIXG,aAAc,SAASvzJ,GACnB,kBAAmBA,EAAnB,2DAAmFA,EAAnF,QAIJuC,UAAW,WACP,MACI,+P1FujlDiB5tD,KAAKJ,EAASH,EAAoB,GAAIA,EAAoB,KAIjF,SAAUI,EAAQD,G2FtplDxB,QAAAi/M,GAAAC,GAMA,QAAAt0K,GAAA81B,GACAK,EAAAhgE,KAAA2/D,GALA,mBAAAw+I,GAAA,CAEA,GAAAC,MACAp+I,KAIAq+I,EAAAH,EAAA7+M,KAAA++M,EAAAv0K,EAEA,OADAw0K,GAAA5/K,MAAA0/K,IAEAn+I,UACAhQ,OAAAquJ,EAAAC,aAGA,qBAAAH,GACA,mCA+wDA,OA3wDAz6M,MAAA66M,SACAC,cAAA,EACAC,YAAA,EACAC,UAAA,EACAC,OAAA,EACAC,OAAA,EACAC,SAAA,GAEAn7M,KAAAo7M,SACAp7M,KAAAq7M,UAAAZ,EACAz6M,KAAAs7M,MAAA,EACAt7M,KAAAu7M,MAAA,EACAv7M,KAAAw7M,cAAA,EACAx7M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAA27M,aACA37M,KAAA47M,cAAA,EACA57M,KAAA67M,WAAA,KACA77M,KAAA87M,WAAA,KACA97M,KAAA+7M,YAAA,EACA/7M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,cACA96M,KAAAi8M,WACAj8M,KAAAm9I,cACA++D,cAAA,EACAC,YAAA,EACAC,QAAA,EACAC,WAAA,EACAC,KAAA,EACAC,cAAA,EACAC,KAAA,EACAC,UAAA,EACAC,aAAA,EACAC,YAAA,GACAC,OAAA,GACAC,OAAA,GACAC,WAAA,GACAC,QAAA,GACAC,aAAA,GACAC,WAAA,IAEAj9M,KAAAk9M,SACAC,IAAA,UACAC,IAAA,WACAC,IAAA,QACAC,IAAA,QACAC,IAAA,MACAC,IAAA,OACAC,IAAA,OACAC,IAAA,SACAC,IAAA,YACAC,IAAA,UACAC,IAAA,WACAC,IAAA,WACAC,IAAA,UACAC,IAAA,WACAC,IAAA,QACAC,IAAA,QACAC,IAAA,MACAC,IAAA,OACAC,IAAA,OACAC,IAAA,SACAC,IAAA,YACAC,IAAA,UACAC,IAAA,WACAC,IAAA,YAWA1+M,KAAA46M,UAAA,WACA,MAAA56M,MAAAi8M,SAOAj8M,KAAA+6B,MAAA,SAAA39B,GACA,OAAA3B,GAAA,EAAmBA,EAAA2B,EAAAhB,OAAkBX,IACrCuE,KAAA2+M,kBAAAvhN,EAAA3B,KAQAuE,KAAA4+M,OAAA,SAAAxnM,GACApX,KAAAi8M,QAAA3/M,MAAA0D,KAAAu7M,MACAv7M,KAAAw7M,cACAx7M,KAAAs7M,MACAlkM,KAQApX,KAAA6+M,cAAA,WACA,GAAAz8M,GAAApC,KAAAo7M,KACA,IAAAh5M,EAAAo7I,OACA,OAAAj0B,KAAAnnH,GAAAo7I,OAAA,CAIA,OAHAhzH,GAAApoB,EAAAo7I,OAAAj0B,GAGA9tH,EAAA,EAAuBA,EAAAuE,KAAA8+M,UAAA1iN,OAA2BX,IAAA,CAClD,GAAAmiF,GAAA59E,KAAA8+M,UAAArjN,GAAA,GACAsjN,EAAA/+M,KAAA8+M,UAAArjN,GAAA,EACA+uB,KAAAnoB,QAAAu7E,EAAAmhI,GAIAv0L,IAAAnoB,QAAA,iBACAA,QAAA,cACAA,QAAA,gBAKA,QAFA8T,GAAAqU,EAAApuB,OACA4iN,EAAA,GACAvjN,EAAA,EAAuBA,EAAA0a,EAAS1a,IAAA,CAChC,GAAAiD,GAAA8rB,EAAA/uB,GACAwjN,GAAA,CACA,OAAAvgN,GAAAjD,EAAA0a,EAAA,EACAzX,EAAA8rB,IAAA/uB,GAEA,KAAAiD,GAAuB,KAAAA,IACvBugN,GAAA,GAEAA,IACAD,GAAAtgN,GAEA0D,EAAAo7I,OAAAj0B,GAAAy1F,EAGA,aAAA58M,EAAA88M,WACA,OAAA31F,KAAAnnH,GAAAo7I,OACAx9I,KAAAk9M,QAAA3zF,GAAAnnH,EAAAo7I,OAAAj0B,OAIAvpH,MAAAq7M,UAAAj5M,IAYApC,KAAA2+M,kBAAA,SAAAjgN,GAUA,GARAsB,KAAAs7M,QACAt7M,KAAAw7M,gBACA,MAAA98M,IACAsB,KAAAu7M,QACAv7M,KAAAw7M,cAAA,GAIAx7M,KAAA47M,aAGA,YAFA,MAAAl9M,IACAsB,KAAA47M,cAAA,GAGA,IAAA57M,KAAA07M,cAAA,KAAAh9M,EAEA,YADAsB,KAAA47M,cAAA,EAGA,KAAA57M,KAAAy7M,UAAA,KAAA16M,KAAArC,GAAA,CAEAsB,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAA47M,cAAA,CAIA,KADA,GAAAuD,IAAA,EACAA,GAGA,OADAA,GAAA,EACAn/M,KAAAg8M,QAGA,IAAAh8M,MAAA66M,QAAAC,cACA,KAAAp8M,IAGAsB,KAAAg8M,OAAAh8M,KAAA66M,QAAAE,YACA/6M,KAAAo7M,OACA8D,WAAA,KAGAl/M,KAAA87M,WAAA,KACA97M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,CACA,MAKA,KAAA17M,MAAA66M,QAAAE,YACA,cAAAh6M,KAAArC,GACAsB,KAAAo7M,MAAA8D,YAAAxgN,EAAA6D,cACAvC,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,MACW,CAEX,GAAA0D,GAAAp/M,KAAAo7M,MAAA8D,UACA,YAAAE,EACAp/M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,cAEA,UAAAsE,GACAp/M,KAAAo7M,MAAA8D,WAAAE,EACAp/M,KAAAo7M,MAAA59D,UACAx9I,KAAA87M,WAAAp9M,EACAsB,KAAA+7M,YAAA,EACA/7M,KAAAg8M,OAAAh8M,KAAA66M,QAAAI,OACAj7M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAA27M,WACA0D,IAAA,KAGA,YAAAD,EACAp/M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,cAEAsE,IAAAp/M,MAAAm9I,cAGAn9I,KAAAo7M,MAAA8D,WAAA,QACAl/M,KAAAo7M,MAAAz9D,UAAAyhE,EACAp/M,KAAAo7M,MAAAkE,SAAA,GACAt/M,KAAAg8M,OAAAh8M,KAAA66M,QAAAG,UACAmE,GAAA,IAIAn/M,KAAA4+M,OAAA,8BACA5+M,KAAAo7M,MAAA8D,WAAA,KACAl/M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,eAMA,KAIA,KAAA96M,MAAA66M,QAAAG,UACA,UAAAt8M,GAAyB,MAAAA,IAAA,MAAAsB,KAAA87M,WAAA,CACzB97M,KAAA87M,WAAAp9M,EACAsB,KAAA+7M,YAAA,EACA/7M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,CACA,OAEA,SAAA36M,KAAArC,GACAsB,KAAAo7M,MAAAkE,SAAAljN,OAAA,GAEA4D,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,GAEA,MAAA17M,KAAA87M,YAGA97M,KAAA4+M,OAAA,gCACA5+M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,gBAIA96M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACAyD,GAAA,EACAn/M,KAAAg8M,OAAAh8M,KAAA66M,QAAAI,OACAj7M,KAAA27M,UAAA0D,IAAA,GACAr/M,KAAAo7M,MAAA59D,YAIAx9I,KAAAo7M,MAAAkE,UAAA5gN,EACAsB,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EAEA,MAIA,KAAA17M,MAAA66M,QAAAI,OAEA,QAAAv8M,GAAwB,KAAAsB,KAAA87M,YACxB,KAAAp9M,GAAA,KAAAsB,KAAA87M,WAAA,CAGA97M,KAAA6+M,gBACA7+M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,aACA,OAEA,cAAA/5M,KAAArC,IAEAsB,KAAA27M,UAAA0D,KAAA3gN,EACAsB,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,GAGA17M,KAAA27M,UAAA0D,IAAAjjN,OAAA,GAEA4D,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,IAIA17M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAAg8M,OAAAh8M,KAAA66M,QAAAK,OACAiE,GAAA,EAGA,MAGA,KAAAn/M,MAAA66M,QAAAK,OACA,QAAAx8M,GAAwB,KAAAsB,KAAA87M,YACxB,KAAAp9M,GAAA,KAAAsB,KAAA87M,WAAA,CAGA97M,KAAA4+M,OAAA,2BACA5+M,KAAA27M,UAAA0D,IAAA,oBACAr/M,KAAA6+M,gBACA7+M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAAg8M,OAAAh8M,KAAA66M,QAAAC,aACA,OAEA,KAAAp8M,IAGAsB,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAAg8M,OAAAh8M,KAAA66M,QAAAM,SACAn7M,KAAA27M,UAAA4D,MAAA,GACAv/M,KAAA67M,YAAuChtK,OAAA2wK,QAEvC,MAIA,KAAAx/M,MAAA66M,QAAAM,SACA,GAAAsE,GAAAz/M,KAAA67M,WACAjvM,EAAA5M,KAAA27M,UAAA4D,MACAG,GAAA,CAGA,SAAAhhN,GAAA,KAAAA,GAAmC,KAAAA,GAAY,KAAAA,EAAA,CAC/C,QAAAA,GAIA,IAAA+gN,EAAA,KAAArjN,OAAAqjN,EAAA,KAAsDrjN,OAAA,CAEtD,GAAAujN,GAAA3/M,KAAA27M,UAAA4D,MAAApoM,MACAwoM,KAAA3/M,MAAAk9M,QAEAl9M,KAAA27M,UAAA4D,MAAAv/M,KAAAk9M,QAAAyC,GAGA3/M,KAAA4+M,OAAA,oCAAAe,GAEAD,GAAA,EAGA,QAAAhhN,EAAA,CAKA,OAAA+gN,EAAA,KAAArjN,OAAAqjN,EAAA,KAAsDrjN,OAAA,CAEtDqjN,EAAA,KAAAnjN,KAAA0D,KAAAs7M,OACAt7M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,CACA,OAEA,GAAA+D,EAAA,KAAArjN,QAAsD,GAAtDqjN,EAAA,KAAsDrjN,QACtD,GAAAwQ,EAAAxQ,QAAA,MAAAwQ,IAAAxQ,OAAA,KAEAsjN,GAAA,GAiBA,GAZA,KAAAhhN,IAIA,GAAAkO,EAAAxQ,QAAA,MAAAwQ,IAAAxQ,OAAA,KACAqjN,EAAA,KAA0BnjN,KAAA0D,KAAAs7M,OAC1Bt7M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,IAKA,KAAAh9M,EAKA,OAAA+gN,EAAA,KAAArjN,OAAAqjN,EAAA,KAAsDrjN,OAAA,CAEtD,GAAAujN,GAAA3/M,KAAA27M,UAAA4D,MAAApoM,MACAwoM,KAAA3/M,MAAAk9M,QAEAl9M,KAAA27M,UAAA4D,MAAAv/M,KAAAk9M,QAAAyC,GAGA3/M,KAAA4+M,OAAA,oCAAAe,GAEAR,GAAA,EACAO,GAAA,MAEA,IAAA9yM,EAAAxQ,QAAA,MAAAwQ,IAAAxQ,OAAA,IACAqjN,EAAA,KAAgCrjN,OAAA,IAEhCqjN,EAAA,KAA8BppM,OAAAopM,EAAA,KAAkBrjN,OAAA,KAChD,GAAAqjN,EAAA,KAAuCrjN,OAAAqjN,EAAA,KAAArjN,SAEvCsjN,GAAA,IAcAA,GAGA1/M,KAAAy7M,SAAA,EACAz7M,KAAA07M,cAAA,EACA17M,KAAAg8M,OAAAh8M,KAAA66M,QAAAI,OACAj7M,KAAAo7M,MAAA59D,OAAAx9I,KAAA27M,UAAA0D,KAAAr/M,KAAA27M,UAAA4D,MACAv/M,KAAA27M,WAAqC0D,IAAA,IACrCr/M,KAAA67M,WAAA,MAEA77M,KAAA27M,UAAA4D,OAAA7gN,KAOAsB,KAAA8+M,YACA,kBACA,uBACA,4BACA,gBACA,2BACA,YAAe,MACf,2BACA,mBACA,iBACA,mBACA,2BACA,2BACA,qBACA,yBACA,yBACA,oBACA,0BACA,wBACA,8BACA,0BACA,4BACA,0BACA,iBACA,2BACA,4BACA,uBACA,eACA,2BACA,oBAAuB,MACvB,0BACA,iBACA,WAAc,MACd,6BACA,2BACA,2BACA,wBACA,8BACA,6BACA,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,sBACA,cACA,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,cAAiB,MACjB,cAAiB,MACjB,eAAkB,MAClB,cAAiB,MACjB,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,gBACA,cACA,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,kBACA,YAAe,MACf,cAAiB,MACjB,YAAe,MACf,cAAiB,MACjB,YAAe,MACf,cAAiB,MACjB,YAAe,MACf,YAAe,MACf,YAAe,MACf,cACA,aAAgB,MAChB,eAAkB,MAClB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,cACA,cACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,sBACA,sBACA,gBACA,2BACA,YAAe,MACf,oBACA,qBACA,qBACA,oBACA,qBACA,uBACA,sBACA,qBACA,oBACA,oBACA,oBACA,oBACA,sBACA,qBACA,oBACA,oBACA,sBACA,oBACA,oBACA,qBACA,sBACA,kBACA,oBACA,mBACA,oBACA,mBACA,oBACA,oBACA,sBACA,qBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,qBACA,oBACA,2BACA,qBACA,qBACA,oBACA,qBACA,qBACA,qBACA,oBACA,mBACA,2BACA,+BACA,WAAc,MACd,WAAc,MACd,yBACA,WAAc,MACd,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,sBACA,oBACA,kBACA,qBACA,kBACA,mBACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,gBAAmB,MACnB,YAAc,MACd,kBAAqB,MACrB,wBAA2B,MAC3B,+BAAkC,MAClC,kBACA,iBACA,kBACA,kBACA,oBACA,iBACA,gBACA,kBACA,iBACA,kBACA,mBACA,eACA,eACA,gBACA,kBACA,gBACA,oBACA,gBACA,gBACA,gBACA,kBACA,2BAA8B,MAC9B,2BAA8B,MAC9B,sBAAyB,MACzB,wBAA2B,MAC3B,oBAAuB,MACvB,qBAAwB,MACxB,kCAAqC,MACrC,kBACA,iBACA,kBACA,kBACA,oBACA,iBACA,gBACA,sBACA,iBACA,kBACA,mBACA,eACA,eACA,eACA,eACA,gBACA,qBACA,kBACA,gBACA,oBACA,mBACA,gBACA,gBACA,kBACA,oBAAuB,MACvB,uBAA0B,MAC1B,YAAe,MACf,wBAA2B,MAC3B,sBAAyB,MACzB,8BAAiC,MACjC,yBACA,oBACA,gBACA,kBACA,mBACA,oBACA,oBACA,kBACA,kBACA,qBACA,mBACA,sBACA,wBACA,2BACA,4BACA,0BAA6B,MAC7B,2BACA,4BACA,2BACA,2BACA,2BACA,4BACA,4BACA,6BACA,0BAA6B,MAC7B,8BACA,6BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,0BACA,0BACA,8BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,2BACA,6BACA,8BACA,4BACA,8BACA,6BACA,2BACA,2BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,0BACA,0BACA,8BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,2BACA,6BACA,8BACA,4BACA,8BACA,6BACA,2BACA,2BACA,2BACA,4BACA,0BAA6B,MAC7B,2BACA,4BACA,2BACA,2BACA,2BACA,4BACA,4BACA,6BACA,0BAA6B,MAC7B,8BACA,6BACA,8BACA,8BACA,4BACA,6BACA,6BACA,6BACA,6BACA,gCACA,gCACA,6BACA,gCACA,gCACA,4BACA,4BACA,4BACA,4BACA,6BACA,4BACA,2BACA,2BACA,iCACA,iCACA,mCACA,mCACA,2BACA,2BACA,8BACA,8BACA,kCACA,yCACA,iCACA,kCACA,kCACA,8BACA,8BACA,4BACA,4BACA,8BACA,8BACA,4BACA,4BACA,8BACA,8BACA,6BACA,6BACA,6BACA,6BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,6BACA,6BACA,2BACA,2BACA,4BACA,4BACA,8BACA,8BACA,6BACA,6BACA,6BACA,6BACA,0BACA,0BACA,8BACA,8BACA,6BACA,6BACA,8BACA,8BACA,+BACA,+BACA,+BACA,+BACA,6BACA,6BACA,8BACA,8BACA,iCACA,iCACA,iCACA,4BACA,4BACA,4BACA,4BACA,+BACA,+BACA,2BACA,2BACA,8BACA,8BACA,+BACA,+BACA,6BACA,6BACA,qBAAwB,MACxB,mBAAsB,MACtB,sBAAyB,MACzB,sBAAyB,MACzB,uBAA0B,MAC1B,mBAAsB,MACtB,mBAAsB,MACtB,uBAA0B,MAC1B,qBACA,uBACA,uBACA,wBAA2B,MAC3B,iBACA,sBACA,6BACA,8BACA,uBACA,0BACA,uBACA,kBACA,4BACA,+BACA,sBACA,0BACA,2BACA,qBACA,wBACA,4BAA+B,MAC/B,yBAA2B,MAC3B,kBACA,mBACA,iBAAoB,MACpB,kBAAqB,MACrB,kBAAqB,MACrB,mBAAsB,MACtB,iBAAoB,MACpB,mBACA,kBAAqB,MACrB,mBAAsB,MACtB,kBAAqB,MACrB,kBAAqB,MACrB,iBAAoB,MACpB,gCACA,eACA,iBAAoB,MACpB,iBAAoB,MACpB,kBAAqB,MACrB,mBAAsB,MACtB,iBAAoB,MACpB,oBACA,0BACA,iBAAoB,MACpB,kBACA,gBACA,mBAAsB,MACtB,2BAA8B,MAC9B,eACA,kBAAqB,MACrB,mBAAsB,MACtB,kBAAqB,MACrB,kBAAqB,MACrB,kBAAqB,MACrB,kBAAqB,MACrB,kBAAqB,MACrB,kBACA,iBACA,kBACA,mBACA,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,sBACA,oBACA,uBACA,sBACA,2BACA,wBACA,oBACA,oBACA,oBACA,oBACA,uBACA,wBACA,2BACA,2BACA,6BACA,8BACA,0BACA,2BACA,mBACA,0BACA,2BACA,0BACA,2BACA,gCACA,4BACA,gBACA,gBACA,2BAA8B,MAC9B,2BACA,4BACA,4BACA,6BACA,0BACA,4BACA,2BACA,0BACA,2BACA,6BACA,6BACA,4BACA,4BACA,2BACA,4BACA,2BACA,uBACA,6BACA,2BACA,8BACA,8BACA,uBACA,4BACA,wBACA,sBACA,oBACA,uBACA,sBACA,2BACA,wBACA,uBACA,wBACA,4BACA,6BACA,mBACA,uBACA,oBACA,mBACA,oBACA,uBACA,kBACA,eACA,oBACA,eACA,oBACA,iBACA,mBACA,gBACA,eACA,oBACA,qBACA,iBACA,mBACA,iBACA,mBACA,kBACA,uBACA,kBACA,0BACA,2BACA,gBACA,iBACA,qBACA,sBACA,kBACA,gBACA,gBACA,gBACA,gBACA,wBACA,gCACA,iBACA,yBACA,wBACA,wBACA,2BAA8B,MAC9B,2BAA8B,MAC9B,sBACA,oBACA,kBACA,2BAA8B,MAC9B,6CAAgD,MAChD,uBACA,gBACA,oBACA,qBACA,eACA,qBACA,2BAA8B,MAC9B,gCACA,kBACA,uBACA,iBACA,2BACA,sBACA,mBACA,wBACA,qBACA,sBACA,4BACA,qBACA,kBACA,mBACA,kCACA,mBACA,+BACA,kBACA,4BACA,qBACA,0BACA,yBACA,mBACA,mBACA,sBACA,2BAA8B,MAC9B,sBACA,sBACA,2BAA8B,MAC9B,iBACA,kBACA,uBACA,gBACA,gBACA,iBACA,iBACA,kBACA,4BACA,kBACA,4BACA,eACA,8BACA,eACA,oCACA,oBACA,oCACA,gBACA,gBACA,qBACA,qBACA,yBACA,4BACA,2BAA8B,MAC9B,2BAA8B,MAC9B,oBACA,oBACA,2BACA,2BACA,iBACA,iBACA,wBACA,wBACA,uBACA,mCACA,uBACA,mCACA,sBACA,sBACA,mBACA,mBACA,wBACA,wBACA,qBACA,qBACA,0BACA,0BACA,sBACA,gCACA,sBACA,+BACA,kBACA,qBACA,kCACA,qBACA,oCACA,uBACA,uBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,iBACA,wBACA,uBACA,wBACA,oBACA,qBACA,qBACA,mBACA,kBACA,kBACA,gBACA,iBACA,sBACA,wBACA,kBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,4BACA,6BACA,2BACA,4BACA,qBACA,kBACA,qBACA,6BACA,qBACA,mBACA,0BACA,2BAA8B,MAC9B,2BAA8B,MAC9B,mBACA,mBACA,oBACA,iBACA,iBACA,0BACA,mBACA,mBACA,mBACA,2BACA,4BACA,sBACA,qBACA,uBACA,mBACA,mBACA,gBACA,gBACA,sBACA,oBACA,mBACA,yBACA,4BACA,sBACA,sBACA,wBACA,wBACA,4BACA,4BACA,sBACA,kBACA,kBACA,+BACA,qBACA,0BACA,2BACA,4BACA,6BACA,kBACA,kBACA,4BACA,8BACA,qBACA,4BACA,kBACA,kBACA,mBACA,mBACA,qBACA,yBACA,qBACA,qBACA,qBACA,qBACA,kBACA,kBACA,mBACA,mBACA,2BAA8B,MAC9B,sBACA,uBACA,uBACA,6BACA,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,qBACA,sBACA,qBACA,mBACA,iBAAoB,MACpB,mBACA,wBACA,gBAAmB,MACnB,sBACA,2BAA8B,MAC9B,iBAAoB,MACpB,0BACA,0BACA,wBACA,+BACA,0BACA,iBAAoB,MACpB,4BACA,8BACA,yBACA,8BACA,yBACA,iBAAoB,MACpB,oBACA,oBACA,iBAAoB,MACpB,qBACA,qBACA,qBACA,iBAAoB,MACpB,sBACA,oBACA,oBACA,qBACA,oBACA,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,sBACA,oBACA,kBACA,iBACA,oBACA,mBACA,mBACA,oBACA,kBACA,kBACA,mBACA,mBACA,mBACA,gBACA,kBACA,kBACA,oBACA,wBACA,wBACA,qBACA,mBACA,iBAAoB,MACpB,oBACA,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,wBACA,uBACA,iBACA,oBACA,kBACA,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iB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eAGA,GAAAE,EAAAt2N,OACA,MAAAs2N,GAAA,GAAAt7F,MAIA,QAFAi8F,GAAA,GAAApQ,YAAA0P,GACAW,EAAA,EACA73N,EAAA,EAAuBA,EAAAi3N,EAAAt2N,SAAuBX,EAAA,CAC9C,GAAA6e,GAAAo4M,EAAAj3N,EACA6pN,GAAAhrM,EAAA,EAAA+4M,EAAAC,EAAAh5M,EAAAle,QACAk3N,GAAAh5M,EAAAle,OAEA,MAAAi3N,GAAAj8F,OAxlEA,GACAk7F,GADA,GAGA5B,EAAA,KAMAuC,EAAA,EAQAtB,EAAA,EACAuB,EAAA,EAMAC,GAAA,EAkBAI,GAAA,oEAEA5C,EAAA,EAWAY,EAAA,EACAC,EAAA,EAEAC,GACA,gCACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,gCACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,gCACA,+BAEA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,gCACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,+BAEAC,GACA,kCACA,oCACA,kCACA,sCACA,kCACA,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","file":"libs.bundled.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/ \t\tif(executeModules) {\n/******/ \t\t\tfor(i=0; i < executeModules.length; i++) {\n/******/ \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\treturn result;\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t3: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = 'text/javascript';\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".bundled.js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 89);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"
\")\n });\n modal.show({ backdrop: true });\n}\n\n// ============================================================================\nexports.default = {\n Modal: Modal,\n hide_modal: hide_modal,\n show_modal: show_modal,\n show_message: show_message,\n show_in_overlay: show_in_overlay\n};\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(_, $, Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _bootstrapTour = __webpack_require__(53);\n\nvar BootstrapTour = _interopRequireWildcard(_bootstrapTour);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar gxy_root = typeof Galaxy === \"undefined\" ? \"/\" : Galaxy.root; /**\n * This is the primary galaxy tours definition, currently only used for\n * rendering a tour menu.\n */\n\nvar tourpage_template = \"

Galaxy Tours

\\n

This page presents a list of interactive tours available on this Galaxy server.\\nSelect any tour to get started (and remember, you can click 'End Tour' at any time).

\\n\\n
\\n <% _.each(tourtagorder, function(tag) { %>\\n \\n <% }); %>\\n
\\n\\n<% _.each(tourtagorder, function(tourtagkey) { %>\\n
\\\" style=\\\"display: block;\\\">\\n <% var tourtag = tourtags[tourtagkey]; %>\\n

\\n <%- tourtag.name %>\\n

\\n \\n
\\n<% }); %>\";\n\nvar tour_opts = {\n storage: window.sessionStorage,\n onEnd: function onEnd() {\n sessionStorage.removeItem(\"activeGalaxyTour\");\n },\n delay: 150, // Attempts to make it look natural\n orphan: true\n};\n\nvar hooked_tour_from_data = function hooked_tour_from_data(data) {\n _.each(data.steps, function (step) {\n if (step.preclick) {\n step.onShow = function () {\n _.each(step.preclick, function (preclick) {\n // TODO: click delay between clicks\n $(preclick).click();\n });\n };\n }\n if (step.postclick) {\n step.onHide = function () {\n _.each(step.postclick, function (postclick) {\n // TODO: click delay between clicks\n $(postclick).click();\n });\n };\n }\n if (step.textinsert) {\n // Have to manually trigger a change here, for some\n // elements which have additional logic, like the\n // upload input box\n step.onShown = function () {\n $(step.element).val(step.textinsert).trigger(\"change\");\n };\n }\n });\n return data;\n};\n\nvar TourItem = Backbone.Model.extend({\n urlRoot: gxy_root + \"api/tours\"\n});\n\nvar Tours = Backbone.Collection.extend({\n url: gxy_root + \"api/tours\",\n model: TourItem\n});\n\nvar giveTour = function giveTour(tour_id) {\n var url = gxy_root + \"api/tours/\" + tour_id;\n $.getJSON(url, function (data) {\n // Set hooks for additional click and data entry actions.\n var tourdata = hooked_tour_from_data(data);\n sessionStorage.setItem(\"activeGalaxyTour\", JSON.stringify(data));\n // Store tour steps in sessionStorage to easily persist w/o hackery.\n var tour = new Tour(_.extend({\n steps: tourdata.steps\n }, tour_opts));\n // Always clean restart, since this is a new, explicit giveTour execution.\n tour.init();\n tour.goTo(0);\n tour.restart();\n });\n};\n\nvar ToursView = Backbone.View.extend({\n title: \"Tours\",\n // initialize\n initialize: function initialize() {\n var self = this;\n this.setElement(\"
\");\n this.model = new Tours();\n this.model.fetch({\n success: function success() {\n self.render();\n },\n error: function error() {\n // Do something.\n console.error(\"Failed to fetch tours.\");\n }\n });\n },\n\n render: function render() {\n var tpl = _.template(tourpage_template);\n\n var tourtags = {};\n _.each(this.model.models, function (tour) {\n if (tour.attributes.tags === null) {\n if (tourtags.Untagged === undefined) {\n tourtags.Untagged = { name: \"Untagged\", tours: [] };\n }\n tourtags.Untagged.tours.push(tour);\n } else {\n _.each(tour.attributes.tags, function (tag) {\n tag = tag.charAt(0).toUpperCase() + tag.slice(1);\n if (tourtags[tag] === undefined) {\n tourtags[tag] = { name: tag, tours: [] };\n }\n tourtags[tag].tours.push(tour);\n });\n }\n });\n var tourtagorder = Object.keys(tourtags).sort();\n\n this.$el.html(tpl({\n tours: this.model.models,\n tourtags: tourtags,\n tourtagorder: tourtagorder\n })).on(\"click\", \".tourItem\", function (e) {\n e.preventDefault();\n giveTour($(this).data(\"tour.id\"));\n }).on(\"click\", \".tag-selector-button\", function (e) {\n var elem = $(e.target);\n var display = \"block\";\n var tag = elem.attr(\"tag-selector-button\");\n\n elem.toggleClass(\"btn-primary\");\n elem.toggleClass(\"btn-secondary\");\n\n if (elem.hasClass(\"btn-secondary\")) {\n display = \"none\";\n }\n $(\"div[tag='\" + tag + \"']\").css({ display: display });\n });\n }\n});\n\nexports.default = {\n ToursView: ToursView,\n hooked_tour_from_data: hooked_tour_from_data,\n tour_opts: tour_opts,\n giveTour: giveTour\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(0), __webpack_require__(2)))\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//==============================================================================\nvar LOGGING_FNS = [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"metric\"];\n/** adds logging functions to an obj.prototype (or obj directly) adding a namespace for filtering\n * @param {Object} obj\n * @param {String} namespace\n */\nfunction addLogging(obj, namespace) {\n var addTo = obj.prototype !== undefined ? obj.prototype : obj;\n if (namespace !== undefined) {\n addTo._logNamespace = namespace;\n }\n //yagni?: without this, may not capture Galaxy.config.debug and add Galaxy.logger properly\n // if( window.Galaxy && window.Galaxy.config && window.Galaxy.config.debug ){\n // addTo.logger = window.Galaxy.logger;\n // }\n\n // give the object each\n LOGGING_FNS.forEach(function (logFn) {\n addTo[logFn] = function () {\n if (!this.logger) {\n return undefined;\n }\n if (this.logger.emit) {\n return this.logger.emit(logFn, this._logNamespace, arguments);\n }\n if (this.logger[logFn]) {\n //TODO:! there has to be a way to get the lineno/file into this\n // http://stackoverflow.com/questions/13815640/a-proper-wrapper-for-console-log-with-correct-line-number\n // http://www.paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\n return this.logger[logFn].apply(this.logger, arguments);\n }\n return undefined;\n };\n });\n return obj;\n}\n\n//==============================================================================\nexports.default = addLogging;\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nvar _backbone = __webpack_require__(2);\n\nvar Backbone = _interopRequireWildcard(_backbone);\n\nvar _baseMvc = __webpack_require__(5);\n\nvar _baseMvc2 = _interopRequireDefault(_baseMvc);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class Model for a Galaxy user (including anonymous users).\n * @name User\n */\nvar User = Backbone.Model.extend(_baseMvc2.default.LoggableMixin).extend(\n/** @lends User.prototype */{\n _logNamespace: logNamespace,\n\n /** API location for this resource */\n urlRoot: function urlRoot() {\n return Galaxy.root + \"api/users\";\n },\n\n /** Model defaults\n * Note: don't check for anon-users with the username as the default is '(anonymous user)'\n * a safer method is if( !user.get( 'email' ) ) -> anon user\n */\n defaults: /** @lends User.prototype */{\n id: null,\n username: \"(\" + (0, _localization2.default)(\"anonymous user\") + \")\",\n email: \"\",\n total_disk_usage: 0,\n nice_total_disk_usage: \"\",\n quota_percent: null,\n is_admin: false\n },\n\n /** Set up and bind events\n * @param {Object} data Initial model data.\n */\n initialize: function initialize(data) {\n this.log(\"User.initialize:\", data);\n\n this.on(\"loaded\", function (model, resp) {\n this.log(this + \" has loaded:\", model, resp);\n });\n this.on(\"change\", function (model, data) {\n this.log(this + \" has changed:\", model, data.changes);\n });\n },\n\n isAnonymous: function isAnonymous() {\n return !this.get(\"email\");\n },\n\n isAdmin: function isAdmin() {\n return this.get(\"is_admin\");\n },\n\n /** Load a user with the API using an id.\n * If getting an anonymous user or no access to a user id, pass the User.CURRENT_ID_STR\n * (e.g. 'current') and the API will return the current transaction's user data.\n * @param {String} idOrCurrent encoded user id or the User.CURRENT_ID_STR\n * @param {Object} options hash to pass to Backbone.Model.fetch. Can contain success, error fns.\n * @fires loaded when the model has been loaded from the API, passing the newModel and AJAX response.\n */\n loadFromApi: function loadFromApi(idOrCurrent, options) {\n idOrCurrent = idOrCurrent || User.CURRENT_ID_STR;\n\n options = options || {};\n var model = this;\n var userFn = options.success;\n\n /** @ignore */\n options.success = function (newModel, response) {\n model.trigger(\"loaded\", newModel, response);\n if (userFn) {\n userFn(newModel, response);\n }\n };\n\n // requests for the current user must have a sep. constructed url (fetch don't work, ma)\n if (idOrCurrent === User.CURRENT_ID_STR) {\n options.url = this.urlRoot + \"/\" + User.CURRENT_ID_STR;\n }\n return Backbone.Model.prototype.fetch.call(this, options);\n },\n\n /** Clears all data from the sessionStorage.\n */\n clearSessionStorage: function clearSessionStorage() {\n for (var key in sessionStorage) {\n //TODO: store these under the user key so we don't have to do this\n // currently only history\n if (key.indexOf(\"history:\") === 0) {\n sessionStorage.removeItem(key);\n } else if (key === \"history-panel\") {\n sessionStorage.removeItem(key);\n }\n }\n },\n\n /** string representation */\n toString: function toString() {\n var userInfo = [this.get(\"username\")];\n if (this.get(\"id\")) {\n userInfo.unshift(this.get(\"id\"));\n userInfo.push(this.get(\"email\"));\n }\n return \"User(\" + userInfo.join(\":\") + \")\";\n }\n});\n\n// string to send to tell server to return this transaction's user (see api/users.py)\nUser.CURRENT_ID_STR = \"current\";\n\n// class method to load the current user via the api and return that model\nUser.getCurrentUserFromApi = function (options) {\n var currentUser = new User();\n currentUser.loadFromApi(User.CURRENT_ID_STR, options);\n return currentUser;\n};\n\n// (stub) collection for users (shouldn't be common unless admin UI)\nvar UserCollection = Backbone.Collection.extend(_baseMvc2.default.LoggableMixin).extend({\n model: User,\n urlRoot: function urlRoot() {\n return Galaxy.root + \"api/users\";\n }\n //logger : console,\n});\n\n//==============================================================================\nexports.default = {\n User: User\n};\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/** Frame view */\nvar FrameView = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n this.model = options && options.model || new Backbone.Model(options);\n this.setElement($(\"
\").addClass(\"corner frame\"));\n this.$el.append($(\"
\").addClass(\"f-header corner\").append($(\"
\").addClass(\"f-title\")).append($(\"
\").addClass(\"f-icon f-close fa fa-close\").tooltip({\n title: \"Close\",\n placement: \"bottom\"\n }))).append($(\"
\").addClass(\"f-content\")).append($(\"
\").addClass(\"f-resize f-icon corner fa fa-expand\").tooltip({ title: \"Resize\" })).append($(\"
\").addClass(\"f-cover\"));\n this.$header = this.$(\".f-header\");\n this.$title = this.$(\".f-title\");\n this.$content = this.$(\".f-content\");\n this.render();\n this.listenTo(this.model, \"change\", this.render, this);\n },\n\n render: function render() {\n var self = this;\n var options = this.model.attributes;\n this.$title.html(options.title || \"\");\n this.$header.find(\".f-icon-left\").remove();\n _.each(options.menu, function (option) {\n var $option = $(\"
\").addClass(\"f-icon-left\").addClass(option.icon);\n if (_.isFunction(option.disabled) && option.disabled()) {\n $option.attr(\"disabled\", true);\n } else {\n $option.on(\"click\", function () {\n option.onclick(self);\n }).tooltip({\n title: option.tooltip,\n placement: \"bottom\"\n });\n }\n self.$header.append($option);\n });\n if (options.url) {\n this.$content.html($(\"';\n\n var header_template = '' + '' + '';\n\n var frame_height = 350;\n var frame_width = 600;\n var class_names = \"ui-modal chat-modal\";\n\n // deletes the chat modal if already present and create one\n if ($(\".chat-modal\").length > 0) {\n $(\".chat-modal\").remove();\n }\n // creates a modal\n GenericNavView.modal = new _uiModal2.default.View({\n body: iframe_template,\n height: frame_height,\n width: frame_width,\n closing_events: true,\n title_separator: false,\n cls: class_names\n });\n\n // shows modal\n GenericNavView.modal.show();\n $el_chat_modal_header = $(\".chat-modal .modal-header\");\n $el_chat_modal_body = $(\".chat-modal .modal-body\");\n // adjusts the css of bootstrap modal for chat\n $el_chat_modal_header.addClass(\"modal-header-body\");\n $el_chat_modal_body.addClass(\"modal-header-body\");\n $el_chat_modal_header.find(\"h4\").remove();\n $el_chat_modal_header.removeAttr(\"min-height padding border\");\n $el_chat_modal_header.append(header_template);\n // click event of the close button for chat\n $(\".close-modal\").click(function (e) {\n $(\".chat-modal\").css(\"display\", \"none\");\n });\n // click event of expand and compress icon\n $(\".expand-compress-modal\").click(function (e) {\n if ($(\".expand-compress-modal\").hasClass(\"fa-expand\")) {\n $(\".chat-modal .modal-dialog\").width(\"1000px\");\n $(\".chat-modal .modal-body\").height(\"575px\");\n $(\".expand-compress-modal\").removeClass(\"fa-expand\").addClass(\"fa-compress\");\n $(\".expand-compress-modal\").attr(\"title\", \"Minimize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"96.2%\");\n } else {\n $(\".chat-modal .modal-dialog\").width(frame_width + 'px');\n $(\".chat-modal .modal-body\").height(frame_height + 'px');\n $(\".expand-compress-modal\").removeClass(\"fa-compress\").addClass(\"fa-expand\");\n $(\".expand-compress-modal\").attr(\"title\", \"Maximize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"93.2%\");\n }\n });\n return this;\n },\n\n /**renders the chat icon as a nav item*/\n render: function render() {\n var self = this;\n var navItem = {};\n navItem = {\n id: \"show-chat-online\",\n icon: \"fa-comment-o\",\n tooltip: \"Chat online\",\n visible: false,\n onclick: self.makeModalIframe\n };\n return navItem;\n }\n}); /** Real-time Communication feature **/\nexports.default = {\n GenericNavView: GenericNavView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _uiFrames = __webpack_require__(60);\n\nvar _uiFrames2 = _interopRequireDefault(_uiFrames);\n\nvar _data = __webpack_require__(18);\n\nvar _data2 = _interopRequireDefault(_data);\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _trackster = __webpack_require__(113);\n\nvar _trackster2 = _interopRequireDefault(_trackster);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n options = options || {};\n this.frames = new _uiFrames2.default.View({ visible: false });\n this.setElement(this.frames.$el);\n this.buttonActive = options.collection.add({\n id: \"enable-scratchbook\",\n icon: \"fa-th\",\n tooltip: (0, _localization2.default)(\"Enable/Disable Scratchbook\"),\n onclick: function onclick() {\n self.active = !self.active;\n self.buttonActive.set({\n toggle: self.active,\n show_note: self.active,\n note_cls: self.active && \"fa fa-check\"\n });\n !self.active && self.frames.hide();\n },\n onbeforeunload: function onbeforeunload() {\n if (self.frames.length() > 0) {\n return \"You opened \" + self.frames.length() + \" frame(s) which will be lost.\";\n }\n }\n });\n this.buttonLoad = options.collection.add({\n id: \"show-scratchbook\",\n icon: \"fa-eye\",\n tooltip: (0, _localization2.default)(\"Show/Hide Scratchbook\"),\n show_note: true,\n visible: false,\n onclick: function onclick(e) {\n self.frames.visible ? self.frames.hide() : self.frames.show();\n }\n });\n this.frames.on(\"add remove\", function () {\n this.visible && this.length() == 0 && this.hide();\n self.buttonLoad.set({\n note: this.length(),\n visible: this.length() > 0\n });\n }).on(\"show hide \", function () {\n self.buttonLoad.set({\n toggle: this.visible,\n icon: this.visible && \"fa-eye\" || \"fa-eye-slash\"\n });\n });\n this.history_cache = {};\n },\n\n /** Add a dataset to the frames */\n addDataset: function addDataset(dataset_id) {\n var self = this;\n var current_dataset = null;\n if (Galaxy && Galaxy.currHistoryPanel) {\n var history_id = Galaxy.currHistoryPanel.collection.historyId;\n this.history_cache[history_id] = {\n name: Galaxy.currHistoryPanel.model.get(\"name\"),\n dataset_ids: []\n };\n Galaxy.currHistoryPanel.collection.each(function (model) {\n !model.get(\"deleted\") && model.get(\"visible\") && self.history_cache[history_id].dataset_ids.push(model.get(\"id\"));\n });\n }\n var _findDataset = function _findDataset(dataset, offset) {\n if (dataset) {\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details && history_details.dataset_ids) {\n var dataset_list = history_details.dataset_ids;\n var pos = dataset_list.indexOf(dataset.get(\"id\"));\n if (pos !== -1 && pos + offset >= 0 && pos + offset < dataset_list.length) {\n return dataset_list[pos + offset];\n }\n }\n }\n };\n var _loadDatasetOffset = function _loadDatasetOffset(dataset, offset, frame) {\n var new_dataset_id = _findDataset(dataset, offset);\n if (new_dataset_id) {\n self._loadDataset(new_dataset_id, function (new_dataset, config) {\n current_dataset = new_dataset;\n frame.model.set(config);\n });\n } else {\n frame.model.trigger(\"change\");\n }\n };\n this._loadDataset(dataset_id, function (dataset, config) {\n current_dataset = dataset;\n self.add(_.extend({\n menu: [{\n icon: \"fa fa-chevron-circle-left\",\n tooltip: \"Previous in History\",\n onclick: function onclick(frame) {\n _loadDatasetOffset(current_dataset, -1, frame);\n },\n disabled: function disabled() {\n return !_findDataset(current_dataset, -1);\n }\n }, {\n icon: \"fa fa-chevron-circle-right\",\n tooltip: \"Next in History\",\n onclick: function onclick(frame) {\n _loadDatasetOffset(current_dataset, 1, frame);\n },\n disabled: function disabled() {\n return !_findDataset(current_dataset, 1);\n }\n }]\n }, config));\n });\n },\n\n _loadDataset: function _loadDataset(dataset_id, callback) {\n var self = this;\n var dataset = new _data2.default.Dataset({ id: dataset_id });\n $.when(dataset.fetch()).then(function () {\n var is_tabular = _.find([\"tabular\", \"interval\"], function (data_type) {\n return dataset.get(\"data_type\").indexOf(data_type) !== -1;\n });\n var title = dataset.get(\"name\");\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details) {\n title = history_details.name + \": \" + title;\n }\n callback(dataset, is_tabular ? {\n title: title,\n url: null,\n content: _data2.default.createTabularDatasetChunkedView({\n model: new _data2.default.TabularDataset(dataset.toJSON()),\n embedded: true,\n height: \"100%\"\n }).$el\n } : {\n title: title,\n url: Galaxy.root + \"datasets/\" + dataset_id + \"/display/?preview=True\",\n content: null\n });\n });\n },\n\n /** Add a trackster visualization to the frames. */\n addTrackster: function addTrackster(viz_id) {\n var self = this;\n var viz = new _visualization2.default.Visualization({ id: viz_id });\n $.when(viz.fetch()).then(function () {\n var ui = new _trackster2.default.TracksterUI(Galaxy.root);\n\n // Construct frame config based on dataset's type.\n var frame_config = {\n title: viz.get(\"name\"),\n type: \"other\",\n content: function content(parent_elt) {\n // Create view config.\n var view_config = {\n container: parent_elt,\n name: viz.get(\"title\"),\n id: viz.id,\n // FIXME: this will not work with custom builds b/c the dbkey needed to be encoded.\n dbkey: viz.get(\"dbkey\"),\n stand_alone: false\n };\n\n var latest_revision = viz.get(\"latest_revision\");\n var drawables = latest_revision.config.view.drawables;\n\n // Set up datasets in drawables.\n _.each(drawables, function (d) {\n d.dataset = {\n hda_ldda: d.hda_ldda,\n id: d.dataset_id\n };\n });\n view = ui.create_visualization(view_config, latest_revision.config.viewport, latest_revision.config.view.drawables, latest_revision.config.bookmarks, false);\n }\n };\n self.add(frame_config);\n });\n },\n\n /** Add and display a new frame/window based on options. */\n add: function add(options) {\n if (options.target == \"_blank\") {\n window.open(options.url);\n } else if (options.target == \"_top\" || options.target == \"_parent\" || options.target == \"_self\") {\n window.location = options.url;\n } else if (!this.active || options.noscratchbook) {\n var $galaxy_main = $(window.parent.document).find(\"#galaxy_main\");\n if (options.target == \"galaxy_main\" || options.target == \"center\") {\n if ($galaxy_main.length === 0) {\n window.location = options.url + (options.url.indexOf(\"?\") == -1 ? \"?\" : \"&\") + \"use_panels=True\";\n } else {\n $galaxy_main.attr(\"src\", options.url);\n }\n } else window.location = options.url;\n } else {\n this.frames.add(options);\n }\n }\n}); /** Frame manager uses the ui-frames to create the scratch book masthead icon and functionality **/\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// dependencies\n\n// grid model\nexports.default = Backbone.Model.extend({\n defaults: {\n url_base: \"\",\n async: false,\n async_ops: [],\n categorical_filters: [],\n filters: {},\n sort_key: null,\n show_item_checkboxes: false,\n advanced_search: false,\n cur_page: 1,\n num_pages: 1,\n operation: undefined,\n item_ids: undefined\n },\n\n /**\n * Return true if operation can be done asynchronously.\n */\n can_async_op: function can_async_op(op) {\n return _.indexOf(this.attributes.async_ops, op) !== -1;\n },\n\n /**\n * Add filtering criterion.\n */\n add_filter: function add_filter(key, value, append) {\n // Update URL arg with new condition.\n if (append) {\n // Update or append value.\n var cur_val = this.attributes.filters[key];\n\n var new_val;\n if (cur_val === null || cur_val === undefined) {\n new_val = value;\n } else if (typeof cur_val == \"string\") {\n if (cur_val == \"All\" || cur_val == value) {\n new_val = value;\n } else {\n // Replace string with array.\n var values = [];\n values[0] = cur_val;\n values[1] = value;\n new_val = values;\n }\n } else {\n // Current value is an array.\n new_val = cur_val;\n if (new_val.indexOf(value) === -1) {\n new_val.push(value);\n }\n }\n this.attributes.filters[key] = new_val;\n } else {\n // Replace value.\n this.attributes.filters[key] = value;\n }\n },\n\n /**\n * Remove filtering criterion.\n */\n remove_filter: function remove_filter(key, condition) {\n var cur_val = this.attributes.filters[key];\n if (cur_val === null || cur_val === undefined) {\n return false;\n }\n\n if (typeof cur_val === \"string\") {\n // overwrite/remove condition.\n this.attributes.filters[key] = \"\";\n } else {\n // filter contains an array of conditions.\n var condition_index = _.indexOf(cur_val, condition);\n if (condition_index !== -1) {\n cur_val[condition_index] = \"\";\n }\n }\n },\n\n /**\n * Returns URL data for obtaining a new grid.\n */\n get_url_data: function get_url_data() {\n var url_data = {\n async: this.attributes.async,\n sort: this.attributes.sort_key,\n page: this.attributes.cur_page,\n show_item_checkboxes: this.attributes.show_item_checkboxes,\n advanced_search: this.attributes.advanced_search\n };\n\n // Add operation, item_ids only if they have values.\n if (this.attributes.operation) {\n url_data.operation = this.attributes.operation;\n }\n if (this.attributes.item_ids) {\n url_data.id = this.attributes.item_ids;\n }\n\n // Add filter arguments to data, placing \"f-\" in front of all arguments.\n var self = this;\n _.each(_.pairs(self.attributes.filters), function (k) {\n url_data[\"f-\" + k[0]] = k[1];\n });\n return url_data;\n },\n\n // Return URL for obtaining a new grid\n get_url: function get_url(args) {\n return this.get(\"url_base\") + \"?\" + $.param(this.get_url_data()) + \"&\" + $.param(args);\n }\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(jQuery, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// grid view templates\nexports.default = {\n // template\n grid: function grid(options) {\n var tmpl = \"\";\n if (options.embedded) {\n tmpl = this.grid_header(options) + this.grid_table(options);\n } else {\n tmpl = \"
\" + this.grid_header(options) + \"
\" + this.grid_table(options);\n }\n\n // add info text\n if (options.info_text) {\n tmpl += \"
\" + options.info_text + \"
\";\n }\n\n // return\n return tmpl;\n },\n\n // template\n grid_table: function grid_table(options) {\n return '
' + '' + '' + '' + '' + \"
\" + \"
\";\n },\n\n // template\n grid_header: function grid_header(options) {\n var tmpl = '
';\n if (!options.embedded) {\n tmpl += \"

\" + options.title + \"

\";\n }\n if (options.global_actions) {\n tmpl += '
    ';\n var show_popup = options.global_actions.length >= 3;\n if (show_popup) {\n tmpl += '
  • Actions
  • ' + '
    ';\n }\n for (var i in options.global_actions) {\n var action = options.global_actions[i];\n tmpl += \"
  • \" + action.label + \"
  • \";\n }\n if (show_popup) {\n tmpl += \"
    \";\n }\n tmpl += \"
\";\n }\n if (options.insert) {\n tmpl += options.insert;\n }\n\n // add grid filters\n tmpl += this.grid_filters(options);\n tmpl += \"
\";\n\n // return template\n return tmpl;\n },\n\n // template\n header: function header(options) {\n // start\n var tmpl = \"\";\n\n // add checkbox\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n if (options.items.length > 0) {\n tmpl += '' + '';\n }\n tmpl += \"\";\n }\n\n // create header elements\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.visible) {\n tmpl += \"\";\n if (column.href) {\n tmpl += \"\" + column.label + \"\";\n } else {\n tmpl += column.label;\n }\n tmpl += \"\" + column.extra + \"\";\n }\n }\n\n // finalize\n tmpl += \"\";\n\n // return template\n return tmpl;\n },\n\n // template\n body: function body(options) {\n // initialize\n var tmpl = \"\";\n var num_rows_rendered = 0;\n var items_length = options.items.length;\n\n // empty grid?\n if (items_length == 0) {\n // No results.\n tmpl += 'No Items';\n num_rows_rendered = 1;\n }\n\n // create rows\n for (var i in options.items) {\n // encode ids\n var item = options.items[i];\n var encoded_id = item.encode_id;\n var popupmenu_id = \"grid-\" + i + \"-popup\";\n\n // Tag current\n tmpl += \"\";\n\n // Item selection column\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n }\n\n // Data columns\n for (var j in options.columns) {\n var column = options.columns[j];\n if (column.visible) {\n // Nowrap\n var nowrap = \"\";\n if (column.nowrap) {\n nowrap = 'style=\"white-space:nowrap;\"';\n }\n\n // get column settings\n var column_settings = item.column_config[column.label];\n\n // load attributes\n var link = column_settings.link;\n var value = column_settings.value;\n var target = column_settings.target;\n\n // unescape value\n if (jQuery.type(value) === \"string\") {\n value = value.replace(/\\/\\//g, \"/\");\n }\n\n // Attach popup menu?\n var id = \"\";\n var cls = \"\";\n if (column.attach_popup) {\n id = \"grid-\" + i + \"-popup\";\n cls = \"menubutton\";\n if (link != \"\") {\n cls += \" split\";\n }\n cls += \" popup\";\n }\n\n // Check for row wrapping\n tmpl += \"\";\n\n // Link\n if (link) {\n if (options.operations.length != 0) {\n tmpl += \"
\";\n }\n tmpl += \"\" + value + \"\";\n if (options.operations.length != 0) {\n tmpl += \"
\";\n }\n } else {\n tmpl += \"
\";\n }\n tmpl += \"\";\n }\n }\n tmpl += \"\";\n num_rows_rendered++;\n }\n return tmpl;\n },\n\n // template\n footer: function footer(options) {\n // create template string\n var tmpl = \"\";\n\n // paging\n if (options.use_paging && options.num_pages > 1) {\n // get configuration\n var num_page_links = options.num_page_links;\n var cur_page_num = options.cur_page_num;\n var num_pages = options.num_pages;\n\n // First pass on min page.\n var page_link_range = num_page_links / 2;\n var min_page = cur_page_num - page_link_range;\n var min_offset = 0;\n if (min_page <= 0) {\n // Min page is too low.\n min_page = 1;\n min_offset = page_link_range - (cur_page_num - min_page);\n }\n\n // Set max page.\n var max_range = page_link_range + min_offset;\n var max_page = cur_page_num + max_range;\n var max_offset;\n if (max_page <= num_pages) {\n // Max page is fine.\n max_offset = 0;\n } else {\n // Max page is too high.\n max_page = num_pages;\n // +1 to account for the +1 in the loop below.\n max_offset = max_range - (max_page + 1 - cur_page_num);\n }\n\n // Second and final pass on min page to add any unused\n // offset from max to min.\n if (max_offset != 0) {\n min_page -= max_offset;\n if (min_page < 1) {\n min_page = 1;\n }\n }\n\n // template header\n tmpl += '';\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n }\n tmpl += '' + '' + \"Page:\";\n\n if (min_page > 1) {\n tmpl += '1 ...';\n }\n\n // create page urls\n for (var page_index = min_page; page_index < max_page + 1; page_index++) {\n if (page_index == options.cur_page_num) {\n tmpl += \"\" + page_index + \"\";\n } else {\n tmpl += \"\" + page_index + \"\";\n }\n }\n\n // show last page\n if (max_page < num_pages) {\n tmpl += \"...\" + num_pages + \"\";\n }\n tmpl += \"\";\n\n // Show all link\n tmpl += ' | Show All' + \"\" + \"\";\n }\n\n // Grid operations for multiple items.\n if (options.show_item_checkboxes) {\n // start template\n tmpl += \"\" + '' + \"\" + '' + 'For selected items: ';\n\n // configure buttons for operations\n for (var i in options.operations) {\n var operation = options.operations[i];\n if (operation.allow_multiple) {\n tmpl += \" \";\n }\n }\n\n // finalize template\n tmpl += \"\" + \"\";\n }\n\n // count global operations\n var found_global = false;\n for (i in options.operations) {\n if (options.operations[i].global_operation) {\n found_global = true;\n break;\n }\n }\n\n // add global operations\n if (found_global) {\n tmpl += \"\" + '';\n for (i in options.operations) {\n var operation = options.operations[i];\n if (operation.global_operation) {\n tmpl += \"\" + operation.label + \"\";\n }\n }\n tmpl += \"\" + \"\";\n }\n\n // add legend\n if (options.legend) {\n tmpl += \"\" + options.legend + \"\";\n }\n\n // return\n return tmpl;\n },\n\n // template\n message: function message(options) {\n var status = options.status;\n if ([\"success\", \"ok\"].indexOf(status) != -1) {\n status = \"done\";\n }\n return \"

\" + _.escape(options.message) + \"

\";\n },\n\n // template\n grid_filters: function grid_filters(options) {\n // get filters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n\n // show advanced search if flag set or if there are filters for advanced search fields\n var advanced_search_display = \"none\";\n if (options.advanced_search) {\n advanced_search_display = \"block\";\n }\n\n // identify columns with advanced filtering\n var show_advanced_search_link = false;\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n var column_key = column.key;\n var f_key = filters[column_key];\n var d_key = default_filter_dict[column_key];\n if (f_key && d_key && f_key != d_key) {\n advanced_search_display = \"block\";\n }\n show_advanced_search_link = true;\n }\n }\n\n // hide standard search if advanced is shown\n var standard_search_display = \"block\";\n if (advanced_search_display == \"block\") {\n standard_search_display = \"none\";\n }\n\n //\n // standard search\n //\n var tmpl = \"
\" + \"\" + \"\" + \"\" + \"\" + \"
\";\n\n // add standard filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"standard\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize standard search\n tmpl += \"
\" + \"
\";\n\n // show advanced search link in standard display\n if (show_advanced_search_link) {\n tmpl += 'Advanced Search';\n }\n\n // finalize standard search display\n tmpl += \"
\" + \"
\";\n\n //\n // advanced search\n //\n tmpl += \"
\";\n\n // add advanced filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize advanced search template\n tmpl += \"
Close Advanced Search
\" + \"
\";\n\n // return template\n return tmpl;\n },\n\n // template\n grid_column_filter: function grid_column_filter(options, column) {\n // collect parameters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n var column_label = column.label;\n var column_key = column.key;\n if (column.filterable == \"advanced\") {\n column_label = column_label.toLowerCase();\n }\n\n // start\n var tmpl = \"\";\n\n if (column.filterable == \"advanced\") {\n tmpl += \"\" + column_label + \":\";\n }\n tmpl += '';\n if (column.is_text) {\n tmpl += \"
\";\n // Carry forward filtering criteria with hidden inputs.\n for (i in options.columns) {\n var temp_column = options.columns[i];\n var filter_value = filters[temp_column.key];\n if (filter_value) {\n if (filter_value != \"All\") {\n if (temp_column.is_text) {\n filter_value = JSON.stringify(filter_value);\n }\n tmpl += \"\";\n }\n }\n }\n // Print current filtering criteria and links to delete.\n tmpl += \"\";\n\n // add filters\n var column_filter = filters[column_key];\n if (column_filter) {\n // identify type\n var type = jQuery.type(column_filter);\n\n // single filter value\n if (type == \"string\") {\n if (column_filter != \"All\") {\n // append template\n tmpl += this.filter_element(column_key, column_filter);\n }\n }\n\n // multiple filter values\n if (type == \"array\") {\n for (var i in column_filter) {\n // get filter\n var filter = column_filter[i];\n\n // copy filters and remove entry\n var params = column_filter;\n params = params.slice(i);\n\n // append template\n tmpl += this.filter_element(column_key, filter);\n }\n }\n }\n\n // close span\n tmpl += \"\";\n\n // Set value, size of search input field. Minimum size is 20 characters.\n var value = \"\";\n if (column.filterable == \"standard\") {\n value = column.label.toLowerCase();\n var size = value.length;\n if (size < 20) {\n size = 20;\n }\n // +4 to account for space after placeholder\n size = size + 4;\n }\n\n // print input field for column\n tmpl += \"
\";\n } else {\n // filter criteria\n tmpl += \"\";\n\n // add category filters\n var seperator = false;\n for (var cf_label in options.categorical_filters[column_key]) {\n // get category filter\n var cf = options.categorical_filters[column_key][cf_label];\n\n // each filter will have only a single argument, so get that single argument\n var cf_key = \"\";\n var cf_arg = \"\";\n for (var key in cf) {\n cf_key = key;\n cf_arg = cf[key];\n }\n\n // add seperator\n if (seperator) {\n tmpl += \" | \";\n }\n seperator = true;\n\n // add category\n var filter = filters[column_key];\n if (filter && cf[column_key] && filter == cf_arg) {\n tmpl += \"\" + cf_label + \"\";\n } else {\n tmpl += \"\" + cf_label + \"\";\n }\n }\n tmpl += \"\";\n }\n tmpl += \"\" + \"\";\n\n // return template\n return tmpl;\n },\n\n // template for filter items\n filter_element: function filter_element(filter_key, filter_value) {\n filter_value = _utils2.default.sanitize(filter_value);\n return \"\" + filter_value + \"\";\n }\n}; // dependencies\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n this.model = options && options.model || new Backbone.Model({\n id: _utils2.default.uid(),\n min: null,\n max: null,\n step: null,\n precise: false,\n split: 10000,\n value: null,\n onchange: function onchange() {}\n }).set(options);\n\n // create new element\n this.setElement(this._template());\n this.$el.attr(\"id\", this.model.id);\n this.$text = this.$(\".ui-form-slider-text\");\n this.$slider = this.$(\".ui-form-slider-element\");\n\n // add text field event\n var pressed = [];\n this.$text.on(\"change\", function () {\n self.value($(this).val());\n }).on(\"keyup\", function (e) {\n pressed[e.which] = false;\n }).on(\"keydown\", function (e) {\n var v = e.which;\n pressed[v] = true;\n if (self.model.get(\"is_workflow\") && pressed[16] && v == 52) {\n self.value(\"$\");\n event.preventDefault();\n } else if (!(v == 8 || v == 9 || v == 13 || v == 37 || v == 39 || v >= 48 && v <= 57 && !pressed[16] || v >= 96 && v <= 105 || (v == 190 || v == 110) && $(this).val().indexOf(\".\") == -1 && self.model.get(\"precise\") || (v == 189 || v == 109) && $(this).val().indexOf(\"-\") == -1 || self._isParameter($(this).val()) || pressed[91] || pressed[17])) {\n event.preventDefault();\n }\n });\n\n // build slider, cannot be rebuild in render\n var opts = this.model.attributes;\n this.has_slider = opts.max !== null && opts.min !== null && opts.max > opts.min;\n var step = opts.step;\n if (!step) {\n if (opts.precise && this.has_slider) {\n step = (opts.max - opts.min) / opts.split;\n } else {\n step = 1.0;\n }\n }\n if (this.has_slider) {\n this.$text.addClass(\"ui-form-slider-left\");\n this.$slider.slider({ min: opts.min, max: opts.max, step: step }).on(\"slide\", function (event, ui) {\n self.value(ui.value);\n });\n } else {\n this.$slider.hide();\n }\n\n // add listeners\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n },\n\n render: function render() {\n var value = this.model.get(\"value\");\n this.has_slider && this.$slider.slider(\"value\", value);\n value !== this.$text.val() && this.$text.val(value);\n },\n\n /** Set and return the current value */\n value: function value(new_val) {\n var options = this.model.attributes;\n if (new_val !== undefined) {\n if (new_val !== null && new_val !== \"\" && !this._isParameter(new_val)) {\n isNaN(new_val) && (new_val = 0);\n !options.precise && (new_val = Math.round(new_val));\n options.max !== null && (new_val = Math.min(new_val, options.max));\n options.min !== null && (new_val = Math.max(new_val, options.min));\n }\n this.model.set(\"value\", new_val);\n this.model.trigger(\"change\");\n options.onchange(new_val);\n }\n return this.model.get(\"value\");\n },\n\n /** Return true if the field contains a workflow parameter i.e. $('name') */\n _isParameter: function _isParameter(value) {\n return this.model.get(\"is_workflow\") && String(value).substring(0, 1) === \"$\";\n },\n\n /** Slider template */\n _template: function _template() {\n return '
' + '' + '
' + \"
\";\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiOptions = __webpack_require__(63);\n\nvar _uiOptions2 = _interopRequireDefault(_uiOptions);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** This class creates/wraps a drill down element. */\nvar View = _uiOptions2.default.BaseIcons.extend({\n initialize: function initialize(options) {\n options.type = options.display || \"checkbox\";\n options.multiple = options.type == \"checkbox\";\n _uiOptions2.default.BaseIcons.prototype.initialize.call(this, options);\n },\n\n /** Set states for selected values */\n _setValue: function _setValue(new_value) {\n _uiOptions2.default.BaseIcons.prototype._setValue.call(this, new_value);\n if (new_value !== undefined && new_value !== null && this.header_index) {\n var self = this;\n var values = $.isArray(new_value) ? new_value : [new_value];\n _.each(values, function (v) {\n var list = self.header_index[v];\n _.each(list, function (element) {\n self._setState(element, true);\n });\n });\n }\n },\n\n /** Expand/collapse a sub group */\n _setState: function _setState(header_id, is_expanded) {\n var $button = this.$(\".button-\" + header_id);\n var $subgroup = this.$(\".subgroup-\" + header_id);\n $button.data(\"is_expanded\", is_expanded);\n if (is_expanded) {\n $subgroup.show();\n $button.removeClass(\"fa-plus-square\").addClass(\"fa-minus-square\");\n } else {\n $subgroup.hide();\n $button.removeClass(\"fa-minus-square\").addClass(\"fa-plus-square\");\n }\n },\n\n /** Template to create options tree */\n _templateOptions: function _templateOptions() {\n var self = this;\n this.header_index = {};\n\n // attach event handler\n function attach($el, header_id) {\n var $button = $el.find(\".button-\" + header_id);\n $button.on(\"click\", function () {\n self._setState(header_id, !$button.data(\"is_expanded\"));\n });\n }\n\n // recursive function which iterates through options\n function iterate($tmpl, options, header) {\n header = header || [];\n for (var i in options) {\n var level = options[i];\n var has_options = level.options && level.options.length > 0;\n var new_header = header.slice(0);\n self.header_index[level.value] = new_header.slice(0);\n var $group = $(\"
\");\n if (has_options) {\n var header_id = _utils2.default.uid();\n var $button = $(\"\").addClass(\"button-\" + header_id).addClass(\"ui-drilldown-button fa fa-plus-square\");\n var $subgroup = $(\"
\").addClass(\"subgroup-\" + header_id).addClass(\"ui-drilldown-subgroup\");\n $group.append($(\"
\").append($button).append(self._templateOption({\n label: level.name,\n value: level.value\n })));\n new_header.push(header_id);\n iterate($subgroup, level.options, new_header);\n $group.append($subgroup);\n attach($group, header_id);\n } else {\n $group.append(self._templateOption({\n label: level.name,\n value: level.value\n }));\n }\n $tmpl.append($group);\n }\n }\n\n // iterate through options and create dom\n var $tmpl = $(\"
\");\n iterate($tmpl, this.model.get(\"data\"));\n return $tmpl;\n },\n\n /** Template for drill down view */\n _template: function _template() {\n return $(\"
\").addClass(\"ui-options-list drilldown-container\").attr(\"id\", this.model.id);\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nvar _tracks = __webpack_require__(114);\n\nvar _tracks2 = _interopRequireDefault(_tracks);\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _iconButton = __webpack_require__(61);\n\nvar _iconButton2 = _interopRequireDefault(_iconButton);\n\nvar _queryStringParsing = __webpack_require__(8);\n\nvar _queryStringParsing2 = _interopRequireDefault(_queryStringParsing);\n\nvar _gridView = __webpack_require__(12);\n\nvar _gridView2 = _interopRequireDefault(_gridView);\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\n__webpack_require__(46);\n\n__webpack_require__(45);\n\n__webpack_require__(47);\n\n__webpack_require__(51);\n\n__webpack_require__(50);\n\n__webpack_require__(52);\n\n__webpack_require__(48);\n\n__webpack_require__(49);\n\n__webpack_require__(15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n * Top-level trackster code, used for creating/loading visualizations and user interface elements.\n */\n\n// global variables\nvar ui = null;\nvar view = null;\nvar browser_router = null;\n\n// trackster viewer\n\n/**\n * Base Object/Model for inhertiance.\n */\nvar Base = function Base() {\n if (this.initialize) {\n this.initialize.apply(this, arguments);\n }\n};\nBase.extend = Backbone.Model.extend;\n\n/**\n * User interface controls for trackster\n */\nvar TracksterUI = Base.extend({\n initialize: function initialize(baseURL) {\n _utils2.default.cssLoadFile(\"static/style/jquery.rating.css\");\n _utils2.default.cssLoadFile(\"static/style/autocomplete_tagging.css\");\n _utils2.default.cssLoadFile(\"static/style/jquery-ui/smoothness/jquery-ui.css\");\n _utils2.default.cssLoadFile(\"static/style/library.css\");\n _utils2.default.cssLoadFile(\"static/style/trackster.css\");\n this.baseURL = baseURL;\n },\n\n /**\n * Save visualization, returning a Deferred object for the remote call to save.\n */\n save_viz: function save_viz() {\n // show dialog\n Galaxy.modal.show({ title: \"Saving...\", body: \"progress\" });\n\n // Save bookmarks.\n var bookmarks = [];\n $(\".bookmark\").each(function () {\n bookmarks.push({\n position: $(this).children(\".position\").text(),\n annotation: $(this).children(\".annotation\").text()\n });\n });\n\n // FIXME: give unique IDs to Drawables and save overview as ID.\n var overview_track_name = view.overview_drawable ? view.overview_drawable.config.get_value(\"name\") : null;\n\n var viz_config = {\n view: view.to_dict(),\n viewport: {\n chrom: view.chrom,\n start: view.low,\n end: view.high,\n overview: overview_track_name\n },\n bookmarks: bookmarks\n };\n\n // Make call to save visualization.\n return $.ajax({\n url: Galaxy.root + \"visualization/save\",\n type: \"POST\",\n dataType: \"json\",\n data: {\n id: view.vis_id,\n title: view.config.get_value(\"name\"),\n dbkey: view.dbkey,\n type: \"trackster\",\n vis_json: JSON.stringify(viz_config)\n }\n }).success(function (vis_info) {\n Galaxy.modal.hide();\n view.vis_id = vis_info.vis_id;\n view.has_changes = false;\n\n // Needed to set URL when first saving a visualization.\n window.history.pushState({}, \"\", vis_info.url + window.location.hash);\n }).error(function () {\n // show dialog\n Galaxy.modal.show({\n title: \"Could Not Save\",\n body: \"Could not save visualization. Please try again later.\",\n buttons: {\n Cancel: function Cancel() {\n Galaxy.modal.hide();\n }\n }\n });\n });\n },\n\n /**\n * Create button menu\n */\n createButtonMenu: function createButtonMenu() {\n var self = this;\n\n var menu = _iconButton2.default.create_icon_buttons_menu([{\n icon_class: \"plus-button\",\n title: \"Add tracks\",\n on_click: function on_click() {\n _visualization2.default.select_datasets({ dbkey: view.dbkey }, function (new_tracks) {\n _.each(new_tracks, function (track) {\n view.add_drawable(_tracks2.default.object_from_template(track, view, view));\n });\n });\n }\n }, {\n icon_class: \"block--plus\",\n title: \"Add group\",\n on_click: function on_click() {\n view.add_drawable(new _tracks2.default.DrawableGroup(view, view, {\n name: \"New Group\"\n }));\n }\n }, {\n icon_class: \"bookmarks\",\n title: \"Bookmarks\",\n on_click: function on_click() {\n // HACK -- use style to determine if panel is hidden and hide/show accordingly.\n force_right_panel($(\"div#right\").css(\"right\") == \"0px\" ? \"hide\" : \"show\");\n }\n }, {\n icon_class: \"globe\",\n title: \"Circster\",\n on_click: function on_click() {\n window.location = self.baseURL + \"visualization/circster?id=\" + view.vis_id;\n }\n }, {\n icon_class: \"disk--arrow\",\n title: \"Save\",\n on_click: function on_click() {\n self.save_viz();\n }\n }, {\n icon_class: \"cross-circle\",\n title: \"Close\",\n on_click: function on_click() {\n self.handle_unsaved_changes(view);\n }\n }], {\n tooltip_config: { placement: \"bottom\" }\n });\n\n this.buttonMenu = menu;\n return menu;\n },\n\n /**\n * Add bookmark.\n */\n add_bookmark: function add_bookmark(position, annotation, editable) {\n // Create HTML.\n var bookmarks_container = $(\"#right .unified-panel-body\");\n\n var new_bookmark = $(\"
\").addClass(\"bookmark\").appendTo(bookmarks_container);\n\n var position_div = $(\"
\").addClass(\"position\").appendTo(new_bookmark);\n\n var position_link = $(\"\").text(position).appendTo(position_div).click(function () {\n view.go_to(position);\n return false;\n });\n\n var annotation_div = $(\"
\").text(annotation).appendTo(new_bookmark);\n\n // If editable, enable bookmark deletion and annotation editing.\n if (editable) {\n var delete_icon_container = $(\"
\").addClass(\"delete-icon-container\").prependTo(new_bookmark).click(function () {\n // Remove bookmark.\n new_bookmark.slideUp(\"fast\");\n new_bookmark.remove();\n view.has_changes = true;\n return false;\n });\n\n var delete_icon = $(\"\").addClass(\"icon-button delete\").appendTo(delete_icon_container);\n\n annotation_div.make_text_editable({\n num_rows: 3,\n use_textarea: true,\n help_text: \"Edit bookmark note\"\n }).addClass(\"annotation\");\n }\n\n view.has_changes = true;\n return new_bookmark;\n },\n\n /**\n * Create a complete Trackster visualization. Returns view.\n */\n create_visualization: function create_visualization(view_config, viewport_config, drawables_config, bookmarks_config, editable) {\n // Create view.\n var self = this;\n\n var view = new _tracks2.default.TracksterView(_.extend(view_config, { header: false }));\n\n view.editor = true;\n $.when(view.load_chroms_deferred).then(function (chrom_info) {\n // Viewport config.\n if (viewport_config) {\n var chrom = viewport_config.chrom;\n var start = viewport_config.start;\n var end = viewport_config.end;\n var overview_drawable_name = viewport_config.overview;\n\n if (chrom && start !== undefined && end) {\n view.change_chrom(chrom, start, end);\n } else {\n // No valid viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n } else {\n // No viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n\n // Add drawables to view.\n if (drawables_config) {\n // FIXME: can from_dict() be used to create view and add drawables?\n var drawable_config;\n\n var drawable_type;\n var drawable;\n for (var i = 0; i < drawables_config.length; i++) {\n view.add_drawable(_tracks2.default.object_from_template(drawables_config[i], view, view));\n }\n }\n\n // Set overview.\n var overview_drawable;\n for (var i = 0; i < view.drawables.length; i++) {\n if (view.drawables[i].config.get_value(\"name\") === overview_drawable_name) {\n view.set_overview(view.drawables[i]);\n break;\n }\n }\n\n // Load bookmarks.\n if (bookmarks_config) {\n var bookmark;\n for (var i = 0; i < bookmarks_config.length; i++) {\n bookmark = bookmarks_config[i];\n self.add_bookmark(bookmark[\"position\"], bookmark[\"annotation\"], editable);\n }\n }\n\n // View has no changes as of yet.\n view.has_changes = false;\n });\n\n // Final initialization.\n this.set_up_router({ view: view });\n\n return view;\n },\n\n /**\n * Set up location router to use hashes as track browser locations.\n */\n set_up_router: function set_up_router(options) {\n new _visualization2.default.TrackBrowserRouter(options);\n Backbone.history.start();\n },\n\n /**\n * Set up keyboard navigation for a visualization.\n */\n init_keyboard_nav: function init_keyboard_nav(view) {\n // Keyboard navigation. Scroll ~7% of height when scrolling up/down.\n $(document).keyup(function (e) {\n // Do not navigate if arrow keys used in input element.\n if ($(e.srcElement).is(\":input\")) {\n return;\n }\n\n // Key codes: left == 37, up == 38, right == 39, down == 40\n switch (e.which) {\n case 37:\n view.move_fraction(0.25);\n break;\n case 38:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() - 20);\n break;\n case 39:\n view.move_fraction(-0.25);\n break;\n case 40:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() + 20);\n break;\n }\n });\n },\n\n /**\n * Handle unsaved changes in visualization.\n */\n handle_unsaved_changes: function handle_unsaved_changes(view) {\n if (view.has_changes) {\n var self = this;\n Galaxy.modal.show({\n title: \"Close visualization\",\n body: \"There are unsaved changes to your visualization which will be lost if you do not save them.\",\n buttons: {\n Cancel: function Cancel() {\n Galaxy.modal.hide();\n },\n \"Leave without Saving\": function LeaveWithoutSaving() {\n $(window).off(\"beforeunload\");\n window.location = Galaxy.root + \"visualization\";\n },\n Save: function Save() {\n $.when(self.save_viz()).then(function () {\n window.location = Galaxy.root + \"visualization\";\n });\n }\n }\n });\n } else {\n window.location = Galaxy.root + \"visualization\";\n }\n }\n});\n\nvar TracksterView = Backbone.View.extend({\n // initalize trackster\n initialize: function initialize() {\n // load ui\n ui = new TracksterUI(Galaxy.root);\n\n // create button menu\n ui.createButtonMenu();\n\n // attach the button menu to the panel header and float it left\n ui.buttonMenu.$el.attr(\"style\", \"float: right\");\n\n // add to center panel\n $(\"#center .unified-panel-header-inner\").append(ui.buttonMenu.$el);\n\n // configure right panel\n $(\"#right .unified-panel-title\").append(\"Bookmarks\");\n $(\"#right .unified-panel-icons\").append(\"\");\n\n // resize view when showing/hiding right panel (bookmarks for now).\n $(\"#right-border\").click(function () {\n view.resize_window();\n });\n\n // hide right panel\n force_right_panel(\"hide\");\n\n // check if id is available\n if (galaxy_config.app.id) {\n this.view_existing();\n } else if (_queryStringParsing2.default.get(\"dataset_id\")) {\n this.choose_existing_or_new();\n } else {\n this.view_new();\n }\n },\n\n choose_existing_or_new: function choose_existing_or_new() {\n var self = this;\n var dbkey = _queryStringParsing2.default.get(\"dbkey\");\n var listTracksParams = {};\n\n var dataset_params = {\n dbkey: dbkey,\n dataset_id: _queryStringParsing2.default.get(\"dataset_id\"),\n hda_ldda: _queryStringParsing2.default.get(\"hda_ldda\"),\n gene_region: _queryStringParsing2.default.get(\"gene_region\")\n };\n\n if (dbkey) {\n listTracksParams[\"f-dbkey\"] = dbkey;\n }\n\n Galaxy.modal.show({\n title: \"View Data in a New or Saved Visualization?\",\n // either have text in here or have to remove body and the header/footer margins\n body: \"

    You can add this dataset as:
  • a new track to one of your existing, saved Trackster sessions if they share the genome build: \" + (dbkey || \"Not available.\") + \"
  • or create a new session with this dataset as the only track

\",\n buttons: {\n Cancel: function Cancel() {\n window.location = Galaxy.root + \"visualizations/list\";\n },\n \"View in saved visualization\": function ViewInSavedVisualization() {\n self.view_in_saved(dataset_params);\n },\n \"View in new visualization\": function ViewInNewVisualization() {\n self.view_new();\n }\n }\n });\n },\n\n // view\n view_in_saved: function view_in_saved(dataset_params) {\n var tracks_grid = new _gridView2.default({\n url_base: Galaxy.root + \"visualization/list_tracks\",\n dict_format: true,\n embedded: true\n });\n Galaxy.modal.show({\n title: \"Add Data to Saved Visualization\",\n body: tracks_grid.$el,\n buttons: {\n Cancel: function Cancel() {\n window.location = Galaxy.root + \"visualizations/list\";\n },\n \"Add to visualization\": function AddToVisualization() {\n $(parent.document).find(\"input[name=id]:checked\").each(function () {\n dataset_params.id = $(this).val();\n window.location = Galaxy.root + \"visualization/trackster?\" + $.param(dataset_params);\n });\n }\n }\n });\n },\n\n // view\n view_existing: function view_existing() {\n // get config\n var viz_config = galaxy_config.app.viz_config;\n\n // view\n view = ui.create_visualization({\n container: $(\"#center .unified-panel-body\"),\n name: viz_config.title,\n vis_id: viz_config.vis_id,\n dbkey: viz_config.dbkey\n }, viz_config.viewport, viz_config.tracks, viz_config.bookmarks, true);\n\n // initialize editor\n this.init_editor();\n },\n\n // view\n view_new: function view_new() {\n // reference this\n var self = this;\n\n // ajax\n $.ajax({\n url: Galaxy.root + \"api/genomes?chrom_info=True\",\n data: {},\n error: function error() {\n alert(\"Couldn't create new browser.\");\n },\n success: function success(response) {\n // show dialog\n Galaxy.modal.show({\n title: \"New Visualization\",\n body: self.template_view_new(response),\n buttons: {\n Cancel: function Cancel() {\n window.location = Galaxy.root + \"visualizations/list\";\n },\n Create: function Create() {\n self.create_browser($(\"#new-title\").val(), $(\"#new-dbkey\").val());\n Galaxy.modal.hide();\n }\n }\n });\n\n // select default\n var dbkeys_in_genomes = response.map(function (r) {\n return r[1];\n });\n if (galaxy_config.app.default_dbkey && _.contains(dbkeys_in_genomes, galaxy_config.app.default_dbkey)) {\n $(\"#new-dbkey\").val(galaxy_config.app.default_dbkey);\n }\n\n // change focus\n $(\"#new-title\").focus();\n $(\"select[name='dbkey']\").select2();\n\n // to support the large number of options for dbkey, enable scrolling in overlay.\n $(\"#overlay\").css(\"overflow\", \"auto\");\n }\n });\n },\n\n // new browser form\n template_view_new: function template_view_new(response) {\n // start template\n var html = '
' + '
' + '' + '
' + '' + \"
\" + '
' + \"
\" + '
' + '' + '
' + '
Is the build not listed here? Add a Custom Build
\";\n\n // return\n return html;\n },\n\n // create\n create_browser: function create_browser(name, dbkey) {\n $(document).trigger(\"convert_to_values\");\n\n view = ui.create_visualization({\n container: $(\"#center .unified-panel-body\"),\n name: name,\n dbkey: dbkey\n }, galaxy_config.app.gene_region);\n\n // initialize editor\n this.init_editor();\n\n // modify view setting\n view.editor = true;\n },\n\n // initialization for editor-specific functions.\n init_editor: function init_editor() {\n // set title\n $(\"#center .unified-panel-title\").text(view.config.get_value(\"name\") + \" (\" + view.dbkey + \")\");\n\n // add dataset\n if (galaxy_config.app.add_dataset) $.ajax({\n url: Galaxy.root + \"api/datasets/\" + galaxy_config.app.add_dataset,\n data: { hda_ldda: \"hda\", data_type: \"track_config\" },\n dataType: \"json\",\n success: function success(track_data) {\n view.add_drawable(_tracks2.default.object_from_template(track_data, view, view));\n }\n });\n\n // initialize icons\n $(\"#add-bookmark-button\").click(function () {\n // add new bookmark.\n var position = view.chrom + \":\" + view.low + \"-\" + view.high;\n\n var annotation = \"Bookmark description\";\n return ui.add_bookmark(position, annotation, true);\n });\n\n // initialize keyboard\n ui.init_keyboard_nav(view);\n\n $(window).on(\"beforeunload\", function () {\n if (view.has_changes) {\n return \"There are unsaved changes to your visualization that will be lost if you leave this page.\";\n }\n });\n }\n});\n\nexports.default = {\n TracksterUI: TracksterUI,\n GalaxyApp: TracksterView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _viz_views = __webpack_require__(115);\n\nvar _viz_views2 = _interopRequireDefault(_viz_views);\n\nvar _util = __webpack_require__(20);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _slotting = __webpack_require__(116);\n\nvar _slotting2 = _interopRequireDefault(_slotting);\n\nvar _painters = __webpack_require__(117);\n\nvar _painters2 = _interopRequireDefault(_painters);\n\nvar _filters = __webpack_require__(118);\n\nvar _filters2 = _interopRequireDefault(_filters);\n\nvar _data = __webpack_require__(18);\n\nvar _data2 = _interopRequireDefault(_data);\n\nvar _tools = __webpack_require__(64);\n\nvar _tools2 = _interopRequireDefault(_tools);\n\nvar _config = __webpack_require__(26);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _bbiDataManager = __webpack_require__(131);\n\nvar _bbiDataManager2 = _interopRequireDefault(_bbiDataManager);\n\n__webpack_require__(15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar extend = _.extend;\n\n// ---- Web UI specific utilities ----\n\n/**\n * Dictionary of HTML element-JavaScript object relationships.\n */\n// TODO: probably should separate moveable objects from containers.\nvar html_elt_js_obj_dict = {};\n\n/**\n * Designates an HTML as a container.\n */\nvar is_container = function is_container(element, obj) {\n html_elt_js_obj_dict[element.attr(\"id\")] = obj;\n};\n\n/**\n * Make `element` moveable within parent and sibling elements by dragging `handle` (a selector).\n * Function manages JS objects, containers as well.\n *\n * @param element HTML element to make moveable\n * @param handle_class classname that denotes HTML element to be used as handle\n * @param container_selector selector used to identify possible containers for this element\n * @param element_js_obj JavaScript object associated with element; used\n */\nvar moveable = function moveable(element, handle_class, container_selector, element_js_obj) {\n // HACK: set default value for container selector.\n container_selector = \".group\";\n\n // Register element with its object.\n html_elt_js_obj_dict[element.attr(\"id\")] = element_js_obj;\n\n // Need to provide selector for handle, not class.\n element.bind(\"drag\", { handle: \".\" + handle_class, relative: true }, function (e, d) {\n var element = $(this);\n var parent = $(this).parent();\n\n var // Only sorting amongst tracks and groups.\n children = parent.children(\".track,.group\");\n\n var this_obj = html_elt_js_obj_dict[$(this).attr(\"id\")];\n var child;\n var container;\n var top;\n var bottom;\n var i;\n\n //\n // Enable three types of dragging: (a) out of container; (b) into container;\n // (c) sibling movement, aka sorting. Handle in this order for simplicity.\n //\n\n // Handle dragging out of container.\n container = $(this).parents(container_selector);\n if (container.length !== 0) {\n top = container.position().top;\n bottom = top + container.outerHeight();\n var cur_container = html_elt_js_obj_dict[container.attr(\"id\")];\n if (d.offsetY < top) {\n // Moving above container.\n $(this).insertBefore(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable_before(this_obj, cur_container);\n return;\n } else if (d.offsetY > bottom) {\n // Moving below container.\n $(this).insertAfter(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable(this_obj);\n return;\n }\n }\n\n // Handle dragging into container. Child is appended to container's content_div.\n container = null;\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n top = child.position().top;\n bottom = top + child.outerHeight();\n // Dragging into container if child is a container and offset is inside container.\n if (child.is(container_selector) && this !== child.get(0) && d.offsetY >= top && d.offsetY <= bottom) {\n // Append/prepend based on where offsetY is closest to and return.\n if (d.offsetY - top < bottom - d.offsetY) {\n child.find(\".content-div\").prepend(this);\n } else {\n child.find(\".content-div\").append(this);\n }\n // Update containers. Object may not have container if it is being moved quickly.\n if (this_obj.container) {\n this_obj.container.remove_drawable(this_obj);\n }\n html_elt_js_obj_dict[child.attr(\"id\")].add_drawable(this_obj);\n return;\n }\n }\n\n // Handle sibling movement, aka sorting.\n\n // Determine new position\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n if (d.offsetY < child.position().top &&\n // Cannot move tracks above reference track or intro div.\n !(child.hasClass(\"reference-track\") || child.hasClass(\"intro\"))) {\n break;\n }\n }\n\n // If not already in the right place, move. Need\n // to handle the end specially since we don't have\n // insert at index\n if (i === children.length) {\n if (this !== children.get(i - 1)) {\n parent.append(this);\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, i);\n }\n } else if (this !== children.get(i)) {\n $(this).insertBefore(children.get(i));\n // Need to adjust insert position if moving down because move is changing\n // indices of all list items.\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, d.deltaY > 0 ? i - 1 : i);\n }\n }).bind(\"dragstart\", function () {\n $(this).addClass(\"dragging\");\n }).bind(\"dragend\", function () {\n $(this).removeClass(\"dragging\");\n });\n};\n\n/**\n * Init constants & functions used throughout trackster.\n */\nvar // Padding at the top of tracks for error messages\nERROR_PADDING = 20;\n\nvar // Maximum number of rows un a slotted track\nMAX_FEATURE_DEPTH = 100;\n\nvar // Minimum width for window for squish to be used.\nMIN_SQUISH_VIEW_WIDTH = 12000;\n\nvar // Number of pixels per tile, not including left offset.\nTILE_SIZE = 400;\n\nvar DEFAULT_DATA_QUERY_WAIT = 5000;\n\nvar // Maximum number of chromosomes that are selectable at any one time.\nMAX_CHROMS_SELECTABLE = 100;\n\nvar DATA_ERROR = \"Cannot display dataset due to an error. \";\n\nvar DATA_NOCONVERTER = \"A converter for this dataset is not installed. Please check your datatypes_conf.xml file.\";\n\nvar DATA_NONE = \"No data for this chrom/contig.\";\n\nvar DATA_PENDING = \"Preparing data. This can take a while for a large dataset. \" + \"If the visualization is saved and closed, preparation will continue in the background.\";\n\nvar DATA_CANNOT_RUN_TOOL = \"Tool cannot be rerun: \";\nvar DATA_LOADING = \"Loading data...\";\nvar DATA_OK = \"Ready for display\";\nvar TILE_CACHE_SIZE = 10;\nvar DATA_CACHE_SIZE = 20;\n\nvar // Numerical/continuous data display modes.\nCONTINUOUS_DATA_MODES = [\"Histogram\", \"Line\", \"Filled\", \"Intensity\"];\n\n/**\n * Round a number to a given number of decimal places.\n */\nfunction round(num, places) {\n // Default rounding is to integer.\n if (!places) {\n places = 0;\n }\n\n var val = Math.pow(10, places);\n return Math.round(num * val) / val;\n}\n\n/**\n * Check if a server can do byte range requests.\n */\nfunction supportsByteRanges(url) {\n var promise = $.Deferred();\n $.ajax({\n type: \"HEAD\",\n url: url,\n beforeSend: function beforeSend(xhr) {\n xhr.setRequestHeader(\"Range\", \"bytes=0-10\");\n },\n success: function success(result, status, xhr) {\n promise.resolve(xhr.status === 206);\n }\n });\n\n return promise;\n}\n\n/**\n * Drawables hierarchy:\n *\n * Drawable\n * --> DrawableCollection\n * --> DrawableGroup\n * --> View\n * --> Track\n */\n\n/**\n * Base class for all drawable objects. Drawable objects are associated with a view and live in a\n * container. They have the following HTML elements and structure:\n * \n * \n * \n *\n * They optionally have a drag handle class.\n */\nvar Drawable = function Drawable(view, container, obj_dict) {\n if (!Drawable.id_counter) {\n Drawable.id_counter = 0;\n }\n this.id = Drawable.id_counter++;\n this.view = view;\n this.container = container;\n this.drag_handle_class = obj_dict.drag_handle_class;\n this.is_overview = false;\n this.action_icons = {};\n\n // -- Set up drawable configuration. --\n this.config = _config2.default.ConfigSettingCollection.from_models_and_saved_values(this.config_params, obj_dict.prefs);\n\n // If there's no saved name, use object name.\n if (!this.config.get_value(\"name\")) {\n this.config.set_value(\"name\", obj_dict.name);\n }\n if (this.config_onchange) {\n this.config.on(\"change\", this.config_onchange, this);\n }\n\n // Build Drawable HTML and behaviors.\n this.container_div = this.build_container_div();\n this.header_div = null;\n\n // Use opt-out policy on header creation because this is the more frequent approach:\n // unless flag set, create header.\n if (obj_dict.header !== false) {\n var header_view = new _viz_views2.default.TrackHeaderView({\n model: this,\n id: this.id\n });\n\n this.header_div = header_view.$el;\n this.container_div.append(this.header_div);\n\n // Show icons when users is hovering over track.\n var icons_div = header_view.icons_div;\n this.action_icons = header_view.action_icons;\n this.container_div.hover(function () {\n icons_div.show();\n }, function () {\n icons_div.hide();\n });\n }\n};\n\nDrawable.prototype.action_icons_def = [\n// Hide/show drawable content.\n// FIXME: make this an odict for easier lookup.\n{\n name: \"toggle_icon\",\n title: \"Hide/show content\",\n css_class: \"toggle\",\n on_click_fn: function on_click_fn(drawable) {\n if (drawable.config.get_value(\"content_visible\")) {\n drawable.action_icons.toggle_icon.addClass(\"toggle-expand\").removeClass(\"toggle\");\n drawable.hide_contents();\n drawable.config.set_value(\"content_visible\", false);\n } else {\n drawable.action_icons.toggle_icon.addClass(\"toggle\").removeClass(\"toggle-expand\");\n drawable.config.set_value(\"content_visible\", true);\n drawable.show_contents();\n }\n }\n},\n// Edit settings.\n{\n name: \"settings_icon\",\n title: \"Edit settings\",\n css_class: \"gear\",\n on_click_fn: function on_click_fn(drawable) {\n var view = new _config2.default.ConfigSettingCollectionView({\n collection: drawable.config\n });\n view.render_in_modal(\"Configure Track\");\n }\n},\n// Remove.\n{\n name: \"remove_icon\",\n title: \"Remove\",\n css_class: \"remove-icon\",\n on_click_fn: function on_click_fn(drawable) {\n // Tooltip for remove icon must be deleted when drawable is deleted.\n $(\".tooltip\").remove();\n drawable.remove();\n }\n}];\n\nextend(Drawable.prototype, {\n config_params: [{ key: \"name\", label: \"Name\", type: \"text\", default_value: \"\" }, {\n key: \"content_visible\",\n type: \"bool\",\n default_value: true,\n hidden: true\n }],\n\n config_onchange: function config_onchange() {},\n\n init: function init() {},\n\n changed: function changed() {\n this.view.changed();\n },\n\n can_draw: function can_draw() {\n if (this.enabled && this.config.get_value(\"content_visible\")) {\n return true;\n }\n\n return false;\n },\n\n request_draw: function request_draw() {},\n\n _draw: function _draw(options) {},\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function to_dict() {},\n\n /**\n * Set drawable name.\n */\n set_name: function set_name(new_name) {\n this.old_name = this.config.get_value(\"name\");\n this.config.set_value(\"name\", new_name);\n },\n\n /**\n * Revert track name; currently name can be reverted only once.\n */\n revert_name: function revert_name() {\n if (this.old_name) {\n this.config.set_value(\"name\", this.old_name);\n }\n },\n\n /**\n * Remove drawable (a) from its container and (b) from the HTML.\n */\n remove: function remove() {\n this.changed();\n\n this.container.remove_drawable(this);\n var view = this.view;\n this.container_div.hide(0, function () {\n $(this).remove();\n // HACK: is there a better way to update the view?\n view.update_intro_div();\n });\n },\n\n /**\n * Build drawable's container div; this is the parent div for all drawable's elements.\n */\n build_container_div: function build_container_div() {},\n\n /**\n * Update icons.\n */\n update_icons: function update_icons() {},\n\n /**\n * Hide drawable's contents.\n */\n hide_contents: function hide_contents() {},\n\n /**\n * Show drawable's contents.\n */\n show_contents: function show_contents() {},\n\n /**\n * Returns a shallow copy of all drawables in this drawable.\n */\n get_drawables: function get_drawables() {}\n});\n\n/**\n * A collection of drawable objects.\n */\nvar DrawableCollection = function DrawableCollection(view, container, obj_dict) {\n Drawable.call(this, view, container, obj_dict);\n\n // Attribute init.\n this.obj_type = obj_dict.obj_type;\n this.drawables = [];\n};\n\nextend(DrawableCollection.prototype, Drawable.prototype, {\n /**\n * Unpack and add drawables to the collection.\n */\n unpack_drawables: function unpack_drawables(drawables_array) {\n // Add drawables to collection.\n this.drawables = [];\n var drawable;\n for (var i = 0; i < drawables_array.length; i++) {\n drawable = object_from_template(drawables_array[i], this.view, this);\n this.add_drawable(drawable);\n }\n },\n\n /**\n * Init each drawable in the collection.\n */\n init: function init() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].init();\n }\n },\n\n /**\n * Draw each drawable in the collection.\n */\n _draw: function _draw(options) {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i]._draw(options);\n }\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function to_dict() {\n var dictified_drawables = [];\n for (var i = 0; i < this.drawables.length; i++) {\n dictified_drawables.push(this.drawables[i].to_dict());\n }\n return {\n prefs: this.config.to_key_value_dict(),\n obj_type: this.obj_type,\n drawables: dictified_drawables\n };\n },\n\n /**\n * Add a drawable to the end of the collection.\n */\n add_drawable: function add_drawable(drawable) {\n this.drawables.push(drawable);\n drawable.container = this;\n this.changed();\n },\n\n /**\n * Add a drawable before another drawable.\n */\n add_drawable_before: function add_drawable_before(drawable, other) {\n this.changed();\n var index = this.drawables.indexOf(other);\n if (index !== -1) {\n this.drawables.splice(index, 0, drawable);\n return true;\n }\n return false;\n },\n\n /**\n * Replace one drawable with another.\n */\n replace_drawable: function replace_drawable(old_drawable, new_drawable, update_html) {\n var index = this.drawables.indexOf(old_drawable);\n if (index !== -1) {\n this.drawables[index] = new_drawable;\n if (update_html) {\n old_drawable.container_div.replaceWith(new_drawable.container_div);\n }\n this.changed();\n }\n return index;\n },\n\n /**\n * Remove drawable from this collection.\n */\n remove_drawable: function remove_drawable(drawable) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Found drawable to remove.\n this.drawables.splice(index, 1);\n drawable.container = null;\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Move drawable to another location in collection.\n */\n move_drawable: function move_drawable(drawable, new_position) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Remove from current position:\n this.drawables.splice(index, 1);\n // insert into new position:\n this.drawables.splice(new_position, 0, drawable);\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function get_drawables() {\n return this.drawables;\n },\n\n /**\n * Returns all tracks in collection.\n */\n get_tracks: function get_tracks(track_type) {\n // Initialize queue with copy of drawables array.\n var queue = this.drawables.slice(0);\n\n var tracks = [];\n var drawable;\n while (queue.length !== 0) {\n drawable = queue.shift();\n if (drawable instanceof track_type) {\n tracks.push(drawable);\n } else if (drawable.drawables) {\n queue = queue.concat(drawable.drawables);\n }\n }\n return tracks;\n }\n});\n\n/**\n * A group of drawables that are moveable, visible.\n */\nvar DrawableGroup = function DrawableGroup(view, container, obj_dict) {\n extend(obj_dict, {\n obj_type: \"DrawableGroup\",\n drag_handle_class: \"group-handle\"\n });\n DrawableCollection.call(this, view, container, obj_dict);\n\n // Set up containers/moving for group: register both container_div and content div as container\n // because both are used as containers (container div to recognize container, content_div to\n // store elements). Group can be moved.\n this.content_div = $(\"
\").addClass(\"content-div\").attr(\"id\", \"group_\" + this.id + \"_content_div\").appendTo(this.container_div);\n is_container(this.container_div, this);\n is_container(this.content_div, this);\n moveable(this.container_div, this.drag_handle_class, \".group\", this);\n\n // Set up filters.\n this.filters_manager = new _filters2.default.FiltersManager(this);\n this.header_div.after(this.filters_manager.parent_div);\n\n // HACK: add div to clear floating elements.\n this.filters_manager.parent_div.after($(\"
\"));\n\n // For saving drawables' filter managers when group-level filtering is done:\n this.saved_filters_managers = [];\n\n // Add drawables.\n if (\"drawables\" in obj_dict) {\n this.unpack_drawables(obj_dict.drawables);\n }\n\n // Restore filters.\n if (\"filters\" in obj_dict) {\n // FIXME: Pass collection_dict to DrawableCollection/Drawable will make this easier.\n var old_manager = this.filters_manager;\n this.filters_manager = new _filters2.default.FiltersManager(this, obj_dict.filters);\n old_manager.parent_div.replaceWith(this.filters_manager.parent_div);\n\n if (obj_dict.filters.visible) {\n this.setup_multitrack_filtering();\n }\n }\n};\n\nextend(DrawableGroup.prototype, Drawable.prototype, DrawableCollection.prototype, {\n action_icons_def: [Drawable.prototype.action_icons_def[0], Drawable.prototype.action_icons_def[1],\n // Replace group with composite track.\n {\n name: \"composite_icon\",\n title: \"Show composite track\",\n css_class: \"layers-stack\",\n on_click_fn: function on_click_fn(group) {\n $(\".tooltip\").remove();\n group.show_composite_track();\n }\n },\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function on_click_fn(group) {\n // TODO: update Tooltip text.\n if (group.filters_manager.visible()) {\n // Hiding filters.\n group.filters_manager.clear_filters();\n group._restore_filter_managers();\n // TODO: maintain current filter by restoring and setting saved manager's\n // settings to current/shared manager's settings.\n // TODO: need to restore filter managers when moving drawable outside group.\n } else {\n // Showing filters.\n group.setup_multitrack_filtering();\n group.request_draw({ clear_tile_cache: true });\n }\n group.filters_manager.toggle();\n }\n }, Drawable.prototype.action_icons_def[2]],\n\n build_container_div: function build_container_div() {\n var container_div = $(\"
\").addClass(\"group\").attr(\"id\", \"group_\" + this.id);\n if (this.container) {\n this.container.content_div.append(container_div);\n }\n return container_div;\n },\n\n hide_contents: function hide_contents() {\n this.tiles_div.hide();\n },\n\n show_contents: function show_contents() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n update_icons: function update_icons() {\n //\n // Handle update when there are no tracks.\n //\n var num_drawables = this.drawables.length;\n if (num_drawables === 0) {\n this.action_icons.composite_icon.hide();\n this.action_icons.filters_icon.hide();\n } else if (num_drawables === 1) {\n this.action_icons.composite_icon.toggle(this.drawables[0] instanceof CompositeTrack);\n this.action_icons.filters_icon.hide();\n } else {\n // There are 2 or more tracks.\n\n //\n // Determine if a composite track can be created. Current criteria:\n // (a) all tracks are line tracks;\n // OR\n // FIXME: this is not enabled right now because it has not been well tested:\n // (b) there is a single FeatureTrack.\n //\n\n // All tracks the same?\n var i;\n\n var j;\n var drawable;\n var same_type = true;\n var a_type = this.drawables[0].get_type();\n var num_feature_tracks = 0;\n for (i = 0; i < num_drawables; i++) {\n drawable = this.drawables[i];\n if (drawable.get_type() !== a_type) {\n can_composite = false;\n break;\n }\n if (drawable instanceof FeatureTrack) {\n num_feature_tracks++;\n }\n }\n\n if (same_type && this.drawables[0] instanceof LineTrack) {\n this.action_icons.composite_icon.show();\n } else {\n this.action_icons.composite_icon.hide();\n $(\".tooltip\").remove();\n }\n\n //\n // Set up group-level filtering and update filter icon.\n //\n if (num_feature_tracks > 1 && num_feature_tracks === this.drawables.length) {\n //\n // Find shared filters.\n //\n var shared_filters = {};\n\n var filter;\n\n // Init shared filters with filters from first drawable.\n drawable = this.drawables[0];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n shared_filters[filter.name] = [filter];\n }\n\n // Create lists of shared filters.\n for (i = 1; i < this.drawables.length; i++) {\n drawable = this.drawables[i];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n if (filter.name in shared_filters) {\n shared_filters[filter.name].push(filter);\n }\n }\n }\n\n //\n // Create filters for shared filters manager. Shared filters manager is group's\n // manager.\n //\n this.filters_manager.remove_all();\n var filters;\n var new_filter;\n var min;\n var max;\n for (var filter_name in shared_filters) {\n filters = shared_filters[filter_name];\n if (filters.length === num_feature_tracks) {\n // Add new filter.\n // FIXME: can filter.copy() be used?\n new_filter = new _filters2.default.NumberFilter({\n name: filters[0].name,\n index: filters[0].index\n });\n this.filters_manager.add_filter(new_filter);\n }\n }\n\n // Show/hide icon based on filter availability.\n this.action_icons.filters_icon.toggle(this.filters_manager.filters.length > 0);\n } else {\n this.action_icons.filters_icon.hide();\n }\n }\n },\n\n /**\n * Restore individual track filter managers.\n */\n _restore_filter_managers: function _restore_filter_managers() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].filters_manager = this.saved_filters_managers[i];\n }\n this.saved_filters_managers = [];\n },\n\n /**\n *\n */\n setup_multitrack_filtering: function setup_multitrack_filtering() {\n // Save tracks' managers and set up shared manager.\n if (this.filters_manager.filters.length > 0) {\n // For all tracks, save current filter manager and set manager to shared (this object's) manager.\n this.saved_filters_managers = [];\n for (var i = 0; i < this.drawables.length; i++) {\n var drawable = this.drawables[i];\n this.saved_filters_managers.push(drawable.filters_manager);\n drawable.filters_manager = this.filters_manager;\n }\n\n //TODO: hide filters icons for each drawable?\n }\n this.filters_manager.init_filters();\n },\n\n /**\n * Replace group with a single composite track that includes all group's tracks.\n */\n show_composite_track: function show_composite_track() {\n var composite_track = new CompositeTrack(this.view, this.view, {\n name: this.config.get_value(\"name\"),\n drawables: this.drawables\n });\n var index = this.container.replace_drawable(this, composite_track, true);\n composite_track.request_draw();\n },\n\n add_drawable: function add_drawable(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n this.update_icons();\n },\n\n remove_drawable: function remove_drawable(drawable) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n this.update_icons();\n },\n\n to_dict: function to_dict() {\n // If filters are visible, need to restore original filter managers before converting to dict.\n if (this.filters_manager.visible()) {\n this._restore_filter_managers();\n }\n\n var obj_dict = extend(DrawableCollection.prototype.to_dict.call(this), {\n filters: this.filters_manager.to_dict()\n });\n\n // Setup multi-track filtering again.\n if (this.filters_manager.visible()) {\n this.setup_multitrack_filtering();\n }\n\n return obj_dict;\n },\n\n request_draw: function request_draw(options) {\n _.each(this.drawables, function (d) {\n d.request_draw(options);\n });\n }\n});\n\n/**\n * View object manages a trackster visualization, including tracks and user interactions.\n * Events triggered:\n * navigate: when browser view changes to a new locations\n */\nvar TracksterView = Backbone.View.extend({\n initialize: function initialize(obj_dict) {\n extend(obj_dict, {\n obj_type: \"View\"\n });\n DrawableCollection.call(this, \"View\", obj_dict.container, obj_dict);\n this.chrom = null;\n this.vis_id = obj_dict.vis_id;\n this.dbkey = obj_dict.dbkey;\n this.stand_alone = obj_dict.stand_alone !== undefined ? obj_dict.stand_alone : true;\n this.label_tracks = [];\n this.tracks_to_be_redrawn = [];\n this.max_low = 0;\n this.max_high = 0;\n this.zoom_factor = 3;\n this.min_separation = 30;\n this.has_changes = false;\n // Deferred object that indicates when view's chrom data has been loaded.\n this.load_chroms_deferred = null;\n this.render();\n this.canvas_manager = new _visualization2.default.CanvasManager(this.container.get(0).ownerDocument);\n this.reset();\n\n // Define track configuration\n this.config = _config2.default.ConfigSettingCollection.from_models_and_saved_values([{\n key: \"name\",\n label: \"Name\",\n type: \"text\",\n default_value: \"\"\n }, {\n key: \"a_color\",\n label: \"A Color\",\n type: \"color\",\n default_value: \"#FF0000\"\n }, {\n key: \"c_color\",\n label: \"C Color\",\n type: \"color\",\n default_value: \"#00FF00\"\n }, {\n key: \"g_color\",\n label: \"G Color\",\n type: \"color\",\n default_value: \"#0000FF\"\n }, {\n key: \"t_color\",\n label: \"T Color\",\n type: \"color\",\n default_value: \"#FF00FF\"\n }, {\n key: \"n_color\",\n label: \"N Color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n }], { name: obj_dict.name });\n },\n\n render: function render() {\n // Attribute init.\n this.requested_redraw = false;\n\n // Create DOM elements\n var parent_element = this.container;\n\n var view = this;\n // Top container for things that are fixed at the top\n this.top_container = $(\"
\").addClass(\"top-container\").appendTo(parent_element);\n // Browser content, primary tracks are contained in here\n this.browser_content_div = $(\"
\").addClass(\"content\").appendTo(parent_element);\n // Bottom container for things that are fixed at the bottom\n this.bottom_container = $(\"
\").addClass(\"bottom-container\").appendTo(parent_element);\n // Label track fixed at top\n this.top_labeltrack = $(\"
\").addClass(\"top-labeltrack\").appendTo(this.top_container);\n // Viewport for dragging tracks in center\n this.viewport_container = $(\"
\").addClass(\"viewport-container\").attr(\"id\", \"viewport-container\").appendTo(this.browser_content_div);\n // Alias viewport_container as content_div so that it matches function of DrawableCollection/Group content_div.\n this.content_div = this.viewport_container;\n is_container(this.viewport_container, view);\n // Introduction div shown when there are no tracks.\n this.intro_div = $(\"
\").addClass(\"intro\").appendTo(this.viewport_container);\n var add_tracks_button = $(\"
\").text(\"Add Datasets to Visualization\").addClass(\"action-button\").appendTo(this.intro_div).click(function () {\n _visualization2.default.select_datasets({ dbkey: view.dbkey }, function (tracks) {\n _.each(tracks, function (track) {\n view.add_drawable(object_from_template(track, view, view));\n });\n });\n });\n\n // Navigation at top\n this.nav_container = $(\"
\").addClass(\"trackster-nav-container\").prependTo(this.top_container);\n this.nav = $(\"
\").addClass(\"trackster-nav\").appendTo(this.nav_container);\n\n if (this.stand_alone) {\n this.nav_container.addClass(\"stand-alone\");\n this.nav.addClass(\"stand-alone\");\n }\n\n // Overview (scrollbar and overview plot) at bottom\n this.overview = $(\"
\").addClass(\"overview\").appendTo(this.bottom_container);\n this.overview_viewport = $(\"
\").addClass(\"overview-viewport\").appendTo(this.overview);\n this.overview_close = $(\"\").attr(\"title\", \"Close overview\").addClass(\"icon-button overview-close tooltip\").hide().appendTo(this.overview_viewport);\n this.overview_highlight = $(\"
\").addClass(\"overview-highlight\").hide().appendTo(this.overview_viewport);\n this.overview_box_background = $(\"
\").addClass(\"overview-boxback\").appendTo(this.overview_viewport);\n this.overview_box = $(\"
\").addClass(\"overview-box\").appendTo(this.overview_viewport);\n this.default_overview_height = this.overview_box.height();\n\n this.nav_controls = $(\"
\").addClass(\"nav-controls\").appendTo(this.nav);\n this.chrom_select = $(\"\").addClass(\"nav-input\").hide().bind(\"keyup focusout\", submit_nav).appendTo(this.nav_controls);\n this.location_span = $(\"\").addClass(\"location\").attr(\"title\", \"Click to change location\").tooltip({ placement: \"bottom\" }).appendTo(this.nav_controls);\n this.location_span.click(function () {\n view.location_span.hide();\n view.chrom_select.hide();\n view.nav_input.val(view.chrom + \":\" + view.low + \"-\" + view.high);\n view.nav_input.css(\"display\", \"inline-block\");\n view.nav_input.select();\n view.nav_input.focus();\n // Set up autocomplete for tracks' features.\n view.nav_input.autocomplete({\n source: function source(request, response) {\n // Using current text, query each track and create list of all matching features.\n var all_features = [];\n\n var feature_search_deferreds = $.map(view.get_tracks(FeatureTrack), function (t) {\n return t.data_manager.search_features(request.term).success(function (dataset_features) {\n all_features = all_features.concat(dataset_features);\n });\n });\n\n // When all searching is done, fill autocomplete.\n $.when.apply($, feature_search_deferreds).done(function () {\n response($.map(all_features, function (feature) {\n return {\n label: feature[0],\n value: feature[1]\n };\n }));\n });\n },\n minLength: 2\n });\n });\n if (this.vis_id !== undefined) {\n this.hidden_input = $(\"\").attr(\"type\", \"hidden\").val(this.vis_id).appendTo(this.nav_controls);\n }\n\n this.zo_link = $(\"\").attr(\"id\", \"zoom-out\").attr(\"title\", \"Zoom out\").tooltip({ placement: \"bottom\" }).click(function () {\n view.zoom_out();\n }).appendTo(this.nav_controls);\n this.zi_link = $(\"\").attr(\"id\", \"zoom-in\").attr(\"title\", \"Zoom in\").tooltip({ placement: \"bottom\" }).click(function () {\n view.zoom_in();\n }).appendTo(this.nav_controls);\n\n // Get initial set of chroms.\n this.load_chroms_deferred = this.load_chroms({ low: 0 });\n this.chrom_select.bind(\"change\", function () {\n view.change_chrom(view.chrom_select.val());\n });\n\n /*\n this.browser_content_div.bind(\"mousewheel\", function( e, delta ) {\n if (Math.abs(delta) < 0.5) {\n return;\n }\n if (delta > 0) {\n view.zoom_in(e.pageX, this.viewport_container);\n } else {\n view.zoom_out();\n }\n e.preventDefault();\n });\n */\n\n // Blur tool/filter inputs when user clicks on content div.\n this.browser_content_div.click(function (e) {\n $(this).find(\"input\").trigger(\"blur\");\n });\n\n // Double clicking zooms in\n this.browser_content_div.bind(\"dblclick\", function (e) {\n view.zoom_in(e.pageX, this.viewport_container);\n });\n\n // Dragging the overview box (~ horizontal scroll bar)\n this.overview_box.bind(\"dragstart\", function (e, d) {\n this.current_x = d.offsetX;\n }).bind(\"drag\", function (e, d) {\n var delta = d.offsetX - this.current_x;\n this.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.max_high - view.max_low));\n view.move_delta(-delta_chrom);\n });\n\n this.overview_close.click(function () {\n view.reset_overview();\n });\n\n // Dragging in the viewport scrolls\n this.viewport_container.bind(\"draginit\", function (e, d) {\n // Disable interaction if started in scrollbar (for webkit)\n if (e.clientX > view.viewport_container.width() - 16) {\n return false;\n }\n }).bind(\"dragstart\", function (e, d) {\n d.original_low = view.low;\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n }).bind(\"drag\", function (e, d) {\n var container = $(this);\n var delta = d.offsetX - d.current_x;\n var new_scroll = container.scrollTop() - (e.clientY - d.current_height);\n container.scrollTop(new_scroll);\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.high - view.low));\n view.move_delta(delta_chrom);\n });\n /*\n FIXME: Do not do this for now because it's too jittery. Some kind of gravity approach is\n needed here because moving left/right should be difficult.\n // Also capture mouse wheel for left/right scrolling\n }).bind( 'mousewheel', function( e, d, dx, dy ) {\n // Only handle x axis scrolling; y axis scrolling is\n // handled by the browser when the event bubbles up.\n if (dx) {\n var delta_chrom = Math.round( - dx / view.viewport_container.width() * (view.high - view.low) );\n view.move_delta( delta_chrom );\n }\n });\n */\n\n // Dragging in the top label track allows selecting a region to zoom in on selected region.\n this.top_labeltrack.bind(\"dragstart\", function (e, d) {\n return $(\"
\").addClass(\"zoom-area\").css(\"height\", view.browser_content_div.height() + view.top_labeltrack.height() + 1).appendTo($(this));\n }).bind(\"drag\", function (e, d) {\n $(d.proxy).css({\n left: Math.min(e.pageX, d.startX) - view.container.offset().left,\n width: Math.abs(e.pageX - d.startX)\n });\n\n var min = Math.min(e.pageX, d.startX) - view.container.offset().left;\n\n var max = Math.max(e.pageX, d.startX) - view.container.offset().left;\n\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n view.update_location(Math.round(min / width * span) + view.low, Math.round(max / width * span) + view.low);\n }).bind(\"dragend\", function (e, d) {\n var min = Math.min(e.pageX, d.startX);\n var max = Math.max(e.pageX, d.startX);\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n var old_low = view.low;\n view.low = Math.round(min / width * span) + old_low;\n view.high = Math.round(max / width * span) + old_low;\n $(d.proxy).remove();\n view.request_redraw();\n });\n\n // FIXME: this is still wonky for embedded visualizations.\n /*\n // For vertical alignment, track mouse with simple line.\n var mouse_tracker_div = $('
').addClass('mouse-pos').appendTo(parent_element);\n // Show tracker only when hovering over view.\n parent_element.hover(\n function() {\n mouse_tracker_div.show();\n parent_element.mousemove(function(e) {\n mouse_tracker_div.css({\n // -1 makes line appear next to the mouse w/o preventing mouse actions.\n left: e.pageX - parent_element.offset().left - 1\n });\n });\n },\n function() {\n parent_element.off('mousemove');\n mouse_tracker_div.hide();\n }\n );\n */\n\n this.add_label_track(new LabelTrack(this, { content_div: this.top_labeltrack }));\n\n $(window).bind(\"resize\", function () {\n // Stop previous timer.\n if (this.resize_timer) {\n clearTimeout(this.resize_timer);\n }\n\n // When function activated, resize window and redraw.\n this.resize_timer = setTimeout(function () {\n view.resize_window();\n }, 500);\n });\n $(document).bind(\"redraw\", function () {\n view.redraw();\n });\n\n this.reset();\n $(window).trigger(\"resize\");\n },\n\n get_base_color: function get_base_color(base) {\n return this.config.get_value(base.toLowerCase() + \"_color\") || this.config.get_value(\"n_color\");\n }\n});\n\n// FIXME: need to use this approach to enable inheritance of DrawableCollection functions.\nextend(TracksterView.prototype, DrawableCollection.prototype, {\n changed: function changed() {\n this.has_changes = true;\n },\n\n /** Add or remove intro div depending on view state. */\n update_intro_div: function update_intro_div() {\n this.intro_div.toggle(this.drawables.length === 0);\n },\n\n /**\n * Triggers navigate events as needed. If there is a delay,\n * then event is triggered only after navigation has stopped.\n */\n trigger_navigate: function trigger_navigate(new_chrom, new_low, new_high, delay) {\n // Stop previous timer.\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n if (delay) {\n // To aggregate calls, use timer and only navigate once\n // location has stabilized.\n var self = this;\n this.timer = setTimeout(function () {\n self.trigger(\"navigate\", new_chrom + \":\" + new_low + \"-\" + new_high);\n }, 500);\n } else {\n view.trigger(\"navigate\", new_chrom + \":\" + new_low + \"-\" + new_high);\n }\n },\n\n update_location: function update_location(low, high) {\n this.location_span.text(_util2.default.commatize(low) + \" - \" + _util2.default.commatize(high));\n this.nav_input.val(this.chrom + \":\" + _util2.default.commatize(low) + \"-\" + _util2.default.commatize(high));\n\n // Update location. Only update when there is a valid chrom; when loading vis, there may\n // not be a valid chrom.\n var chrom = this.chrom_select.val();\n if (chrom !== \"\") {\n this.trigger_navigate(chrom, this.low, this.high, true);\n }\n },\n\n /**\n * Load chrom data for the view. Returns a jQuery Deferred.\n */\n // FIXME: instead of loading chrom data, should load and store genome object.\n load_chroms: function load_chroms(url_parms) {\n url_parms.num = MAX_CHROMS_SELECTABLE;\n\n var view = this;\n var chrom_data = $.Deferred();\n $.ajax({\n url: Galaxy.root + \"api/genomes/\" + this.dbkey,\n data: url_parms,\n dataType: \"json\",\n success: function success(result) {\n // Do nothing if could not load chroms.\n if (result.chrom_info.length === 0) {\n return;\n }\n\n // Load chroms.\n if (result.reference) {\n var ref_track = new ReferenceTrack(view);\n view.add_label_track(ref_track);\n view.reference_track = ref_track;\n }\n view.chrom_data = result.chrom_info;\n\n view.chrom_select.html(\"\");\n view.chrom_select.append($(''));\n\n for (var i = 0, len = view.chrom_data.length; i < len; i++) {\n var chrom = view.chrom_data[i].chrom;\n var chrom_option = $(\"\"));\n }\n if (result.next_chroms) {\n view.chrom_select.append($(\"\"));\n }\n view.chrom_start_index = result.start_index;\n\n chrom_data.resolve(result.chrom_info);\n },\n error: function error() {\n alert(\"Could not load chroms for this dbkey: \" + view.dbkey);\n }\n });\n return chrom_data;\n },\n\n change_chrom: function change_chrom(chrom, low, high) {\n var view = this;\n // If chrom data is still loading, wait for it.\n if (!view.chrom_data) {\n view.load_chroms_deferred.then(function () {\n view.change_chrom(chrom, low, high);\n });\n return;\n }\n\n // Don't do anything if chrom is \"None\" (hackish but some browsers already have this set), or null/blank\n if (!chrom || chrom === \"None\") {\n return;\n }\n\n //\n // If user is navigating to previous/next set of chroms, load new chrom set and return.\n //\n if (chrom === \"previous\") {\n view.load_chroms({\n low: this.chrom_start_index - MAX_CHROMS_SELECTABLE\n });\n return;\n }\n if (chrom === \"next\") {\n view.load_chroms({\n low: this.chrom_start_index + MAX_CHROMS_SELECTABLE\n });\n return;\n }\n\n //\n // User is loading a particular chrom. Look first in current set; if not in current set, load new\n // chrom set.\n //\n var found = $.grep(view.chrom_data, function (v, i) {\n return v.chrom === chrom;\n })[0];\n if (found === undefined) {\n // Try to load chrom and then change to chrom.\n view.load_chroms({ chrom: chrom }, function () {\n view.change_chrom(chrom, low, high);\n });\n return;\n } else {\n // Switching to local chrom.\n if (chrom !== view.chrom) {\n view.chrom = chrom;\n view.chrom_select.val(view.chrom);\n view.max_high = found.len - 1; // -1 because we're using 0-based indexing.\n view.reset();\n\n for (var i = 0, len = view.drawables.length; i < len; i++) {\n var drawable = view.drawables[i];\n if (drawable.init) {\n drawable.init();\n }\n }\n if (view.reference_track) {\n view.reference_track.init();\n }\n }\n\n // Resolve low, high.\n if (low === undefined && high === undefined) {\n // Both are undefined, so view is whole chromosome.\n view.low = 0;\n view.high = view.max_high;\n } else {\n // Low and/or high is defined.\n view.low = low !== undefined ? Math.max(low, 0) : 0;\n if (high === undefined) {\n // Center visualization around low.\n // HACK: max resolution is currently 30 bases.\n view.low = Math.max(view.low - 15, 0);\n view.high = view.low + 30;\n } else {\n // High is defined.\n view.high = Math.min(high, view.max_high);\n }\n }\n\n view.request_redraw();\n }\n },\n\n /**\n * Change viewing region to that denoted by string. General format of string is:\n *\n * [ {separator}[-] ]\n *\n * where separator can be whitespace or a colon. Examples:\n *\n * chr22\n * chr1:100-200\n * chr7 89999\n * chr8 90000 990000\n */\n go_to: function go_to(str) {\n // Remove commas.\n str = str.replace(/,/g, \"\");\n\n // Replace colons and hyphens with space for easy parsing.\n str = str.replace(/:|\\-/g, \" \");\n\n // Parse new location.\n var chrom_pos = str.split(/\\s+/);\n\n var chrom = chrom_pos[0];\n var new_low = chrom_pos[1] ? parseInt(chrom_pos[1], 10) : undefined;\n var new_high = chrom_pos[2] ? parseInt(chrom_pos[2], 10) : undefined;\n\n this.change_chrom(chrom, new_low, new_high);\n },\n\n move_fraction: function move_fraction(fraction) {\n var view = this;\n var span = view.high - view.low;\n this.move_delta(fraction * span);\n },\n\n move_delta: function move_delta(delta_chrom) {\n //\n // Update low, high.\n //\n\n var view = this;\n var current_chrom_span = view.high - view.low;\n // Check for left and right boundaries\n if (view.low - delta_chrom < view.max_low) {\n view.low = view.max_low;\n view.high = view.max_low + current_chrom_span;\n } else if (view.high - delta_chrom > view.max_high) {\n view.high = view.max_high;\n view.low = view.max_high - current_chrom_span;\n } else {\n view.high -= delta_chrom;\n view.low -= delta_chrom;\n }\n\n //\n // Redraw view.\n //\n\n // Redraw without requesting more data immediately.\n view.request_redraw({ data_fetch: false });\n\n // Set up timeout to redraw with more data when moving stops.\n if (this.redraw_on_move_fn) {\n clearTimeout(this.redraw_on_move_fn);\n }\n\n this.redraw_on_move_fn = setTimeout(function () {\n view.request_redraw();\n }, 200);\n\n // Navigate.\n var chrom = view.chrom_select.val();\n this.trigger_navigate(chrom, view.low, view.high, true);\n },\n\n /**\n * Add a drawable to the view.\n */\n add_drawable: function add_drawable(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n drawable.init();\n this.changed();\n this.update_intro_div();\n\n // When drawable config changes, mark view as changed. This\n // captures most (all?) state change that needs to be saved.\n var self = this;\n drawable.config.on(\"change\", function () {\n self.changed();\n });\n },\n\n add_label_track: function add_label_track(label_track) {\n label_track.view = this;\n label_track.init();\n this.label_tracks.push(label_track);\n },\n\n /**\n * Remove drawable from the view.\n */\n remove_drawable: function remove_drawable(drawable, hide) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n if (hide) {\n var view = this;\n drawable.container_div.hide(0, function () {\n $(this).remove();\n view.update_intro_div();\n });\n }\n },\n\n reset: function reset() {\n this.low = this.max_low;\n this.high = this.max_high;\n this.viewport_container.find(\".yaxislabel\").remove();\n },\n\n /**\n * Request that view redraw one or more of view's drawables. If drawable is not specified,\n * all drawables are redrawn.\n */\n request_redraw: function request_redraw(options, drawable) {\n var view = this;\n\n var // Either redrawing a single drawable or all view's drawables.\n track_list = drawable ? [drawable] : view.drawables;\n\n // Add/update tracks in track list to redraw list.\n _.each(track_list, function (track) {\n var track_options = _.find(view.tracks_to_be_redrawn, function (to) {\n return to[0] === track;\n });\n\n if (track_options) {\n // Track already in list; update options.\n track_options[1] = options;\n } else {\n // Track not in list yet.\n view.tracks_to_be_redrawn.push([track, options]);\n }\n });\n\n // Set up redraw if it has not been requested since last redraw.\n if (!this.requested_redraw) {\n requestAnimationFrame(function () {\n view._redraw();\n });\n this.requested_redraw = true;\n }\n },\n\n /**\n * Redraws view and tracks.\n * NOTE: this method should never be called directly; request_redraw() should be used so\n * that requestAnimationFrame can manage redrawing.\n */\n _redraw: function _redraw() {\n // TODO: move this code to function that does location setting.\n\n // Clear because requested redraw is being handled now.\n this.requested_redraw = false;\n\n var low = this.low;\n var high = this.high;\n\n if (low < this.max_low) {\n low = this.max_low;\n }\n if (high > this.max_high) {\n high = this.max_high;\n }\n var span = this.high - this.low;\n if (this.high !== 0 && span < this.min_separation) {\n high = low + this.min_separation;\n }\n this.low = Math.floor(low);\n this.high = Math.ceil(high);\n\n this.update_location(this.low, this.high);\n\n // -- Drawing code --\n\n // Resolution is a pixel density.\n this.resolution_px_b = this.viewport_container.width() / (this.high - this.low);\n\n // Overview\n var left_px = this.low / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var width_px = (this.high - this.low) / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var min_width_px = 13;\n\n this.overview_box.css({\n left: left_px,\n width: Math.max(min_width_px, width_px)\n }).show();\n if (width_px < min_width_px) {\n this.overview_box.css(\"left\", left_px - (min_width_px - width_px) / 2);\n }\n if (this.overview_highlight) {\n this.overview_highlight.css({\n left: left_px,\n width: width_px\n });\n }\n\n // Draw data tracks.\n _.each(this.tracks_to_be_redrawn, function (track_options) {\n var track = track_options[0];\n var options = track_options[1];\n if (track) {\n track._draw(options);\n }\n });\n this.tracks_to_be_redrawn = [];\n\n // Draw label tracks.\n _.each(this.label_tracks, function (label_track) {\n label_track._draw();\n });\n },\n\n zoom_in: function zoom_in(point, container) {\n if (this.max_high === 0 || this.high - this.low <= this.min_separation) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span / this.zoom_factor / 2;\n if (point) {\n cur_center = point / this.viewport_container.width() * (this.high - this.low) + this.low;\n }\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n\n this.changed();\n this.request_redraw();\n },\n\n zoom_out: function zoom_out() {\n if (this.max_high === 0) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span * this.zoom_factor / 2;\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n this.changed();\n this.request_redraw();\n },\n\n /** Resize viewport. Use this method if header/footer content has changed in size. */\n resize_viewport: function resize_viewport() {\n this.viewport_container.height(this.container.height() - this.top_container.height() - this.bottom_container.height());\n },\n\n /** Called when window is resized. */\n resize_window: function resize_window() {\n this.resize_viewport();\n this.request_redraw();\n },\n\n /** Show a Drawable in the overview. */\n set_overview: function set_overview(drawable) {\n if (this.overview_drawable) {\n // If drawable to be set as overview is already in overview, do nothing.\n // Otherwise, remove overview.\n if (this.overview_drawable.dataset.id === drawable.dataset.id) {\n return;\n }\n this.overview_viewport.find(\".track\").remove();\n }\n\n // Set new overview.\n var overview_drawable = drawable.copy({\n content_div: this.overview_viewport\n });\n\n var view = this;\n overview_drawable.header_div.hide();\n overview_drawable.is_overview = true;\n view.overview_drawable = overview_drawable;\n this.overview_drawable.postdraw_actions = function () {\n view.overview_highlight.show().height(view.overview_drawable.content_div.height());\n view.overview_viewport.height(view.overview_drawable.content_div.height() + view.overview_box.outerHeight());\n view.overview_close.show();\n view.resize_window();\n };\n view.overview_drawable.request_draw();\n this.changed();\n },\n\n /** Close and reset overview. */\n reset_overview: function reset_overview() {\n // Update UI.\n $(\".tooltip\").remove();\n this.overview_viewport.find(\".track-tile\").remove();\n this.overview_viewport.height(this.default_overview_height);\n this.overview_box.height(this.default_overview_height);\n this.overview_close.hide();\n this.overview_highlight.hide();\n view.resize_window();\n view.overview_drawable = null;\n }\n});\n\n/**\n * Encapsulation of a tool that users can apply to tracks/datasets.\n */\nvar TracksterTool = _tools2.default.Tool.extend({\n defaults: {\n track: null\n },\n\n initialize: function initialize(options) {\n _tools2.default.Tool.prototype.initialize.call(this, options);\n\n // Restore tool visibility from state; default to hidden.\n var hidden = true;\n if (options.tool_state !== undefined && options.tool_state.hidden !== undefined) {\n hidden = options.tool_state.hidden;\n }\n this.set(\"hidden\", hidden);\n\n // FIXME: need to restore tool values from options.tool_state\n\n // HACK: remove some inputs because Trackster does yet not work with them.\n this.remove_inputs([\"data\", \"hidden_data\", \"conditional\"]);\n },\n\n state_dict: function state_dict(options) {\n return _.extend(this.get_inputs_dict(), {\n hidden: !this.is_visible()\n });\n }\n});\n\n/**\n * View renders tool parameter HTML and updates parameter value as it is changed in the HTML.\n */\nvar ToolParameterView = Backbone.View.extend({\n events: {\n \"change :input\": \"update_value\"\n },\n\n render: function render() {\n var param_div = this.$el.addClass(\"param-row\");\n var param = this.model;\n\n // Param label.\n var label_div = $(\"
\").addClass(\"param-label\").text(param.get(\"label\")).appendTo(param_div);\n // Param HTML.\n var html_div = $(\"
\").addClass(\"param-input\").html(param.get(\"html\")).appendTo(param_div);\n // Set initial value.\n html_div.find(\":input\").val(param.get(\"value\"));\n\n // Add to clear floating layout.\n $(\"
\").appendTo(param_div);\n },\n\n update_value: function update_value(update_event) {\n this.model.set_value($(update_event.target).val());\n }\n});\n\n/**\n * View for TracksterTool.\n */\nvar TracksterToolView = Backbone.View.extend({\n initialize: function initialize(options) {\n this.model.on(\"change:hidden\", this.set_visible, this);\n },\n\n /**\n * Render tool UI.\n */\n render: function render() {\n var self = this;\n var tool = this.model;\n var parent_div = this.$el.addClass(\"dynamic-tool\").hide();\n\n // Prevent div events from propogating to other elements.\n parent_div.bind(\"drag\", function (e) {\n e.stopPropagation();\n }).click(function (e) {\n e.stopPropagation();\n }).bind(\"dblclick\", function (e) {\n e.stopPropagation();\n }).keydown(function (e) {\n e.stopPropagation();\n });\n\n // Add name, inputs.\n var name_div = $(\"
\").appendTo(parent_div).text(tool.get(\"name\"));\n tool.get(\"inputs\").each(function (param) {\n // Render parameter.\n var param_view = new ToolParameterView({ model: param });\n param_view.render();\n parent_div.append(param_view.$el);\n });\n\n // Highlight value for inputs for easy replacement.\n parent_div.find(\"input\").click(function () {\n $(this).select();\n });\n\n // Add buttons for running on dataset, region.\n var run_tool_row = $(\"
\").addClass(\"param-row\").appendTo(parent_div);\n var run_on_dataset_button = $(\"\").attr(\"value\", \"Run on complete dataset\").appendTo(run_tool_row);\n var run_on_region_button = $(\"\").attr(\"value\", \"Run on visible region\").appendTo(run_tool_row);\n run_on_region_button.click(function () {\n // Run tool to create new track.\n self.run_on_region();\n });\n run_on_dataset_button.click(function () {\n self.run_on_dataset();\n });\n\n if (tool.is_visible()) {\n this.$el.show();\n }\n },\n\n /**\n * Show or hide tool depending on tool visibility state.\n */\n set_visible: function set_visible() {\n this.$el.toggle(this.model.is_visible());\n },\n\n /**\n * Update tool parameters.\n */\n update_params: function update_params() {\n for (var i = 0; i < this.params.length; i++) {\n this.params[i].update_value();\n }\n },\n\n /**\n * Run tool on dataset. Output is placed in dataset's history and no changes to viz are made.\n */\n run_on_dataset: function run_on_dataset() {\n var tool = this.model;\n this.run(\n // URL params.\n {\n target_dataset_id: this.model.get(\"track\").dataset.id,\n action: \"rerun\",\n tool_id: tool.id\n }, null, function (track_data) {\n Galaxy.modal.show({\n title: tool.get(\"name\") + \" is Running\",\n body: tool.get(\"name\") + \" is running on the complete dataset. Tool outputs are in dataset's history.\",\n buttons: {\n Close: function Close() {\n Galaxy.modal.hide();\n }\n }\n });\n });\n },\n\n /**\n * Run dataset on visible region. This creates a new track and sets the track's contents\n * to the tool's output.\n */\n run_on_region: function run_on_region() {\n //\n // Create track for tool's output immediately to provide user feedback.\n //\n var track = this.model.get(\"track\");\n\n var tool = this.model;\n\n var region = new _visualization2.default.GenomeRegion({\n chrom: track.view.chrom,\n start: track.view.low,\n end: track.view.high\n });\n\n var url_params = {\n target_dataset_id: track.dataset.id,\n action: \"rerun\",\n tool_id: tool.id,\n regions: [region.toJSON()]\n };\n\n var current_track = track;\n\n var // Set name of track to include tool name, parameters, and region used.\n track_name = tool.get(\"name\") + current_track.tool_region_and_parameters_str(region);\n\n var container;\n\n // If track not in a group, create a group for it and add new track to group. If track\n // already in group, add track to group.\n if (current_track.container === view) {\n // Create new group.\n var group = new DrawableGroup(view, view, {\n name: track.config.get_value(\"name\")\n });\n\n // Replace track with group.\n var index = current_track.container.replace_drawable(current_track, group, false);\n\n // Update HTML.\n // FIXME: this is ugly way to replace a track with a group -- make this easier via\n // a Drawable or DrawableCollection function.\n group.container_div.insertBefore(current_track.view.content_div.children()[index]);\n group.add_drawable(current_track);\n current_track.container_div.appendTo(group.content_div);\n container = group;\n } else {\n // Use current group.\n container = current_track.container;\n }\n\n // Create and init new track.\n var new_track = new current_track.constructor(view, container, {\n name: track_name,\n hda_ldda: \"hda\"\n });\n new_track.init_for_tool_data();\n new_track.change_mode(current_track.mode);\n new_track.set_filters_manager(current_track.filters_manager.copy(new_track));\n new_track.update_icons();\n container.add_drawable(new_track);\n new_track.tiles_div.text(\"Starting job.\");\n\n // Run tool.\n this.run(url_params, new_track, function (track_data) {\n new_track.set_dataset(new _data2.default.Dataset(track_data));\n new_track.tiles_div.text(\"Running job.\");\n new_track.init();\n });\n },\n\n /**\n * Run tool using a set of URL params and a success callback.\n */\n run: function run(url_params, new_track, success_callback) {\n // Run tool.\n url_params.inputs = this.model.get_inputs_dict();\n var ss_deferred = new _util2.default.ServerStateDeferred({\n ajax_settings: {\n url: Galaxy.root + \"api/tools\",\n data: JSON.stringify(url_params),\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\"\n },\n interval: 2000,\n success_fn: function success_fn(response) {\n return response !== \"pending\";\n }\n });\n\n // Start with this status message.\n //new_track.container_div.addClass(\"pending\");\n //new_track.content_div.html(DATA_PENDING);\n\n $.when(ss_deferred.go()).then(function (response) {\n if (response === \"no converter\") {\n // No converter available for input datasets, so cannot run tool.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_NOCONVERTER);\n } else if (response.error) {\n // General error.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);\n } else {\n // Job submitted and running.\n success_callback(response);\n }\n });\n }\n});\n\n/**\n * Generates scale values based on filter and feature's value for filter.\n */\nvar FilterScaler = function FilterScaler(filter, default_val) {\n _painters2.default.Scaler.call(this, default_val);\n this.filter = filter;\n};\n\nFilterScaler.prototype.gen_val = function (feature_data) {\n // If filter is not initalized yet, return default val.\n if (this.filter.high === Number.MAX_VALUE || this.filter.low === -Number.MAX_VALUE || this.filter.low === this.filter.high) {\n return this.default_val;\n }\n\n // Scaling value is ratio of (filter's value compared to low) to (complete filter range).\n return (parseFloat(feature_data[this.filter.index]) - this.filter.low) / (this.filter.high - this.filter.low);\n};\n\n/**\n * Tiles drawn by tracks.\n */\nvar Tile = function Tile(track, region, w_scale, canvas, data) {\n this.track = track;\n this.region = region;\n this.low = region.get(\"start\");\n this.high = region.get(\"end\");\n this.w_scale = w_scale;\n this.canvas = canvas;\n // Wrap element in div for background and to provide container for tile-specific elements.\n this.html_elt = $(\"
\").append(canvas);\n this.data = data;\n this.stale = false;\n};\n\n/**\n * Perform pre-display actions.\n */\nTile.prototype.predisplay_actions = function () {};\n\nvar LineTrackTile = function LineTrackTile(track, region, w_scale, canvas, data) {\n Tile.call(this, track, region, w_scale, canvas, data);\n};\nLineTrackTile.prototype.predisplay_actions = function () {};\n\nvar FeatureTrackTile = function FeatureTrackTile(track, region, w_scale, canvas, data, mode, message, all_slotted, feature_mapper, incomplete_features, seq_data) {\n // Attribute init.\n Tile.call(this, track, region, w_scale, canvas, data);\n this.mode = mode;\n this.all_slotted = all_slotted;\n this.feature_mapper = feature_mapper;\n this.has_icons = false;\n this.incomplete_features = incomplete_features;\n // Features drawn based on data from other tiles.\n this.other_tiles_features_drawn = {};\n this.seq_data = seq_data;\n\n // Add message + action icons to tile's html.\n /*\n This does not work right now because a random set of reads is returned by the server.\n When the server can respond with more data systematically, renable these icons.\n if (message) {\n this.has_icons = true;\n var\n tile = this;\n canvas = this.html_elt.children()[0],\n message_div = $(\"
\").addClass(\"tile-message\")\n // -1 to account for border.\n .css({'height': ERROR_PADDING, 'width': canvas.width}).prependTo(this.html_elt);\n // Handle message; only message currently is that only the first N elements are displayed.\n var tile_region = new visualization.GenomeRegion({\n chrom: track.view.chrom,\n start: this.low,\n end: this.high\n }),\n num_features = data.length,\n more_down_icon = $(\"\").addClass(\"icon more-down\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data including depth\")\n .tooltip().appendTo(message_div),\n more_across_icon = $(\"\").addClass(\"icon more-across\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data excluding depth\")\n .tooltip().appendTo(message_div);\n // Set up actions for icons.\n more_down_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.DEEP_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n more_across_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.BROAD_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n }\n */\n};\nextend(FeatureTrackTile.prototype, Tile.prototype);\n\n/**\n * Sets up support for popups.\n */\nFeatureTrackTile.prototype.predisplay_actions = function () {\n /*\n FIXME: use a canvas library to handle popups.\n //\n // Add support for popups.\n //\n var tile = this,\n popups = {};\n // Only show popups in Pack mode.\n if (tile.mode !== \"Pack\") { return; }\n $(this.html_elt).hover(\n function() {\n this.hovered = true;\n $(this).mousemove();\n },\n function() {\n this.hovered = false;\n // Clear popup if it is still hanging around (this is probably not needed)\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n } ).mousemove(function (e) {\n // Use the hover plugin to get a delay before showing popup\n if ( !this.hovered ) { return; }\n // Get feature data for position.\n var\n this_offset = $(this).offset(),\n offsetX = e.pageX - this_offset.left,\n offsetY = e.pageY - this_offset.top,\n feature_data = tile.feature_mapper.get_feature_data(offsetX, offsetY),\n feature_uid = (feature_data ? feature_data[0] : null);\n // Hide visible popup if not over a feature or over a different feature.\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").each(function() {\n if ( !feature_uid ||\n $(this).attr(\"id\") !== feature_uid.toString() ) {\n $(this).remove();\n }\n });\n if (feature_data) {\n // Get or create popup.\n var popup = popups[feature_uid];\n if (!popup) {\n // Create feature's popup element.\n var feature_dict = {\n name: feature_data[3],\n start: feature_data[1],\n end: feature_data[2],\n strand: feature_data[4]\n },\n filters = tile.track.filters_manager.filters,\n filter;\n // Add filter values to feature dict.\n for (var i = 0; i < filters.length; i++) {\n filter = filters[i];\n feature_dict[filter.name] = feature_data[filter.index];\n }\n // Build popup.\n popup = $(\"
\").attr(\"id\", feature_uid).addClass(\"feature-popup\");\n var table = $(\"\"),\n key, value, row;\n for (key in feature_dict) {\n value = feature_dict[key];\n row = $(\"\").appendTo(table);\n $(\" or other required elements.\n\tthead: [ 1, \"
\").appendTo(row).text(key);\n $(\"\").attr(\"align\", \"left\").appendTo(row)\n .text(typeof(value) === 'number' ? round(value, 2) : value);\n }\n popup.append( $(\"
\").append( table ) );\n popups[feature_uid] = popup;\n }\n // Attach popup to track's overlay.\n popup.appendTo( $(this).parents(\".track-content\").children(\".overlay\") );\n // Offsets are within canvas, but popup must be positioned relative to parent element.\n // parseInt strips \"px\" from left, top measurements. +7 so that mouse pointer does not\n // overlap popup.\n var\n popupX = offsetX + parseInt( tile.html_elt.css(\"left\"), 10 ) - popup.width() / 2,\n popupY = offsetY + parseInt( tile.html_elt.css(\"top\"), 10 ) + 7;\n popup.css(\"left\", popupX + \"px\").css(\"top\", popupY + \"px\");\n }\n else if (!e.isPropagationStopped()) {\n // Propogate event to other tiles because overlapping tiles prevent mousemove from being\n // called on tiles under this tile.\n e.stopPropagation();\n $(this).siblings().each(function() {\n $(this).trigger(e);\n });\n }\n })\n .mouseleave(function() {\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n });\n */\n};\n\n/**\n * Tracks are objects can be added to the View.\n *\n * Track object hierarchy:\n * Track\n * -> LabelTrack\n * -> TiledTrack\n * ----> LineTrack\n * ----> ReferenceTrack\n * ----> FeatureTrack\n * -------> ReadTrack\n * ----> VariantTrack\n */\nvar Track = function Track(view, container, obj_dict) {\n // For now, track's container is always view.\n extend(obj_dict, {\n drag_handle_class: \"draghandle\"\n });\n Drawable.call(this, view, container, obj_dict);\n\n //\n // Attribute init.\n //\n\n // Set or create dataset.\n this.dataset = null;\n if (obj_dict.dataset) {\n // Dataset can be a Backbone model or a dict that can be used to create a model.\n this.dataset = obj_dict.dataset instanceof Backbone.Model ? obj_dict.dataset : new _data2.default.Dataset(obj_dict.dataset);\n }\n this.dataset_check_type = \"converted_datasets_state\";\n this.data_url_extra_params = {};\n this.data_query_wait = \"data_query_wait\" in obj_dict ? obj_dict.data_query_wait : DEFAULT_DATA_QUERY_WAIT;\n // A little ugly creating data manager right now due to transition to Backbone-based objects.\n this.data_manager = \"data_manager\" in obj_dict ? obj_dict.data_manager : new _visualization2.default.GenomeDataManager({\n dataset: this.dataset,\n // HACK: simulate 'genome' attributes from view for now.\n // View should eventually use Genome object.\n genome: new _visualization2.default.Genome({\n key: view.dbkey,\n chroms_info: {\n chrom_info: view.chrom_data\n }\n }),\n data_mode_compatible: this.data_and_mode_compatible,\n can_subset: this.can_subset\n });\n\n // Height attributes: min height, max height, and visible height.\n this.min_height_px = 16;\n this.max_height_px = 800;\n this.visible_height_px = this.config.get_value(\"height\");\n\n //\n // Create content div, which is where track is displayed, and add to container if available.\n //\n this.content_div = $(\"
\").appendTo(this.container_div);\n if (this.container) {\n this.container.content_div.append(this.container_div);\n if (!(\"resize\" in obj_dict) || obj_dict.resize) {\n this.add_resize_handle();\n }\n }\n};\n\nextend(Track.prototype, Drawable.prototype, {\n action_icons_def: [\n // Change track mode.\n {\n name: \"mode_icon\",\n title: \"Set display mode\",\n css_class: \"chevron-expand\",\n on_click_fn: function on_click_fn() {}\n },\n // Hide/show content.\n Drawable.prototype.action_icons_def[0],\n // Set track as overview.\n {\n name: \"overview_icon\",\n title: \"Set as overview\",\n css_class: \"application-dock-270\",\n on_click_fn: function on_click_fn(track) {\n track.view.set_overview(track);\n }\n },\n // Edit config.\n Drawable.prototype.action_icons_def[1],\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function on_click_fn(drawable) {\n // TODO: update Tooltip text.\n if (drawable.filters_manager.visible()) {\n drawable.filters_manager.clear_filters();\n } else {\n drawable.filters_manager.init_filters();\n }\n drawable.filters_manager.toggle();\n }\n },\n // Toggle track tool.\n {\n name: \"tools_icon\",\n title: \"Tool\",\n css_class: \"hammer\",\n on_click_fn: function on_click_fn(track) {\n // TODO: update Tooltip text.\n\n track.tool.toggle();\n\n // Update track name.\n if (track.tool.is_visible()) {\n track.set_name(track.config.get_value(\"name\") + track.tool_region_and_parameters_str());\n } else {\n track.revert_name();\n }\n // HACK: name change modifies icon placement, which leaves tooltip incorrectly placed.\n $(\".tooltip\").remove();\n }\n },\n // Go to parameter exploration visualization.\n {\n name: \"param_space_viz_icon\",\n title: \"Tool parameter space visualization\",\n css_class: \"arrow-split\",\n on_click_fn: function on_click_fn(track) {\n var html = \"Tool:\" + track.tool.get(\"name\") + \"
Dataset:\" + track.config.get_value(\"name\") + \"
Region(s): \";\n\n var cancel_fn = function cancel_fn() {\n Galaxy.modal.hide();\n $(window).unbind(\"keypress.check_enter_esc\");\n };\n\n var ok_fn = function ok_fn() {\n var regions_to_use = $('select[name=\"regions\"] option:selected').val(),\n regions,\n view_region = new _visualization2.default.GenomeRegion({\n chrom: view.chrom,\n start: view.low,\n end: view.high\n }),\n bookmarked_regions = _.map($(\".bookmark\"), function (elt) {\n return new _visualization2.default.GenomeRegion({\n from_str: $(elt).children(\".position\").text()\n });\n });\n\n // Get regions for visualization.\n if (regions_to_use === \"cur\") {\n // Use only current region.\n regions = [view_region];\n } else if (regions_to_use === \"bookmarks\") {\n // Use only bookmarks.\n regions = bookmarked_regions;\n } else {\n // Use both current region and bookmarks.\n regions = [view_region].concat(bookmarked_regions);\n }\n\n Galaxy.modal.hide();\n\n // Go to visualization.\n window.location.href = Galaxy.root + \"visualization/sweepster?\" + $.param({\n dataset_id: track.dataset.id,\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n regions: JSON.stringify(new Backbone.Collection(regions).toJSON())\n });\n };\n\n var check_enter_esc = function check_enter_esc(e) {\n if ((e.keyCode || e.which) === 27) {\n // Escape key\n cancel_fn();\n } else if ((e.keyCode || e.which) === 13) {\n // Enter key\n ok_fn();\n }\n };\n\n // show dialog\n Galaxy.modal.show({\n title: \"Visualize tool parameter space and output from different parameter settings?\",\n body: html,\n buttons: { No: cancel_fn, Yes: ok_fn }\n });\n }\n },\n // Remove track.\n Drawable.prototype.action_icons_def[2]],\n\n can_draw: function can_draw() {\n return this.dataset && Drawable.prototype.can_draw.call(this);\n },\n\n build_container_div: function build_container_div() {\n return $(\"
\").addClass(\"track\").attr(\"id\", \"track_\" + this.id);\n },\n\n /**\n * Set track's dataset.\n */\n set_dataset: function set_dataset(dataset) {\n this.dataset = dataset;\n this.data_manager.set(\"dataset\", dataset);\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function on_resize() {\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Add resizing handle to drawable's container_div.\n */\n add_resize_handle: function add_resize_handle() {\n var track = this;\n var in_handle = false;\n var in_drag = false;\n var drag_control = $(\"
\");\n // Control shows on hover over track, stays while dragging\n $(track.container_div).hover(function () {\n if (track.config.get_value(\"content_visible\")) {\n in_handle = true;\n drag_control.show();\n }\n }, function () {\n in_handle = false;\n if (!in_drag) {\n drag_control.hide();\n }\n });\n // Update height and force redraw of current view while dragging,\n // clear cache to force redraw of other tiles.\n drag_control.hide().bind(\"dragstart\", function (e, d) {\n in_drag = true;\n d.original_height = $(track.content_div).height();\n }).bind(\"drag\", function (e, d) {\n var new_height = Math.min(Math.max(d.original_height + d.deltaY, track.min_height_px), track.max_height_px);\n $(track.tiles_div).css(\"height\", new_height);\n track.visible_height_px = track.max_height_px === new_height ? 0 : new_height;\n track.on_resize();\n }).bind(\"dragend\", function (e, d) {\n track.tile_cache.clear();\n in_drag = false;\n if (!in_handle) {\n drag_control.hide();\n }\n track.config.set_value(\"height\", track.visible_height_px);\n track.changed();\n }).appendTo(track.container_div);\n },\n\n /**\n * Hide any elements that are part of the tracks contents area. Should\n * remove as approprite, the track will be redrawn by show_contents.\n */\n hide_contents: function hide_contents() {\n // Hide tiles.\n this.tiles_div.hide();\n // Hide any y axis labels (common to several track types)\n this.container_div.find(\".yaxislabel, .track-resize\").hide();\n },\n\n show_contents: function show_contents() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n this.container_div.find(\".yaxislabel, .track-resize\").show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n /**\n * Returns track type.\n */\n get_type: function get_type() {\n // Order is important: start with most-specific classes and go up the track hierarchy.\n if (this instanceof LabelTrack) {\n return \"LabelTrack\";\n } else if (this instanceof ReferenceTrack) {\n return \"ReferenceTrack\";\n } else if (this instanceof LineTrack) {\n return \"LineTrack\";\n } else if (this instanceof ReadTrack) {\n return \"ReadTrack\";\n } else if (this instanceof VariantTrack) {\n return \"VariantTrack\";\n } else if (this instanceof CompositeTrack) {\n return \"CompositeTrack\";\n } else if (this instanceof FeatureTrack) {\n return \"FeatureTrack\";\n }\n return \"\";\n },\n\n /**\n * Remove visualization content and display message.\n */\n show_message: function show_message(msg_html) {\n this.tiles_div.remove();\n return $(\"\").addClass(\"message\").html(msg_html).appendTo(this.content_div);\n },\n\n /**\n * Initialize and draw the track.\n */\n init: function init(retry) {\n // FIXME: track should have a 'state' attribute that is checked on load; this state attribute should be\n // used in this function to determine what action(s) to take.\n\n var track = this;\n track.enabled = false;\n track.tile_cache.clear();\n track.data_manager.clear();\n /*\n if (!track.content_div.text()) {\n track.content_div.text(DATA_LOADING);\n }\n */\n // Remove old track content (e.g. tiles, messages).\n track.content_div.children().remove();\n track.container_div.removeClass(\"nodata error pending\");\n\n track.tiles_div = $(\"
\").addClass(\"tiles\").appendTo(track.content_div);\n\n //\n // Tracks with no dataset id are handled differently.\n // FIXME: is this really necessary?\n //\n if (!track.dataset.id) {\n return;\n }\n\n // Get dataset state; if state is fine, enable and draw track. Otherwise, show message\n // about track status.\n var init_deferred = $.Deferred();\n\n var params = {\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n data_type: this.dataset_check_type,\n chrom: track.view.chrom,\n retry: retry\n };\n\n $.getJSON(this.dataset.url(), params, function (result) {\n if (!result || result === \"error\" || result.kind === \"error\") {\n // Dataset is in error state.\n track.container_div.addClass(\"error\");\n var msg_elt = track.show_message(DATA_ERROR);\n if (result.message) {\n // Add links to (a) show error and (b) try again.\n msg_elt.append($(\"\").text(\"View error\").click(function () {\n Galaxy.modal.show({\n title: \"Trackster Error\",\n body: \"
\" + result.message + \"
\",\n buttons: {\n Close: function Close() {\n Galaxy.modal.hide();\n }\n }\n });\n }));\n msg_elt.append($(\"\").text(\" \"));\n msg_elt.append($(\"\").text(\"Try again\").click(function () {\n track.init(true);\n }));\n }\n } else if (result === \"no converter\") {\n track.container_div.addClass(\"error\");\n track.show_message(DATA_NOCONVERTER);\n } else if (result === \"no data\" || result.data !== undefined && (result.data === null || result.data.length === 0)) {\n track.container_div.addClass(\"nodata\");\n track.show_message(DATA_NONE);\n } else if (result === \"pending\") {\n track.container_div.addClass(\"pending\");\n track.show_message(DATA_PENDING);\n //$(\"\").attr(\"src\", image_path + \"/yui/rel_interstitial_loading.gif\").appendTo(track.tiles_div);\n setTimeout(function () {\n track.init();\n }, track.data_query_wait);\n } else if (result === \"data\" || result.status === \"data\") {\n if (result.valid_chroms) {\n track.valid_chroms = result.valid_chroms;\n track.update_icons();\n }\n track.tiles_div.text(DATA_OK);\n if (track.view.chrom) {\n track.tiles_div.text(\"\");\n track.tiles_div.css(\"height\", track.visible_height_px + \"px\");\n track.enabled = true;\n // predraw_init may be asynchronous, wait for it and then draw\n $.when.apply($, track.predraw_init()).done(function () {\n init_deferred.resolve();\n track.container_div.removeClass(\"nodata error pending\");\n track.request_draw();\n });\n } else {\n init_deferred.resolve();\n }\n }\n });\n\n this.update_icons();\n return init_deferred;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {\n var track = this;\n return $.getJSON(track.dataset.url(), {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n }, function (result) {\n var data = result.data;\n\n // Tracks may not have stat data either because there is no data or data is not yet ready.\n if (data && data.min !== undefined && data.max !== undefined) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update config, prefs\n track.config.set_default_value(\"min_value\", min_value);\n track.config.set_default_value(\"max_value\", max_value);\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n });\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function get_drawables() {\n return this;\n }\n});\n\nvar TiledTrack = function TiledTrack(view, container, obj_dict) {\n Track.call(this, view, container, obj_dict);\n\n var track = this;\n\n // Make track moveable.\n moveable(track.container_div, track.drag_handle_class, \".group\", track);\n\n // Attribute init.\n this.filters_manager = new _filters2.default.FiltersManager(this, \"filters\" in obj_dict ? obj_dict.filters : null);\n // HACK: set filters manager for data manager.\n // FIXME: prolly need function to set filters and update data_manager reference.\n this.data_manager.set(\"filters_manager\", this.filters_manager);\n this.filters_available = false;\n this.tool = obj_dict.tool ? new TracksterTool(_.extend(obj_dict.tool, {\n track: this,\n tool_state: obj_dict.tool_state\n })) : null;\n this.tile_cache = new _visualization2.default.Cache(TILE_CACHE_SIZE);\n this.left_offset = 0;\n\n if (this.header_div) {\n //\n // Setup filters.\n //\n this.set_filters_manager(this.filters_manager);\n\n //\n // Create dynamic tool view.\n //\n if (this.tool) {\n var tool_view = new TracksterToolView({ model: this.tool });\n tool_view.render();\n this.dynamic_tool_div = tool_view.$el;\n this.header_div.after(this.dynamic_tool_div);\n }\n }\n\n // Add tiles_div, overlay_div to content_div.\n this.tiles_div = $(\"
\").addClass(\"tiles\").appendTo(this.content_div);\n if (!this.config.get_value(\"content_visible\")) {\n this.tiles_div.hide();\n }\n this.overlay_div = $(\"
\").addClass(\"overlay\").appendTo(this.content_div);\n\n if (obj_dict.mode) {\n this.change_mode(obj_dict.mode);\n }\n};\nextend(TiledTrack.prototype, Drawable.prototype, Track.prototype, {\n action_icons_def: Track.prototype.action_icons_def.concat([\n // Show more rows when all features are not slotted.\n {\n name: \"show_more_rows_icon\",\n title: \"To minimize track height, not all feature rows are displayed. Click to display more rows.\",\n css_class: \"exclamation\",\n on_click_fn: function on_click_fn(track) {\n $(\".tooltip\").remove();\n track.slotters[track.view.resolution_px_b].max_rows *= 2;\n track.request_draw({ clear_tile_cache: true });\n },\n hide: true\n }]),\n\n /**\n * Returns a copy of the track. The copy uses the same data manager so that the tracks can share data.\n */\n copy: function copy(container) {\n // Create copy.\n var obj_dict = this.to_dict();\n extend(obj_dict, {\n data_manager: this.data_manager\n });\n var new_track = new this.constructor(this.view, container, obj_dict);\n // Misc. init and return.\n new_track.change_mode(this.mode);\n new_track.enabled = this.enabled;\n return new_track;\n },\n\n /**\n * Set filters manager + HTML elements.\n */\n set_filters_manager: function set_filters_manager(filters_manager) {\n this.filters_manager = filters_manager;\n this.header_div.after(this.filters_manager.parent_div);\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function to_dict() {\n return {\n track_type: this.get_type(),\n dataset: {\n id: this.dataset.id,\n hda_ldda: this.dataset.get(\"hda_ldda\")\n },\n prefs: this.config.to_key_value_dict(),\n mode: this.mode,\n filters: this.filters_manager.to_dict(),\n tool_state: this.tool ? this.tool.state_dict() : {}\n };\n },\n\n /**\n * Set track bounds for current chromosome.\n */\n set_min_max: function set_min_max() {\n var track = this;\n\n return $.getJSON(track.dataset.url(), {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n }, function (result) {\n var data = result.data;\n if (isNaN(parseFloat(track.config.get_value(\"min_value\"))) || isNaN(parseFloat(track.config.get_value(\"max_value\")))) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update the prefs\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n });\n },\n\n /**\n * Change track's mode.\n */\n change_mode: function change_mode(new_mode) {\n var track = this;\n // TODO: is it necessary to store the mode in two places (.mode and track_config)?\n track.mode = new_mode;\n track.config.set_value(\"mode\", new_mode);\n // FIXME: find a better way to get Auto data w/o clearing cache; using mode in the\n // data manager would work if Auto data were checked for compatibility when a specific\n // mode is chosen.\n if (new_mode === \"Auto\") {\n this.data_manager.clear();\n }\n track.request_draw({ clear_tile_cache: true });\n this.action_icons.mode_icon.attr(\"title\", \"Set display mode (now: \" + track.mode + \")\");\n return track;\n },\n\n /**\n * Update track's buttons.\n */\n update_icons: function update_icons() {\n var track = this;\n\n //\n // Show/hide filter icon.\n //\n track.action_icons.filters_icon.toggle(track.filters_available);\n\n //\n // Show/hide tool icons.\n //\n track.action_icons.tools_icon.toggle(track.tool !== null);\n track.action_icons.param_space_viz_icon.toggle(track.tool !== null);\n },\n\n /**\n * Generate a key for the tile cache.\n * TODO: create a TileCache object (like DataCache) and generate key internally.\n */\n _gen_tile_cache_key: function _gen_tile_cache_key(w_scale, tile_region) {\n return w_scale + \"_\" + tile_region;\n },\n\n /**\n * Request that track be drawn.\n */\n request_draw: function request_draw(options) {\n if (options && options.clear_tile_cache) {\n this.tile_cache.clear();\n }\n this.view.request_redraw(options, this);\n },\n\n /**\n * Actions to be taken before drawing.\n */\n before_draw: function before_draw() {\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n },\n\n /**\n * Draw track. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -clear_after: clear old tiles after drawing new tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n *\n * NOTE: this function should never be called directly; use request_draw() so that drawing\n * management can be used.\n */\n _draw: function _draw(options) {\n if (!this.can_draw()) {\n return;\n }\n\n var clear_after = options && options.clear_after;\n var low = this.view.low;\n var high = this.view.high;\n var range = high - low;\n var width = this.view.container.width();\n var w_scale = this.view.resolution_px_b;\n var resolution = 1 / w_scale;\n\n // For overview, adjust high, low, resolution, and w_scale.\n if (this.is_overview) {\n low = this.view.max_low;\n high = this.view.max_high;\n w_scale = width / (view.max_high - view.max_low);\n resolution = 1 / w_scale;\n }\n\n this.before_draw();\n\n //\n // Method for moving and/or removing tiles:\n // (a) mark all elements for removal using class 'remove'\n // (b) during tile drawing/placement, remove class for elements that are moved;\n // this occurs in show_tile()\n // (c) after drawing tiles, remove elements still marked for removal\n // (i.e. that still have class 'remove').\n //\n\n // Step (a) for (re)moving tiles.\n this.tiles_div.children().addClass(\"remove\");\n\n var // Tile width in bases.\n tile_width = Math.floor(TILE_SIZE * resolution);\n\n var // Index of first tile that overlaps visible region.\n tile_index = Math.floor(low / tile_width);\n\n var tile_region;\n var tile_promise;\n var tile_promises = [];\n var tiles = [];\n // Draw tiles.\n while (tile_index * tile_width < high) {\n // Get tile region.\n tile_region = new _visualization2.default.GenomeRegion({\n chrom: this.view.chrom,\n start: tile_index * tile_width,\n // Tile high cannot be larger than view.max_high, which the chromosome length.\n end: Math.min((tile_index + 1) * tile_width, this.view.max_high)\n });\n tile_promise = this.draw_helper(tile_region, w_scale, options);\n tile_promises.push(tile_promise);\n $.when(tile_promise).then(function (tile) {\n tiles.push(tile);\n });\n\n // Go to next tile.\n tile_index += 1;\n }\n\n // Step (c) for (re)moving tiles when clear_after is false.\n if (!clear_after) {\n this.tiles_div.children(\".remove\").removeClass(\"remove\").remove();\n }\n\n // When all tiles are drawn, call post-draw actions.\n var track = this;\n $.when.apply($, tile_promises).then(function () {\n // Step (c) for (re)moving tiles when clear_after is true:\n track.tiles_div.children(\".remove\").remove();\n\n // Only do postdraw actions for tiles; instances where tiles may not be drawn include:\n // (a) ReferenceTrack without sufficient resolution;\n // (b) data_fetch = false.\n tiles = _.filter(tiles, function (t) {\n return t !== null;\n });\n if (tiles.length !== 0) {\n track.postdraw_actions(tiles, width, w_scale, clear_after);\n }\n });\n },\n\n /**\n * Add a maximum/minimum label to track.\n */\n _add_yaxis_label: function _add_yaxis_label(type, on_change) {\n var track = this;\n var css_class = type === \"max\" ? \"top\" : \"bottom\";\n var text = type === \"max\" ? \"max\" : \"min\";\n var pref_name = type === \"max\" ? \"max_value\" : \"min_value\";\n var label = this.container_div.find(\".yaxislabel.\" + css_class);\n var value = round(track.config.get_value(pref_name), 1);\n\n // Default action for on_change is to redraw track.\n on_change = on_change || function () {\n track.request_draw({ clear_tile_cache: true });\n };\n\n if (label.length !== 0) {\n // Label already exists, so update value.\n label.text(value);\n } else {\n // Add label.\n label = $(\"
\").text(value).make_text_editable({\n num_cols: 12,\n on_finish: function on_finish(new_val) {\n $(\".tooltip\").remove();\n track.config.set_value(pref_name, round(new_val, 1));\n on_change();\n },\n help_text: \"Set \" + text + \" value\"\n }).addClass(\"yaxislabel \" + css_class).css(\"color\", this.config.get_value(\"label_color\"));\n this.container_div.prepend(label);\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n var line_track_tiles = _.filter(tiles, function (tile) {\n return tile instanceof LineTrackTile;\n });\n\n //\n // Take different actions depending on whether there are LineTrack/Coverage tiles.\n //\n\n if (line_track_tiles.length > 0) {\n // -- Drawing in Coverage mode. --\n\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n var track = this;\n _.each(tiles, function (tile) {\n if (!(tile instanceof LineTrackTile)) {\n tile.html_elt.remove();\n track.draw_helper(tile.region, w_scale, {\n force: true,\n mode: \"Coverage\"\n });\n }\n });\n\n track._add_yaxis_label(\"max\");\n } else {\n // -- Drawing in non-Coverage mode. --\n\n // Remove Y-axis labels because there are no line track tiles.\n this.container_div.find(\".yaxislabel\").remove();\n\n //\n // If some tiles have icons, set padding of tiles without icons so features and rows align.\n //\n var icons_present = _.find(tiles, function (tile) {\n return tile.has_icons;\n });\n\n if (icons_present) {\n _.each(tiles, function (tile) {\n if (!tile.has_icons) {\n // Need to align with other tile(s) that have icons.\n tile.html_elt.css(\"padding-top\", ERROR_PADDING);\n }\n });\n }\n }\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function get_mode(data) {\n return this.mode;\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function update_auto_mode(display_mode) {\n // FIXME: needs to be implemented.\n },\n\n /**\n * Returns a list of drawables to draw. Defaults to current track.\n */\n _get_drawables: function _get_drawables() {\n return [this];\n },\n\n /**\n * Retrieves from cache, draws, or sets up drawing for a single tile. Returns either a Tile object or a\n * jQuery.Deferred object that is fulfilled when tile can be drawn again. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n */\n draw_helper: function draw_helper(region, w_scale, options) {\n // Init options if necessary to avoid having to check if options defined.\n if (!options) {\n options = {};\n }\n\n var force = options.force;\n var mode = options.mode || this.mode;\n var resolution = 1 / w_scale;\n\n var // Useful vars.\n track = this;\n\n var drawables = this._get_drawables();\n var key = this._gen_tile_cache_key(w_scale, region);\n\n var is_tile = function is_tile(o) {\n return o && \"track\" in o;\n };\n\n // Check tile cache, if found show existing tile in correct position\n var tile = force ? undefined : track.tile_cache.get_elt(key);\n if (tile) {\n if (is_tile(tile)) {\n track.show_tile(tile, w_scale);\n }\n return tile;\n }\n\n // If not fetching data, nothing more to do because data is needed to draw tile.\n if (options.data_fetch === false) {\n return null;\n }\n\n // Function that returns data/Deferreds needed to draw tile.\n var get_tile_data = function get_tile_data() {\n // HACK: if display mode (mode) is in continuous data modes, data mode must be coverage to get coverage data.\n var data_mode = _.find(CONTINUOUS_DATA_MODES, function (m) {\n return m === mode;\n }) ? \"Coverage\" : mode;\n\n // Map drawable object to data needed for drawing.\n var tile_data = _.map(drawables, function (d // Get the track data/promise.\n ) {\n return d.data_manager.get_data(region, data_mode, resolution, track.data_url_extra_params);\n });\n\n // Get reference data/promise.\n if (view.reference_track) {\n tile_data.push(view.reference_track.data_manager.get_data(region, mode, resolution, view.reference_track.data_url_extra_params));\n }\n\n return tile_data;\n };\n\n //\n // When data is available, draw tile.\n //\n var tile_drawn = $.Deferred();\n track.tile_cache.set_elt(key, tile_drawn);\n $.when.apply($, get_tile_data()).then(function () {\n var tile_data = get_tile_data();\n var tracks_data = tile_data;\n var seq_data;\n\n // Deferreds may show up here if trying to fetch a subset of data from a superset data chunk\n // that cannot be subsetted. This may occur if the superset has a message. If there is a\n // Deferred, try again from the top. NOTE: this condition could (should?) be handled by the\n // GenomeDataManager in visualization module.\n if (_.find(tile_data, function (d) {\n return _util2.default.is_deferred(d);\n })) {\n track.tile_cache.set_elt(key, undefined);\n $.when(track.draw_helper(region, w_scale, options)).then(function (tile) {\n tile_drawn.resolve(tile);\n });\n return;\n }\n\n // If sequence data is available, subset to get only data in region.\n if (view.reference_track) {\n seq_data = view.reference_track.data_manager.subset_entry(tile_data.pop(), region);\n }\n\n // Get drawing modes, heights for all tracks.\n var drawing_modes = [];\n\n var drawing_heights = [];\n\n _.each(drawables, function (d, i) {\n var mode = d.mode;\n var data = tracks_data[i];\n if (mode === \"Auto\") {\n mode = d.get_mode(data);\n d.update_auto_mode(mode);\n }\n drawing_modes.push(mode);\n drawing_heights.push(d.get_canvas_height(data, mode, w_scale, width));\n });\n\n var canvas = track.view.canvas_manager.new_canvas();\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var all_data_index = 0;\n\n var width = Math.ceil((tile_high - tile_low) * w_scale) + track.left_offset;\n\n var height = _.max(drawing_heights);\n var tile;\n\n //\n // Draw all tracks on tile.\n //\n canvas.width = width;\n // Height is specified in options or is the height found above.\n canvas.height = options.height || height;\n var ctx = canvas.getContext(\"2d\");\n ctx.translate(track.left_offset, 0);\n if (drawables.length > 1) {\n ctx.globalAlpha = 0.5;\n ctx.globalCompositeOperation = \"source-over\";\n }\n _.each(drawables, function (d, i) {\n tile = d.draw_tile(tracks_data[i], ctx, drawing_modes[i], region, w_scale, seq_data);\n });\n\n // Don't cache, show if no tile.\n if (tile !== undefined) {\n track.tile_cache.set_elt(key, tile);\n track.show_tile(tile, w_scale);\n }\n\n tile_drawn.resolve(tile);\n });\n\n return tile_drawn;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function get_canvas_height(result, mode, w_scale, canvas_width) {\n return this.visible_height_px;\n },\n\n /**\n * Draw line (bigwig) data onto tile.\n */\n _draw_line_track_tile: function _draw_line_track_tile(result, ctx, mode, region, w_scale) {\n // Set min/max if they are not already set.\n // FIXME: checking for different null/undefined/0 is messy; it would be nice to\n // standardize this.\n if ([undefined, null].indexOf(this.config.get_value(\"min_value\")) !== -1) {\n this.config.set_value(\"min_value\", 0);\n }\n if ([undefined, null, 0].indexOf(this.config.get_value(\"max_value\")) !== -1) {\n this.config.set_value(\"max_value\", _.max(_.map(result.data, function (d) {\n return d[1];\n })) || 0);\n }\n\n var canvas = ctx.canvas;\n\n var painter = new _painters2.default.LinePainter(result.data, region.get(\"start\"), region.get(\"end\"), this.config.to_key_value_dict(), mode);\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new LineTrackTile(this, region, w_scale, canvas, result.data);\n },\n\n /**\n * Draw a track tile.\n * @param result result from server\n * @param ctx canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale, ref_seq) {},\n\n /**\n * Show track tile and perform associated actions. Showing tile may actually move\n * an existing tile rather than reshowing it.\n */\n show_tile: function show_tile(tile, w_scale) {\n var track = this;\n var tile_element = tile.html_elt;\n\n // -- Show/move tile element. --\n\n tile.predisplay_actions();\n\n // Position tile element based on current viewport.\n var left = Math.round((tile.low - (this.is_overview ? this.view.max_low : this.view.low)) * w_scale);\n if (this.left_offset) {\n left -= this.left_offset;\n }\n tile_element.css(\"left\", left);\n\n if (tile_element.hasClass(\"remove\")) {\n // Step (b) for (re)moving tiles. See _draw() function for description of algorithm\n // for removing tiles.\n tile_element.removeClass(\"remove\");\n } else {\n // Showing new tile.\n this.tiles_div.append(tile_element);\n }\n\n // -- Update track, tile heights based on new tile. --\n\n tile_element.css(\"height\", \"auto\");\n\n // Update max height based on current tile's height.\n // BUG/HACK: tile_element.height() returns a height that is always 2 pixels too big, so\n // -2 to get the correct height.\n this.max_height_px = Math.max(this.max_height_px, tile_element.height() - 2);\n\n // Update height for all tiles based on max height.\n tile_element.parent().children().css(\"height\", this.max_height_px + \"px\");\n\n // Update track height based on max height and visible height.\n var track_height = this.max_height_px;\n if (this.visible_height_px !== 0) {\n track_height = Math.min(this.max_height_px, this.visible_height_px);\n }\n this.tiles_div.css(\"height\", track_height + \"px\");\n },\n\n /**\n * Utility function that creates a label string describing the region and parameters of a track's tool.\n */\n tool_region_and_parameters_str: function tool_region_and_parameters_str(region) {\n var track = this;\n var region_str = region !== undefined ? region.toString() : \"all\";\n var param_str = _.values(track.tool.get_inputs_dict()).join(\", \");\n return \" - region=[\" + region_str + \"], parameters=[\" + param_str + \"]\";\n },\n\n /**\n * Returns true if data is compatible with a given mode.\n */\n data_and_mode_compatible: function data_and_mode_compatible(data, mode) {\n // Only handle modes that user can set.\n if (mode === \"Auto\") {\n return true;\n } else if (mode === \"Coverage\") {\n // Histogram mode requires bigwig data.\n return data.dataset_type === \"bigwig\";\n } else if (data.dataset_type === \"bigwig\" || data.extra_info === \"no_detail\") {\n // All other modes--Dense, Squish, Pack--require data + details.\n return false;\n } else {\n return true;\n }\n },\n\n /**\n * Returns true if entry can be subsetted.\n */\n can_subset: function can_subset(entry) {\n // Do not subset entries with a message or data with no detail.\n if (entry.message || entry.extra_info === \"no_detail\") {\n return false;\n } else if (entry.dataset_type === \"bigwig\") {\n // Subset only if data is single-bp resolution.\n return entry.data[1][0] - entry.data[0][0] === 1;\n }\n\n return true;\n },\n\n /**\n * Set up track to receive tool data.\n */\n init_for_tool_data: function init_for_tool_data() {\n // Set up track to fetch raw data rather than converted data.\n this.data_manager.set(\"data_type\", \"raw_data\");\n this.data_query_wait = 1000;\n this.dataset_check_type = \"state\";\n\n // FIXME: this is optional and is disabled for now because it creates\n // additional converter jobs without a clear benefit because indexing\n // such a small dataset provides little benefit.\n //\n // Set up one-time, post-draw to clear tool execution settings.\n //\n /*\n this.normal_postdraw_actions = this.postdraw_actions;\n this.postdraw_actions = function(tiles, width, w_scale, clear_after) {\n var self = this;\n // Do normal postdraw init.\n self.normal_postdraw_actions(tiles, width, w_scale, clear_after);\n // Tool-execution specific post-draw init:\n // Reset dataset check, wait time.\n self.dataset_check_type = 'converted_datasets_state';\n self.data_query_wait = DEFAULT_DATA_QUERY_WAIT;\n // Reset data URL when dataset indexing has completed/when not pending.\n var ss_deferred = new util.ServerStateDeferred({\n url: self.dataset_state_url,\n url_params: {dataset_id : self.dataset.id, hda_ldda: self.dataset.get('hda_ldda')},\n interval: self.data_query_wait,\n // Set up deferred to check dataset state until it is not pending.\n success_fn: function(result) { return result !== \"pending\"; }\n });\n $.when(ss_deferred.go()).then(function() {\n // Dataset is indexed, so use converted data.\n self.data_manager.set('data_type', 'data');\n });\n // Reset post-draw actions function.\n self.postdraw_actions = self.normal_postdraw_actions;\n };\n */\n }\n});\n\nvar LabelTrack = function LabelTrack(view, container) {\n Track.call(this, view, container, {\n resize: false,\n header: false\n });\n this.container_div.addClass(\"label-track\");\n};\nextend(LabelTrack.prototype, Track.prototype, {\n init: function init() {\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {},\n\n _draw: function _draw(options) {\n var view = this.view;\n var range = view.high - view.low;\n\n var tickDistance = Math.floor(Math.pow(10, Math.floor(Math.log(range) / Math.log(10))));\n\n var position = Math.floor(view.low / tickDistance) * tickDistance;\n var width = this.view.container.width();\n var new_div = $(\"
\").addClass(\"label-container\");\n while (position < view.high) {\n var screenPosition = Math.floor((position - view.low) / range * width);\n new_div.append($(\"
\").addClass(\"pos-label\").text(_util2.default.commatize(position)).css({\n left: screenPosition\n }));\n position += tickDistance;\n }\n this.content_div.children(\":first\").remove();\n this.content_div.append(new_div);\n }\n});\n\n// FIXME: Composite tracks have code for showing composite tracks with line tracks and\n// composite tracks with line + feature tracks. It's probably best if different classes\n// are created for each type of composite track.\n\n/**\n * A tiled track composed of multiple other tracks. Composite tracks only work with\n * bigwig data for now.\n */\nvar CompositeTrack = function CompositeTrack(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n\n // Init drawables; each drawable is a copy so that config/preferences\n // are independent of each other. Also init left offset.\n this.drawables = [];\n if (\"drawables\" in obj_dict) {\n var drawable;\n for (var i = 0; i < obj_dict.drawables.length; i++) {\n drawable = obj_dict.drawables[i];\n this.drawables[i] = object_from_template(drawable, view, null);\n\n // Track's left offset is the max of all tracks.\n if (drawable.left_offset > this.left_offset) {\n this.left_offset = drawable.left_offset;\n }\n }\n this.enabled = true;\n }\n\n // Set all feature tracks to use Coverage mode.\n _.each(this.drawables, function (d) {\n if (d instanceof FeatureTrack || d instanceof ReadTrack) {\n d.change_mode(\"Coverage\");\n }\n });\n\n this.update_icons();\n\n // HACK: needed for saving object for now. Need to generalize get_type() to all Drawables and use\n // that for object type.\n this.obj_type = \"CompositeTrack\";\n};\n\nextend(CompositeTrack.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }]);\n },\n\n action_icons_def: [\n // Create composite track from group's tracks.\n {\n name: \"composite_icon\",\n title: \"Show individual tracks\",\n css_class: \"layers-stack\",\n on_click_fn: function on_click_fn(track) {\n $(\".tooltip\").remove();\n track.show_group();\n }\n }].concat(TiledTrack.prototype.action_icons_def),\n\n // HACK: CompositeTrack should inherit from DrawableCollection as well.\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: DrawableCollection.prototype.to_dict,\n\n add_drawable: DrawableCollection.prototype.add_drawable,\n\n unpack_drawables: DrawableCollection.prototype.unpack_drawables,\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function on_resize() {\n // Propogate visible height to other tracks.\n var visible_height = this.visible_height_px;\n _.each(this.drawables, function (d) {\n d.visible_height_px = visible_height;\n });\n Track.prototype.on_resize.call(this);\n },\n\n /**\n * Change mode for all tracks.\n */\n change_mode: function change_mode(new_mode) {\n TiledTrack.prototype.change_mode.call(this, new_mode);\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].change_mode(new_mode);\n }\n },\n\n /**\n * Initialize component tracks and draw composite track when all components are initialized.\n */\n init: function init() {\n // Init components.\n var init_deferreds = [];\n for (var i = 0; i < this.drawables.length; i++) {\n init_deferreds.push(this.drawables[i].init());\n }\n\n // Draw composite when all tracks available.\n var track = this;\n $.when.apply($, init_deferreds).then(function () {\n track.enabled = true;\n track.request_draw();\n });\n },\n\n update_icons: function update_icons() {\n // For now, hide filters and tool.\n this.action_icons.filters_icon.hide();\n this.action_icons.tools_icon.hide();\n this.action_icons.param_space_viz_icon.hide();\n },\n\n can_draw: Drawable.prototype.can_draw,\n\n _get_drawables: function _get_drawables() {\n return this.drawables;\n },\n\n /**\n * Replace this track with group that includes individual tracks.\n */\n show_group: function show_group() {\n // Create group with individual tracks.\n var group = new DrawableGroup(this.view, this.container, {\n name: this.config.get_value(\"name\")\n });\n\n var track;\n for (var i = 0; i < this.drawables.length; i++) {\n track = this.drawables[i];\n track.update_icons();\n group.add_drawable(track);\n track.container = group;\n group.content_div.append(track.container_div);\n }\n\n // Replace track with group.\n var index = this.container.replace_drawable(this, group, true);\n group.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions taken before drawing.\n */\n before_draw: function before_draw() {\n // FIXME: this is needed only if there are feature tracks in the composite track.\n // TiledTrack.prototype.before_draw.call(this);\n\n //\n // Set min, max for tracks to be largest min, max.\n //\n\n // Get smallest min, biggest max.\n var min = _.min(_.map(this.drawables, function (d) {\n return d.config.get_value(\"min_value\");\n }));\n\n var max = _.max(_.map(this.drawables, function (d) {\n return d.config.get_value(\"max_value\");\n }));\n\n this.config.set_value(\"min_value\", min);\n this.config.set_value(\"max_value\", max);\n\n // Set all tracks to smallest min, biggest max.\n _.each(this.drawables, function (d) {\n d.config.set_value(\"min_value\", min);\n d.config.set_value(\"max_value\", max);\n });\n },\n\n /**\n * Update minimum, maximum for component tracks.\n */\n update_all_min_max: function update_all_min_max() {\n var track = this;\n var min_value = this.config.get_value(\"min_value\");\n var max_value = this.config.get_value(\"max_value\");\n _.each(this.drawables, function (d) {\n d.config.set_value(\"min_value\", min_value);\n d.config.set_value(\"max_value\", max_value);\n });\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n // All tiles must be the same height in order to draw LineTracks, so redraw tiles as needed.\n var max_height = -1;\n\n var i;\n for (i = 0; i < tiles.length; i++) {\n var height = tiles[i].html_elt.find(\"canvas\").height();\n if (height > max_height) {\n max_height = height;\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.html_elt.find(\"canvas\").height() !== max_height) {\n this.draw_helper(tile.region, w_scale, {\n force: true,\n height: max_height\n });\n tile.html_elt.remove();\n }\n }\n\n // Wrap function so that it can be called without object reference.\n var track = this;\n\n var t = function t() {\n track.update_all_min_max();\n };\n\n // Add min, max labels.\n this._add_yaxis_label(\"min\", t);\n this._add_yaxis_label(\"max\", t);\n }\n});\n\n/**\n * Displays reference genome data.\n */\nvar ReferenceTrack = function ReferenceTrack(view) {\n TiledTrack.call(this, view, { content_div: view.top_labeltrack }, { resize: false, header: false });\n\n // Use offset to ensure that bases at tile edges are drawn.\n this.left_offset = view.canvas_manager.char_width_px;\n this.container_div.addClass(\"reference-track\");\n this.data_url = Galaxy.root + \"api/genomes/\" + this.view.dbkey;\n this.data_url_extra_params = { reference: true };\n this.data_manager = new _visualization2.default.GenomeReferenceDataManager({\n data_url: this.data_url,\n can_subset: this.can_subset\n });\n this.hide_contents();\n};\nextend(ReferenceTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"height\",\n type: \"int\",\n default_value: 13,\n hidden: true\n }]);\n },\n\n init: function init() {\n this.data_manager.clear();\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {},\n\n can_draw: Drawable.prototype.can_draw,\n\n /**\n * Draws and shows tile if reference data can be displayed; otherwise track is hidden.\n */\n draw_helper: function draw_helper(region, w_scale, options) {\n var cur_visible = this.tiles_div.is(\":visible\");\n var new_visible;\n var tile = null;\n if (w_scale > this.view.canvas_manager.char_width_px) {\n this.tiles_div.show();\n new_visible = true;\n tile = TiledTrack.prototype.draw_helper.call(this, region, w_scale, options);\n } else {\n new_visible = false;\n this.tiles_div.hide();\n }\n\n // NOTE: viewport resizing conceptually belongs in postdraw_actions(), but currently\n // postdraw_actions is not called when reference track not shown due to no tiles. If\n // it is moved to postdraw_actions, resize must be called each time because cannot\n // easily detect showing/hiding.\n\n // If showing or hiding reference track, resize viewport.\n if (cur_visible !== new_visible) {\n this.view.resize_viewport();\n }\n\n return tile;\n },\n\n can_subset: function can_subset(entry) {\n return true;\n },\n\n /**\n * Draw ReferenceTrack tile.\n */\n draw_tile: function draw_tile(data, ctx, mode, region, w_scale) {\n // Try to subset data.\n var subset = this.data_manager.subset_entry(data, region);\n\n var seq_data = subset.data;\n\n // Draw sequence data.\n var canvas = ctx.canvas;\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"center\";\n for (var c = 0, str_len = seq_data.length; c < str_len; c++) {\n ctx.fillStyle = this.view.get_base_color(seq_data[c]);\n ctx.fillText(seq_data[c], Math.floor(c * w_scale), 10);\n }\n return new Tile(this, region, w_scale, canvas, subset);\n }\n});\n\n/**\n * Track displays continuous/numerical data. Track expects position data in 1-based format, i.e. wiggle format.\n */\nvar LineTrack = function LineTrack(view, container, obj_dict) {\n this.mode = \"Histogram\";\n TiledTrack.call(this, view, container, obj_dict);\n // Need left offset for drawing overlap near tile boundaries.\n this.left_offset = 30;\n\n // If server has byte-range support, use BBI data manager to read directly from the BBI file.\n // FIXME: there should be a flag to wait for this check to complete before loading the track.\n var self = this;\n $.when(supportsByteRanges(Galaxy.root + \"datasets/\" + this.dataset.id + \"/display\")).then(function (supportsByteRanges) {\n if (supportsByteRanges) {\n self.data_manager = new _bbiDataManager2.default.BBIDataManager({\n dataset: self.dataset\n });\n }\n });\n};\n\nextend(LineTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{ key: \"color\", label: \"Color\", type: \"color\" }, {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken before drawing.\n */\n // FIXME: can the default behavior be used; right now it breaks during resize.\n before_draw: function before_draw() {},\n\n /**\n * Draw track tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale) {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n },\n\n /**\n * Subset data only if data is at single-base pair resolution.\n */\n can_subset: function can_subset(entry) {\n return entry.data[1][0] - entry.data[0][0] === 1;\n },\n\n /**\n * Add min, max labels.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n // Add min, max labels.\n this._add_yaxis_label(\"max\");\n this._add_yaxis_label(\"min\");\n }\n});\n\n/**\n * Diagonal heatmap for showing interactions data.\n */\nvar DiagonalHeatmapTrack = function DiagonalHeatmapTrack(view, container, obj_dict) {\n this.mode = \"Heatmap\";\n TiledTrack.call(this, view, container, obj_dict);\n};\n\nextend(DiagonalHeatmapTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Heatmap\"],\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"pos_color\",\n label: \"Positive Color\",\n type: \"color\",\n default_value: \"#FF8C00\"\n }, {\n key: \"neg_color\",\n label: \"Negative Color\",\n type: \"color\",\n default_value: \"#4169E1\"\n }, {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"int\",\n default_value: undefined\n }, {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"int\",\n default_value: undefined\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 500,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {\n var track = this;\n return $.getJSON(track.dataset.url(), {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n }, function (result) {\n var data = result.data;\n });\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale) {\n // Paint onto canvas.\n var canvas = ctx.canvas;\n\n var painter = new _painters2.default.DiagonalHeatmapPainter(result.data, region.get(\"start\"), region.get(\"end\"), this.config.to_key_value_dict(), mode);\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new Tile(this, region, w_scale, canvas, result.data);\n }\n});\n\n/**\n * A track that displays features/regions. Track expects position data in BED format, i.e. 0-based, half-open.\n */\nvar FeatureTrack = function FeatureTrack(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.container_div.addClass(\"feature-track\");\n this.summary_draw_height = 30;\n this.slotters = {};\n this.start_end_dct = {};\n this.left_offset = 200;\n\n // this.painter = painters.LinkedFeaturePainter;\n this.set_painter_from_config();\n};\nextend(FeatureTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"block_color\",\n label: \"Block color\",\n type: \"color\"\n }, {\n key: \"reverse_strand_color\",\n label: \"Antisense strand color\",\n type: \"color\"\n }, {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n }, {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true,\n help: \"Show the number of items in each bin when drawing summary histogram\"\n }, {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"connector_style\",\n label: \"Connector style\",\n type: \"select\",\n default_value: \"fishbones\",\n options: [{\n label: \"Line with arrows\",\n value: \"fishbone\"\n }, { label: \"Arcs\", value: \"arcs\" }]\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.set_painter_from_config();\n this.request_draw({ clear_tile_cache: true });\n },\n\n set_painter_from_config: function set_painter_from_config() {\n if (this.config.get_value(\"connector_style\") === \"arcs\") {\n this.painter = _painters2.default.ArcLinkedFeaturePainter;\n } else {\n this.painter = _painters2.default.LinkedFeaturePainter;\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var track = this;\n var i;\n\n var line_track_tiles = _.filter(tiles, function (t) {\n return t instanceof LineTrackTile;\n });\n\n //\n // Finish drawing of features that span multiple tiles. Features that span multiple tiles\n // are labeled incomplete on the tile level because they cannot be completely drawn.\n //\n if (line_track_tiles.length === 0) {\n // Gather incomplete features together.\n var all_incomplete_features = {};\n _.each(_.pluck(tiles, \"incomplete_features\"), function (inc_features) {\n _.each(inc_features, function (feature) {\n all_incomplete_features[feature[0]] = feature;\n });\n });\n\n // Draw incomplete features on each tile.\n var self = this;\n _.each(tiles, function (tile) {\n // Remove features already drawn on tile originally.\n var tile_incomplete_features = _.omit(all_incomplete_features, _.map(tile.incomplete_features, function (f) {\n return f[0];\n }));\n\n // Remove features already drawn on tile in past postdraw actions.\n tile_incomplete_features = _.omit(tile_incomplete_features, _.keys(tile.other_tiles_features_drawn));\n\n // Draw tile's incomplete features.\n if (_.size(tile_incomplete_features) !== 0) {\n // To draw incomplete features, create new canvas, copy original canvas/tile onto new\n // canvas, and then draw incomplete features on the new canvas.\n var features = {\n data: _.values(tile_incomplete_features)\n };\n\n var new_canvas = self.view.canvas_manager.new_canvas();\n var new_canvas_ctx = new_canvas.getContext(\"2d\");\n new_canvas.height = Math.max(tile.canvas.height, self.get_canvas_height(features, tile.mode, tile.w_scale, 100));\n new_canvas.width = tile.canvas.width;\n new_canvas_ctx.drawImage(tile.canvas, 0, 0);\n new_canvas_ctx.translate(track.left_offset, 0);\n var new_tile = self.draw_tile(features, new_canvas_ctx, tile.mode, tile.region, tile.w_scale, tile.seq_data);\n $(tile.canvas).replaceWith($(new_tile.canvas));\n tile.canvas = new_canvas;\n _.extend(tile.other_tiles_features_drawn, all_incomplete_features);\n }\n });\n }\n\n // If mode is Coverage and tiles do not share max, redraw tiles as necessary using new max.\n /*\n This code isn't used right now because Coverage mode uses predefined max in preferences.\n if (track.mode === \"Coverage\") {\n // Get global max.\n var global_max = -1;\n for (i = 0; i < tiles.length; i++) {\n var cur_max = tiles[i].max_val;\n if (cur_max > global_max) {\n global_max = cur_max;\n }\n }\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.max_val !== global_max) {\n tile.html_elt.remove();\n track.draw_helper(tile.index, w_scale, { more_tile_data: { force: true, max: global_max } } );\n }\n }\n }\n */\n\n //\n // Update filter attributes, UI.\n //\n\n // Update filtering UI.\n if (track.filters_manager) {\n var filters = track.filters_manager.filters;\n var f;\n for (f = 0; f < filters.length; f++) {\n filters[f].update_ui_elt();\n }\n\n // Determine if filters are available; this is based on the tiles' data.\n // Criteria for filter to be available: (a) it is applicable to tile data and (b) filter min != filter max.\n var filters_available = false;\n\n var example_feature;\n var filter;\n for (i = 0; i < tiles.length; i++) {\n if (tiles[i].data.length) {\n example_feature = tiles[i].data[0];\n for (f = 0; f < filters.length; f++) {\n filter = filters[f];\n if (filter.applies_to(example_feature) && filter.min !== filter.max) {\n filters_available = true;\n break;\n }\n }\n }\n }\n\n // If filter availability changed, hide filter div if necessary and update menu.\n if (track.filters_available !== filters_available) {\n track.filters_available = filters_available;\n if (!track.filters_available) {\n track.filters_manager.hide();\n }\n track.update_icons();\n }\n }\n\n //\n // If not all features slotted, show icon for showing more rows (slots).\n //\n if (tiles[0] instanceof FeatureTrackTile) {\n var all_slotted = true;\n for (i = 0; i < tiles.length; i++) {\n if (!tiles[i].all_slotted) {\n all_slotted = false;\n break;\n }\n }\n this.action_icons.show_more_rows_icon.toggle(!all_slotted);\n } else {\n this.action_icons.show_more_rows_icon.hide();\n }\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function update_auto_mode(mode) {\n if (this.mode === \"Auto\") {\n if (mode === \"no_detail\") {\n mode = \"feature spans\";\n }\n this.action_icons.mode_icon.attr(\"title\", \"Set display mode (now: Auto/\" + mode + \")\");\n }\n },\n\n /**\n * Place features in slots for drawing (i.e. pack features).\n * this.slotters[level] is created in this method. this.slotters[level]\n * is a Slotter object. Returns the number of slots used to pack features.\n */\n incremental_slots: function incremental_slots(level, features, mode) {\n // Get/create incremental slots for level. If display mode changed,\n // need to create new slots.\n\n var dummy_context = this.view.canvas_manager.dummy_context;\n\n var slotter = this.slotters[level];\n if (!slotter || slotter.mode !== mode) {\n slotter = new _slotting2.default.FeatureSlotter(level, mode, MAX_FEATURE_DEPTH, function (x) {\n return dummy_context.measureText(x);\n });\n this.slotters[level] = slotter;\n }\n\n return slotter.slot_features(features);\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function get_mode(data) {\n var mode;\n // HACK: use no_detail mode track is in overview to prevent overview from being too large.\n if (data.extra_info === \"no_detail\" || this.is_overview) {\n mode = \"no_detail\";\n } else {\n // Choose b/t Squish and Pack.\n // Proxy measures for using Squish:\n // (a) error message re: limiting number of features shown;\n // (b) X number of features shown;\n // (c) size of view shown.\n // TODO: cannot use (a) and (b) because it requires coordinating mode across tiles;\n // fix this so that tiles are redrawn as necessary to use the same mode.\n //if ( (result.message && result.message.match(/^Only the first [\\d]+/)) ||\n // (result.data && result.data.length > 2000) ||\n //var data = result.data;\n // if ( (data.length && data.length < 4) ||\n // (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) ) {\n if (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) {\n mode = \"Squish\";\n } else {\n mode = \"Pack\";\n }\n }\n return mode;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function get_canvas_height(result, mode, w_scale, canvas_width) {\n if (mode === \"Coverage\" || result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // All other modes require slotting.\n var rows_required = this.incremental_slots(w_scale, result.data, mode);\n // HACK: use dummy painter to get required height. Painter should be extended so that get_required_height\n // works as a static function.\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return Math.max(this.min_height_px, dummy_painter.get_required_height(rows_required, canvas_width));\n }\n },\n\n /**\n * Draw FeatureTrack tile.\n * @param result result from server\n * @param cxt canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n * @param cur_tile true if drawing is occurring on a currently visible tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale, ref_seq, cur_tile) {\n var track = this;\n var canvas = ctx.canvas;\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var left_offset = this.left_offset;\n\n // If data is line track data, draw line track tile.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n }\n\n // Handle row-by-row tracks\n\n // Preprocessing: filter features and determine whether all unfiltered features have been slotted.\n var filtered = [];\n\n var slots = this.slotters[w_scale].slots;\n var all_slotted = true;\n if (result.data) {\n var filters = this.filters_manager.filters;\n for (var i = 0, len = result.data.length; i < len; i++) {\n var feature = result.data[i];\n var hide_feature = false;\n var filter;\n for (var f = 0, flen = filters.length; f < flen; f++) {\n filter = filters[f];\n filter.update_attrs(feature);\n if (!filter.keep(feature)) {\n hide_feature = true;\n break;\n }\n }\n if (!hide_feature) {\n // Feature visible.\n filtered.push(feature);\n // Set flag if not slotted.\n if (!(feature[0] in slots)) {\n all_slotted = false;\n }\n }\n }\n }\n\n // Create painter.\n var filter_alpha_scaler = this.filters_manager.alpha_filter ? new FilterScaler(this.filters_manager.alpha_filter) : null;\n\n var filter_height_scaler = this.filters_manager.height_filter ? new FilterScaler(this.filters_manager.height_filter) : null;\n\n var painter = new this.painter(filtered, tile_low, tile_high, this.config.to_key_value_dict(), mode, filter_alpha_scaler, filter_height_scaler,\n // HACK: ref_seq only be defined for ReadTracks, and only the ReadPainter accepts that argument\n ref_seq, function (b) {\n return track.view.get_base_color(b);\n });\n\n var feature_mapper = null;\n\n ctx.fillStyle = this.config.get_value(\"block_color\");\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"right\";\n\n if (result.data) {\n // Draw features.\n var draw_results = painter.draw(ctx, canvas.width, canvas.height, w_scale, slots);\n feature_mapper = draw_results.feature_mapper;\n incomplete_features = draw_results.incomplete_features;\n feature_mapper.translation = -left_offset;\n }\n\n // If not drawing on current tile, create new tile.\n if (!cur_tile) {\n return new FeatureTrackTile(track, region, w_scale, canvas, result.data, mode, result.message, all_slotted, feature_mapper, incomplete_features, ref_seq);\n }\n }\n});\n\n/**\n * Displays variant data.\n */\nvar VariantTrack = function VariantTrack(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.painter = _painters2.default.VariantPainter;\n this.summary_draw_height = 30;\n\n // Maximum resolution is ~45 pixels/base, so use this size left offset to ensure that full\n // variant is drawn when variant is at start of tile.\n this.left_offset = 30;\n};\n\nextend(VariantTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"color\",\n label: \"Histogram color\",\n type: \"color\"\n }, {\n key: \"show_sample_data\",\n label: \"Show sample data\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"show_labels\",\n label: \"Show summary and sample labels\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"summary_height\",\n label: \"Locus summary height\",\n type: \"float\",\n default_value: 20\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale) {\n // Data could be coverage data or variant data.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, \"Histogram\", region, w_scale);\n } else {\n // result.dataset_type === 'variant'\n var view = this.view;\n\n var painter = new this.painter(result.data, region.get(\"start\"), region.get(\"end\"), this.config.to_key_value_dict(), mode, function (b) {\n return view.get_base_color(b);\n });\n\n painter.draw(ctx, ctx.canvas.width, ctx.canvas.height, w_scale);\n return new Tile(this, region, w_scale, ctx.canvas, result.data);\n }\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function get_canvas_height(result, mode, w_scale, canvas_width) {\n if (result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // HACK: sample_names is not be defined when dataset definition is fetched before\n // dataset is complete (as is done when running tools). In that case, fall back on\n // # of samples in data. This can be fixed by re-requesting dataset definition\n // in init.\n var num_samples = this.dataset.get_metadata(\"sample_names\") ? this.dataset.get_metadata(\"sample_names\").length : 0;\n if (num_samples === 0 && result.data.length !== 0) {\n // Sample data is separated by commas, so this computes # of samples:\n num_samples = result.data[0][7].match(/,/g);\n if (num_samples === null) {\n num_samples = 1;\n } else {\n num_samples = num_samples.length + 1;\n }\n }\n\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return dummy_painter.get_required_height(num_samples);\n }\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {\n var deferreds = [Track.prototype.predraw_init.call(this)];\n // FIXME: updating dataset metadata is only needed for visual analysis. Can\n // this be moved somewhere else?\n if (!this.dataset.get_metadata(\"sample_names\")) {\n deferreds.push(this.dataset.fetch());\n }\n return deferreds;\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var line_track_tiles = _.filter(tiles, function (t) {\n return t instanceof LineTrackTile;\n });\n\n // Add summary/sample labels if needed and not already included.\n var sample_names = this.dataset.get_metadata(\"sample_names\");\n if (line_track_tiles.length === 0 && this.config.get_value(\"show_labels\") && sample_names && sample_names.length > 1) {\n var font_size;\n\n // Add and/or style labels.\n if (this.container_div.find(\".yaxislabel.variant\").length === 0) {\n // Add summary and sample labels.\n\n // Add summary label to middle of summary area.\n font_size = this.config.get_value(\"summary_height\") / 2;\n this.tiles_div.prepend($(\"
\").text(\"Summary\").addClass(\"yaxislabel variant top\").css({\n \"font-size\": font_size + \"px\",\n top: (this.config.get_value(\"summary_height\") - font_size) / 2 + \"px\"\n }));\n\n // Show sample labels.\n if (this.config.get_value(\"show_sample_data\")) {\n var samples_div_html = sample_names.join(\"
\");\n\n this.tiles_div.prepend($(\"
\").html(samples_div_html).addClass(\"yaxislabel variant top sample\").css({\n top: this.config.get_value(\"summary_height\")\n }));\n }\n }\n\n // Style labels.\n\n // Match sample font size to mode.\n font_size = (this.mode === \"Squish\" ? 5 : 10) + \"px\";\n $(this.tiles_div).find(\".sample\").css({\n \"font-size\": font_size,\n \"line-height\": font_size\n });\n // Color labels to preference color.\n $(this.tiles_div).find(\".yaxislabel\").css(\"color\", this.config.get_value(\"label_color\"));\n } else {\n // Remove all labels.\n this.container_div.find(\".yaxislabel.variant\").remove();\n }\n }\n});\n\n/**\n * Track that displays mapped reads. Track expects position data in 1-based, closed format, i.e. SAM/BAM format.\n */\nvar ReadTrack = function ReadTrack(view, container, obj_dict) {\n FeatureTrack.call(this, view, container, obj_dict);\n this.painter = _painters2.default.ReadPainter;\n this.update_icons();\n};\n\nextend(ReadTrack.prototype, Drawable.prototype, TiledTrack.prototype, FeatureTrack.prototype, {\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"block_color\",\n label: \"Histogram color\",\n type: \"color\"\n }, {\n key: \"detail_block_color\",\n label: \"Sense strand block color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n }, {\n key: \"reverse_strand_color\",\n label: \"Antisense strand block color\",\n type: \"color\",\n default_value: \"#DDDDDD\"\n }, {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n }, {\n key: \"show_insertions\",\n label: \"Show insertions\",\n type: \"bool\",\n default_value: false\n }, {\n key: \"show_differences\",\n label: \"Show differences only\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n }\n});\n\n/**\n * Objects that can be added to a view.\n */\nvar addable_objects = {\n CompositeTrack: CompositeTrack,\n DrawableGroup: DrawableGroup,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n FeatureTrack: FeatureTrack,\n LineTrack: LineTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n // For backward compatibility, map vcf track to variant.\n VcfTrack: VariantTrack\n};\n\n/**\n * Create new object from a template. A template can be either an object dictionary or an\n * object itself.\n */\nvar object_from_template = function object_from_template(template, view, container) {\n if (\"copy\" in template) {\n // Template is an object.\n return template.copy(container);\n } else {\n // Template is a dictionary.\n var drawable_type = template.obj_type;\n // For backward compatibility:\n if (!drawable_type) {\n drawable_type = template.track_type;\n }\n return new addable_objects[drawable_type](view, container, template);\n }\n};\n\nexports.default = {\n TracksterView: TracksterView,\n DrawableGroup: DrawableGroup,\n LineTrack: LineTrack,\n FeatureTrack: FeatureTrack,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n CompositeTrack: CompositeTrack,\n object_from_template: object_from_template\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(2)))\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n * View for track/group header.\n */\nvar TrackHeaderView = Backbone.View.extend({\n className: \"track-header\",\n\n initialize: function initialize() {\n // Watch and update name changes.\n this.model.config.get(\"name\").on(\"change:value\", this.update_name, this);\n this.render();\n },\n\n render: function render() {\n this.$el.append($(\"
\").addClass(this.model.drag_handle_class));\n this.$el.append($(\"
\").addClass(\"track-name\").text(this.model.config.get_value(\"name\")));\n\n // Icons container.\n this.action_icons = {};\n this.render_action_icons();\n\n // Suppress double clicks in header so that they do not impact viz under header.\n this.$el.dblclick(function (e) {\n e.stopPropagation();\n });\n\n // Needed for floating elts in header.\n this.$el.append($(\"
\"));\n },\n\n update_name: function update_name() {\n this.$el.find(\".track-name\").text(this.model.config.get_value(\"name\"));\n },\n\n render_action_icons: function render_action_icons() {\n var self = this;\n this.icons_div = $(\"
\").addClass(\"track-icons\").hide().appendTo(this.$el);\n _.each(this.model.action_icons_def, function (icon_dict) {\n self.add_action_icon(icon_dict.name, icon_dict.title, icon_dict.css_class, icon_dict.on_click_fn, icon_dict.prepend, icon_dict.hide);\n });\n\n // Set up behavior for modes popup.\n this.set_display_modes(this.model.display_modes);\n },\n\n /**\n * Add an action icon to this object. Appends icon unless prepend flag is specified.\n */\n add_action_icon: function add_action_icon(name, title, css_class, on_click_fn, prepend, hide) {\n var self = this;\n this.action_icons[name] = $(\"\").attr(\"title\", title).addClass(\"icon-button\").addClass(css_class).tooltip().click(function () {\n on_click_fn(self.model);\n }).appendTo(this.icons_div);\n if (hide) {\n this.action_icons[name].hide();\n }\n },\n\n /**\n * Set track's modes and update mode icon popup.\n */\n set_display_modes: function set_display_modes(new_modes, init_mode) {\n if (!new_modes) {\n return;\n }\n\n // HACK: move this out of view and into track.\n\n // Set modes, init mode.\n this.model.display_modes = new_modes;\n this.model.mode = init_mode || this.model.config.get_value(\"mode\") || this.model.display_modes[0];\n\n this.action_icons.mode_icon.attr(\"title\", \"Set display mode (now: \" + this.mode + \")\");\n\n // Setup popup menu for changing modes.\n var self = this;\n\n var track = this.model;\n var mode_mapping = {};\n for (var i = 0, len = track.display_modes.length; i < len; i++) {\n var mode = track.display_modes[i];\n mode_mapping[mode] = function (mode) {\n return function () {\n track.change_mode(mode);\n // HACK: the popup menu messes with the track's hover event, so manually show/hide\n // icons div for now.\n //self.icons_div.show();\n //track.container_div.mouseleave(function() { track.icons_div.hide(); } );\n };\n }(mode);\n }\n\n make_popupmenu(this.action_icons.mode_icon, mode_mapping);\n }\n});\n\nexports.default = {\n TrackHeaderView: TrackHeaderView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar extend = _.extend;\n\n// HACK: LABEL_SPACING is currently duplicated between here and painters\nvar LABEL_SPACING = 2;\n\nvar PACK_SPACING = 5;\n\n/**\n * Hold slotting information for a feature.\n */\nvar SlottedInfo = function SlottedInfo(slot, feature) {\n this.slot = slot;\n this.feature = feature;\n};\n\n/**\n * FeatureSlotter determines slots in which to draw features for vertical\n * packing.\n *\n * This implementation is incremental, any feature assigned a slot will be\n * retained for slotting future features.\n */\nvar FeatureSlotter = function FeatureSlotter(w_scale, mode, max_rows, measureText) {\n this.slots = {};\n this.start_end_dct = {};\n this.w_scale = w_scale;\n this.mode = mode;\n this.include_label = mode === \"Pack\";\n this.max_rows = max_rows;\n this.measureText = measureText;\n};\n\n/**\n * Slot a set of features, `this.slots` will be updated with slots by id, and\n * the largest slot required for the passed set of features is returned\n */\nextend(FeatureSlotter.prototype, {\n /**\n * Get drawing coordinate for a feature.\n */\n _get_draw_coords: function _get_draw_coords(feature) {\n // Get initial draw coordinates using w_scale.\n var draw_start = Math.floor(feature[1] * this.w_scale);\n\n var draw_end = Math.ceil(feature[2] * this.w_scale);\n var f_name = feature[3];\n var text_align;\n\n // Update start, end drawing locations to include feature name.\n // Try to put the name on the left, if not, put on right.\n if (f_name !== undefined && this.include_label) {\n // Add gap for label spacing and extra pack space padding\n // TODO: Fix constants\n var text_len = this.measureText(f_name).width + (LABEL_SPACING + PACK_SPACING);\n if (draw_start - text_len >= 0) {\n draw_start -= text_len;\n text_align = \"left\";\n } else {\n draw_end += text_len;\n text_align = \"right\";\n }\n }\n\n /*\n if (slot_num < 0) {\n \n TODO: this is not yet working --\n console.log(feature_uid, \"looking for slot with text on the right\");\n // Slot not found. If text was on left, try on right and see\n // if slot can be found.\n // TODO: are there any checks we need to do to ensure that text\n // will fit on tile?\n if (text_align === \"left\") {\n draw_start -= text_len;\n draw_end -= text_len;\n text_align = \"right\";\n slot_num = find_slot(draw_start, draw_end);\n }\n if (slot_num >= 0) {\n console.log(feature_uid, \"found slot with text on the right\");\n }\n }\n */\n\n return [draw_start, draw_end];\n },\n\n /**\n * Find the first slot such that current feature doesn't overlap any other features in that slot.\n * Returns -1 if no slot was found.\n */\n _find_slot: function _find_slot(draw_coords) {\n // TODO: Use a data structure for faster searching of available slots.\n var draw_start = draw_coords[0];\n\n var draw_end = draw_coords[1];\n for (var slot_num = 0; slot_num <= this.max_rows; slot_num++) {\n var has_overlap = false;\n var slot = this.start_end_dct[slot_num];\n if (slot !== undefined) {\n // Iterate through features already in slot to see if current feature will fit.\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n var s_e = slot[k];\n if (draw_end > s_e[0] && draw_start < s_e[1]) {\n // There is overlap\n has_overlap = true;\n break;\n }\n }\n }\n if (!has_overlap) {\n return slot_num;\n }\n }\n return -1;\n },\n\n /**\n * Slot features.\n */\n slot_features: function slot_features(features) {\n var start_end_dct = this.start_end_dct;\n var undone = [];\n var highest_slot = 0;\n var feature;\n var feature_uid;\n\n // Loop through features to (a) find those that are not yet slotted and (b) update\n // those that are slotted if new information is availabe. For (a), features already\n // slotted (based on slotting from other tiles) will retain their current slot.\n for (var i = 0, len = features.length; i < len; i++) {\n feature = features[i];\n feature_uid = feature[0];\n var slotted_info = this.slots[feature_uid];\n\n // Separate and handle slotted vs. unslotted features.\n if (slotted_info) {\n // Feature is slotted; if feature now has larger start/end coordinates,\n // update drawing coordinates.\n if (feature[1] < slotted_info.feature[1] || slotted_info.feature[2] < feature[2]) {\n // Feature has changed (e.g. a single read now has its pair), so recalculate its\n // drawing coordinates.\n var old_draw_coords = this._get_draw_coords(slotted_info.feature);\n\n var new_draw_coords = this._get_draw_coords(feature);\n var slotted_coords = this.start_end_dct[slotted_info.slot];\n for (var k = 0; k < slotted_coords.length; k++) {\n var dc = slotted_coords[k];\n if (dc[0] === old_draw_coords[0] && dc[1] === old_draw_coords[1]) {\n // Replace old drawing coordinates with new ones.\n slotted_coords[k] = new_draw_coords;\n }\n }\n }\n highest_slot = Math.max(highest_slot, this.slots[feature_uid].slot);\n } else {\n undone.push(i);\n }\n }\n\n // Slot unslotted features.\n\n // Do slotting.\n for (var i = 0, len = undone.length; i < len; i++) {\n feature = features[undone[i]];\n feature_uid = feature[0];\n var draw_coords = this._get_draw_coords(feature);\n\n // Find slot.\n var slot_num = this._find_slot(draw_coords);\n\n // Do slotting.\n if (slot_num >= 0) {\n // Add current feature to slot.\n if (start_end_dct[slot_num] === undefined) {\n start_end_dct[slot_num] = [];\n }\n start_end_dct[slot_num].push(draw_coords);\n this.slots[feature_uid] = new SlottedInfo(slot_num, feature);\n highest_slot = Math.max(highest_slot, slot_num);\n }\n }\n\n // Debugging: view slots data.\n /*\n for (var i = 0; i < MAX_FEATURE_DEPTH; i++) {\n var slot = start_end_dct[i];\n if (slot !== undefined) {\n console.log(i, \"*************\");\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n console.log(\"\\t\", slot[k][0], slot[k][1]);\n }\n }\n }\n */\n return highest_slot + 1;\n }\n});\n\nexports.default = {\n FeatureSlotter: FeatureSlotter\n};\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n * Compute the type of overlap between two regions. They are assumed to be on the same chrom/contig.\n * The overlap is computed relative to the second region; hence, OVERLAP_START indicates that the first\n * region overlaps the start (but not the end) of the second region.\n * NOTE: Coordinates are assumed to be in BED format: half open (start is closed, end is open).\n */\nvar BEFORE = 1001;\n\nvar CONTAINS = 1002;\nvar OVERLAP_START = 1003;\nvar OVERLAP_END = 1004;\nvar CONTAINED_BY = 1005;\nvar AFTER = 1006;\nvar compute_overlap = function compute_overlap(first_region, second_region) {\n var first_start = first_region[0];\n var first_end = first_region[1];\n var second_start = second_region[0];\n var second_end = second_region[1];\n var overlap;\n if (first_start < second_start) {\n if (first_end <= second_start) {\n overlap = BEFORE;\n } else if (first_end <= second_end) {\n overlap = OVERLAP_START;\n } else {\n // first_end > second_end\n overlap = CONTAINS;\n }\n } else {\n // first_start >= second_start\n if (first_start > second_end) {\n overlap = AFTER;\n } else if (first_end <= second_end) {\n overlap = CONTAINED_BY;\n } else {\n overlap = OVERLAP_END;\n }\n }\n\n return overlap;\n};\n\n/**\n * Returns true if regions overlap.\n */\nvar is_overlap = function is_overlap(first_region, second_region) {\n var overlap = compute_overlap(first_region, second_region);\n return overlap !== BEFORE && overlap !== AFTER;\n};\n\n/**\n * Draw a dashed line on a canvas using filled rectangles. This function is based on:\n * http://vetruvet.blogspot.com/2010/10/drawing-dashed-lines-on-html5-canvas.html\n * However, that approach uses lines, which don't seem to render as well, so use\n * rectangles instead.\n */\nvar dashedLine = function dashedLine(ctx, x1, y1, x2, y2, dashLen) {\n if (dashLen === undefined) {\n dashLen = 4;\n }\n var dX = x2 - x1;\n var dY = y2 - y1;\n var dashes = Math.floor(Math.sqrt(dX * dX + dY * dY) / dashLen);\n var dashX = dX / dashes;\n var dashY = dY / dashes;\n var q;\n\n for (q = 0; q < dashes; q++, x1 += dashX, y1 += dashY) {\n if (q % 2 !== 0) {\n continue;\n }\n ctx.fillRect(x1, y1, dashLen, 1);\n }\n};\n\n/**\n * Draw an isosceles triangle that points down.\n */\nvar drawDownwardEquilateralTriangle = function drawDownwardEquilateralTriangle(ctx, down_vertex_x, down_vertex_y, side_len) {\n // Compute other two points of triangle.\n var x1 = down_vertex_x - side_len / 2;\n\n var x2 = down_vertex_x + side_len / 2;\n var y = down_vertex_y - Math.sqrt(side_len * 3 / 2);\n\n // Draw and fill.\n ctx.beginPath();\n ctx.moveTo(x1, y);\n ctx.lineTo(x2, y);\n ctx.lineTo(down_vertex_x, down_vertex_y);\n ctx.lineTo(x1, y);\n\n ctx.strokeStyle = this.fillStyle;\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n};\n\n/**\n * Base class for all scalers. Scalers produce values that are used to change (scale) drawing attributes.\n */\nvar Scaler = function Scaler(default_val) {\n this.default_val = default_val ? default_val : 1;\n};\n\n/**\n * Produce a scaling value.\n */\nScaler.prototype.gen_val = function (input) {\n return this.default_val;\n};\n\n/**\n * Results from painter.draw()\n */\nvar DrawResults = function DrawResults(options) {\n this.incomplete_features = options.incomplete_features;\n this.feature_mapper = options.feature_mapper;\n};\n\n/**\n * Base class for painters\n *\n * -- Mode and prefs are both optional\n */\nvar Painter = function Painter(data, view_start, view_end, prefs, mode) {\n // Data and data properties\n this.data = data;\n // View\n this.view_start = view_start;\n this.view_end = view_end;\n // Drawing prefs\n this.prefs = _.extend({}, this.default_prefs, prefs);\n this.mode = mode;\n};\n\nPainter.prototype.default_prefs = {};\n\n/**\n * Draw on the context using a rectangle of width x height using scale w_scale.\n */\nPainter.prototype.draw = function (ctx, width, height, w_scale) {};\n\n/**\n * Get starting drawing position, which is offset a half-base left of coordinate.\n */\nPainter.prototype.get_start_draw_pos = function (chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, -0.5);\n};\n\n/**\n * Get end drawing position, which is offset a half-base right of coordinate.\n */\nPainter.prototype.get_end_draw_pos = function (chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0.5);\n};\n\n/**\n * Get drawing position.\n */\nPainter.prototype.get_draw_pos = function (chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0);\n};\n\n/**\n * Convert chromosome position to drawing position.\n */\nPainter.prototype._chrom_pos_to_draw_pos = function (chrom_pos, w_scale, offset) {\n return Math.floor(w_scale * (Math.max(0, chrom_pos - this.view_start) + offset));\n};\n\nvar LinePainter = function LinePainter(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n};\n\nLinePainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Histogram\",\n color: \"#000\",\n overflow_color: \"#F66\"\n};\n\nLinePainter.prototype.draw = function (ctx, width, height, w_scale) {\n var in_path = false;\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var vertical_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n\n ctx.save();\n\n // Pixel position of 0 on the y axis\n var y_zero = Math.round(height + min_value / vertical_range * height);\n\n // Horizontal line to denote x-axis\n if (mode !== \"Intensity\") {\n ctx.fillStyle = \"#aaa\";\n ctx.fillRect(0, y_zero, width, 1);\n }\n\n ctx.beginPath();\n var x_scaled;\n var y;\n var delta_x_pxs;\n if (data.length > 1) {\n delta_x_pxs = _.map(data.slice(0, -1), function (d, i) {\n return Math.ceil((data[i + 1][0] - data[i][0]) * w_scale);\n });\n } else {\n delta_x_pxs = [10];\n }\n\n // Painter color can be in either block_color (FeatureTrack) or color pref (LineTrack).\n var painter_color = this.prefs.block_color || this.prefs.color;\n\n var // Extract RGB from preference color.\n pref_color = parseInt(painter_color.slice(1), 16);\n\n var pref_r = (pref_color & 0xff0000) >> 16;\n var pref_g = (pref_color & 0x00ff00) >> 8;\n var pref_b = pref_color & 0x0000ff;\n var top_overflow = false;\n var bot_overflow = false;\n\n // Paint track.\n var delta_x_px;\n for (var i = 0, len = data.length; i < len; i++) {\n // Reset attributes for next point.\n ctx.fillStyle = ctx.strokeStyle = painter_color;\n top_overflow = bot_overflow = false;\n delta_x_px = delta_x_pxs[i];\n\n x_scaled = Math.floor((data[i][0] - view_start - 0.5) * w_scale);\n y = data[i][1];\n\n // Process Y (scaler) value.\n if (y === null) {\n if (in_path && mode === \"Filled\") {\n ctx.lineTo(x_scaled, height_px);\n }\n in_path = false;\n continue;\n }\n\n // Bound Y value by min, max.\n if (y < min_value) {\n bot_overflow = true;\n y = min_value;\n } else if (y > max_value) {\n top_overflow = true;\n y = max_value;\n }\n\n // Draw point.\n if (mode === \"Histogram\") {\n // y becomes the bar height in pixels, which is the negated for canvas coords\n y = Math.round(y / vertical_range * height_px);\n ctx.fillRect(x_scaled, y_zero, delta_x_px, -y);\n } else if (mode === \"Intensity\") {\n var saturation = (y - min_value) / vertical_range;\n\n var // Range is [pref_color, 255] where saturation = 0 --> 255 and saturation = 1 --> pref color\n new_r = Math.round(pref_r + (255 - pref_r) * (1 - saturation));\n\n var new_g = Math.round(pref_g + (255 - pref_g) * (1 - saturation));\n var new_b = Math.round(pref_b + (255 - pref_b) * (1 - saturation));\n ctx.fillStyle = \"rgb(\" + new_r + \",\" + new_g + \",\" + new_b + \")\";\n ctx.fillRect(x_scaled, 0, delta_x_px, height_px);\n } else {\n // mode is Coverage/Line or Filled.\n\n // Scale Y value.\n y = Math.round(height_px - (y - min_value) / vertical_range * height_px);\n if (in_path) {\n ctx.lineTo(x_scaled, y);\n } else {\n in_path = true;\n if (mode === \"Filled\") {\n ctx.moveTo(x_scaled, height_px);\n ctx.lineTo(x_scaled, y);\n } else {\n ctx.moveTo(x_scaled, y);\n // Use this approach (note: same as for filled) to draw line from 0 to\n // first data point.\n //ctx.moveTo(x_scaled, height_px);\n //ctx.lineTo(x_scaled, y);\n }\n }\n }\n\n // Draw lines at boundaries if overflowing min or max\n ctx.fillStyle = this.prefs.overflow_color;\n if (top_overflow || bot_overflow) {\n var overflow_x;\n if (mode === \"Histogram\" || mode === \"Intensity\") {\n overflow_x = delta_x_px;\n } else {\n // Line and Filled, which are points\n x_scaled -= 2; // Move it over to the left so it's centered on the point\n overflow_x = 4;\n }\n if (top_overflow) {\n ctx.fillRect(x_scaled, 0, overflow_x, 3);\n }\n if (bot_overflow) {\n ctx.fillRect(x_scaled, height_px - 3, overflow_x, 3);\n }\n }\n ctx.fillStyle = painter_color;\n }\n if (mode === \"Filled\") {\n if (in_path) {\n ctx.lineTo(x_scaled, y_zero);\n ctx.lineTo(0, y_zero);\n }\n ctx.fill();\n } else {\n ctx.stroke();\n }\n\n ctx.restore();\n};\n\n/**\n * Mapper that contains information about feature locations and data.\n */\nvar FeaturePositionMapper = function FeaturePositionMapper(slot_height) {\n this.feature_positions = {};\n this.slot_height = slot_height;\n this.translation = 0;\n this.y_translation = 0;\n};\n\n/**\n * Map feature data to a position defined by .\n */\nFeaturePositionMapper.prototype.map_feature_data = function (feature_data, slot, x_start, x_end) {\n if (!this.feature_positions[slot]) {\n this.feature_positions[slot] = [];\n }\n this.feature_positions[slot].push({\n data: feature_data,\n x_start: x_start,\n x_end: x_end\n });\n};\n\n/**\n * Get feature data for position \n */\nFeaturePositionMapper.prototype.get_feature_data = function (x, y) {\n // Find slot using Y.\n var slot = Math.floor((y - this.y_translation) / this.slot_height);\n\n var feature_dict;\n\n // May not be over a slot due to padding, margin, etc.\n if (!this.feature_positions[slot]) {\n return null;\n }\n\n // Find feature using X.\n x += this.translation;\n for (var i = 0; i < this.feature_positions[slot].length; i++) {\n feature_dict = this.feature_positions[slot][i];\n if (x >= feature_dict.x_start && x <= feature_dict.x_end) {\n return feature_dict.data;\n }\n }\n};\n\n/**\n * Abstract object for painting feature tracks. Subclasses must implement draw_element() for painting to work.\n * Painter uses a 0-based, half-open coordinate system; start coordinate is closed--included--and the end is open.\n * This coordinate system matches the BED format.\n */\nvar FeaturePainter = function FeaturePainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.alpha_scaler = alpha_scaler ? alpha_scaler : new Scaler();\n this.height_scaler = height_scaler ? height_scaler : new Scaler();\n this.max_label_length = 200;\n};\n\nFeaturePainter.prototype.default_prefs = {\n block_color: \"#FFF\",\n connector_color: \"#FFF\"\n};\n\n_.extend(FeaturePainter.prototype, {\n get_required_height: function get_required_height(rows_required, width) {\n // y_scale is the height per row\n var required_height = this.get_row_height();\n\n var y_scale = required_height;\n var mode = this.mode;\n // If using a packing mode, need to multiply by the number of slots used\n if (mode === \"no_detail\" || mode === \"Squish\" || mode === \"Pack\") {\n required_height = rows_required * y_scale;\n }\n return required_height + this.get_top_padding(width);\n },\n\n /** Extra padding before first row of features */\n get_top_padding: function get_top_padding(width) {\n return 0;\n },\n\n /**\n * Draw data on ctx using slots and within the rectangle defined by width and height. Returns\n * a FeaturePositionMapper object with information about where features were drawn.\n */\n draw: function draw(ctx, width, height, w_scale, slots) {\n var data = this.data;\n var view_start = this.view_start;\n var view_end = this.view_end;\n\n ctx.save();\n\n ctx.fillStyle = this.prefs.block_color;\n ctx.textAlign = \"right\";\n\n var y_scale = this.get_row_height();\n var feature_mapper = new FeaturePositionMapper(y_scale);\n var x_draw_coords;\n var incomplete_features = [];\n\n for (var i = 0, len = data.length; i < len; i++) {\n var feature = data[i];\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n\n var // Slot valid only if features are slotted and this feature is slotted;\n // feature may not be due to lack of space.\n slot = slots && slots[feature_uid] !== undefined ? slots[feature_uid].slot : null;\n\n // Draw feature if (a) mode is dense or feature is slotted (as it must be for all non-dense modes) and\n // (b) there's overlap between the feature and drawing region.\n if ((this.mode === \"Dense\" || slot !== null) && feature_start < view_end && feature_end > view_start) {\n x_draw_coords = this.draw_element(ctx, this.mode, feature, slot, view_start, view_end, w_scale, y_scale, width);\n feature_mapper.map_feature_data(feature, slot, x_draw_coords[0], x_draw_coords[1]);\n\n // Add to incomplete features if it's not drawn completely in region.\n if (feature_start < view_start || feature_end > view_end) {\n incomplete_features.push(feature);\n }\n }\n }\n\n ctx.restore();\n\n feature_mapper.y_translation = this.get_top_padding(width);\n return new DrawResults({\n incomplete_features: incomplete_features,\n feature_mapper: feature_mapper\n });\n },\n\n /**\n * Abstract function for drawing an individual feature.\n */\n draw_element: function draw_element(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n return [0, 0];\n }\n});\n\n// Constants specific to feature tracks moved here (HACKING, these should\n// basically all be configuration options)\nvar DENSE_TRACK_HEIGHT = 10;\n\nvar NO_DETAIL_TRACK_HEIGHT = 3;\nvar SQUISH_TRACK_HEIGHT = 5;\nvar PACK_TRACK_HEIGHT = 10;\nvar NO_DETAIL_FEATURE_HEIGHT = 1;\nvar DENSE_FEATURE_HEIGHT = 9;\nvar SQUISH_FEATURE_HEIGHT = 3;\nvar PACK_FEATURE_HEIGHT = 9;\nvar LABEL_SPACING = 2;\nvar CONNECTOR_COLOR = \"#ccc\";\n\nvar LinkedFeaturePainter = function LinkedFeaturePainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Whether to draw a single connector in the background that spans the entire feature (the intron fishbone)\n this.draw_background_connector = true;\n // Whether to call draw_connector for every pair of blocks\n this.draw_individual_connectors = false;\n};\n\n_.extend(LinkedFeaturePainter.prototype, FeaturePainter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function get_row_height() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"no_detail\") {\n height = NO_DETAIL_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Draw a feature. Returns an array with feature's start and end X coordinates.\n */\n draw_element: function draw_element(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n var feature_strand = feature[4];\n\n var // -0.5 to offset region between bases.\n f_start = Math.floor(Math.max(0, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var draw_start = f_start;\n var draw_end = f_end;\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale + this.get_top_padding(width);\n\n var thickness;\n var y_start;\n var thick_start = null;\n var thick_end = null;\n\n var // TODO: is there any reason why block, label color cannot be set at the Painter level?\n // For now, assume '.' === '+'\n block_color = !feature_strand || feature_strand === \"+\" || feature_strand === \".\" ? this.prefs.block_color : this.prefs.reverse_strand_color;\n\n var label_color = this.prefs.label_color;\n\n // Set global alpha.\n ctx.globalAlpha = this.alpha_scaler.gen_val(feature);\n\n // In dense mode, put all data in top slot.\n if (mode === \"Dense\") {\n slot = 1;\n }\n\n if (mode === \"no_detail\") {\n // No details for feature, so only one way to display.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 5, f_end - f_start, NO_DETAIL_FEATURE_HEIGHT);\n } else {\n // Mode is either Squish or Pack:\n // Feature details.\n var feature_ts = feature[5];\n\n var feature_te = feature[6];\n var feature_blocks = feature[7];\n\n var // Whether we are drawing full height or squished features\n full_height = true;\n\n if (feature_ts && feature_te) {\n thick_start = Math.floor(Math.max(0, (feature_ts - tile_low) * w_scale));\n thick_end = Math.ceil(Math.min(width, Math.max(0, (feature_te - tile_low) * w_scale)));\n }\n\n // Set vars that depend on mode.\n var thin_height;\n\n var thick_height;\n if (mode === \"Squish\") {\n thin_height = 1;\n thick_height = SQUISH_FEATURE_HEIGHT;\n full_height = false;\n } else if (mode === \"Dense\") {\n thin_height = 5;\n thick_height = DENSE_FEATURE_HEIGHT;\n } else {\n // mode === \"Pack\"\n thin_height = 5;\n thick_height = PACK_FEATURE_HEIGHT;\n }\n\n // Draw feature/feature blocks + connectors.\n if (!feature_blocks) {\n // If there are no blocks, treat the feature as one big exon.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n // If strand is specified, draw arrows over feature\n if (feature_strand && full_height) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n }\n } else {\n //\n // There are feature blocks and mode is either Squish or Pack.\n //\n // Approach: (a) draw whole feature as connector/intron and (b) draw blocks as\n // needed. This ensures that whole feature, regardless of whether it starts with\n // a block, is visible.\n //\n\n // Compute y axis start position and height\n var cur_y_start;\n\n var cur_height;\n if (mode === \"Squish\" || mode === \"Dense\") {\n cur_y_start = y_start + Math.floor(SQUISH_FEATURE_HEIGHT / 2) + 1;\n cur_height = 1;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n cur_y_start = y_start;\n cur_height = thick_height;\n } else {\n cur_y_start += SQUISH_FEATURE_HEIGHT / 2 + 1;\n cur_height = 1;\n }\n }\n\n // Draw whole feature as connector/intron.\n if (this.draw_background_connector) {\n if (mode === \"Squish\" || mode === \"Dense\") {\n ctx.fillStyle = CONNECTOR_COLOR;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand\");\n }\n } else {\n ctx.fillStyle = CONNECTOR_COLOR;\n }\n }\n ctx.fillRect(f_start, cur_y_start, f_end - f_start, cur_height);\n }\n\n // Draw blocks.\n var start_and_height;\n for (var k = 0, k_len = feature_blocks.length; k < k_len; k++) {\n var block = feature_blocks[k];\n\n var // -0.5 to offset block between bases.\n block_start = Math.floor(Math.max(0, (block[0] - tile_low - 0.5) * w_scale));\n\n var block_end = Math.ceil(Math.min(width, Math.max((block[1] - tile_low - 0.5) * w_scale)));\n\n var last_block_start;\n var last_block_end;\n\n // Skip drawing if block not on tile.\n if (block_start > block_end) {\n continue;\n }\n\n // Draw thin block.\n ctx.fillStyle = block_color;\n ctx.fillRect(block_start, y_start + (thick_height - thin_height) / 2 + 1, block_end - block_start, thin_height);\n\n // If block intersects with thick region, draw block as thick.\n // - No thick is sometimes encoded as thick_start == thick_end, so don't draw in that case\n if (thick_start !== undefined && feature_te > feature_ts && !(block_start > thick_end || block_end < thick_start)) {\n var block_thick_start = Math.max(block_start, thick_start);\n\n var block_thick_end = Math.min(block_end, thick_end);\n ctx.fillRect(block_thick_start, y_start + 1, block_thick_end - block_thick_start, thick_height);\n if (feature_blocks.length === 1 && mode === \"Pack\") {\n // Exactly one block means we have no introns, but do have a distinct \"thick\" region,\n // draw arrows over it if in pack mode.\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n // If region is wide enough in pixels, pad a bit\n if (block_thick_start + 14 < block_thick_end) {\n block_thick_start += 2;\n block_thick_end -= 2;\n }\n ctx.fillRect(block_thick_start, y_start + 1, block_thick_end - block_thick_start, thick_height);\n }\n }\n // Draw individual connectors if required\n if (this.draw_individual_connectors && last_block_start) {\n this.draw_connector(ctx, last_block_start, last_block_end, block_start, block_end, y_start);\n }\n last_block_start = block_start;\n last_block_end = block_end;\n }\n\n // FIXME: Height scaling only works in Pack mode right now.\n if (mode === \"Pack\") {\n // Reset alpha so height scaling is not impacted by alpha scaling.\n ctx.globalAlpha = 1;\n\n // Height scaling: draw white lines to reduce height according to height scale factor.\n ctx.fillStyle = \"white\"; // TODO: set this to background color.\n var hscale_factor = this.height_scaler.gen_val(feature);\n\n var // Ceil ensures that min height is >= 1.\n new_height = Math.ceil(thick_height * hscale_factor);\n\n var ws_height = Math.round((thick_height - new_height) / 2);\n if (hscale_factor !== 1) {\n ctx.fillRect(f_start, cur_y_start + 1, f_end - f_start, ws_height);\n ctx.fillRect(f_start, cur_y_start + thick_height - ws_height + 1, f_end - f_start, ws_height);\n }\n }\n }\n\n // Reset alpha so that label is not transparent.\n ctx.globalAlpha = 1;\n\n // Draw label for Pack mode.\n if (feature_name && mode === \"Pack\" && feature_start > tile_low) {\n ctx.fillStyle = label_color;\n // FIXME: assumption here that the entire view starts at 0\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_end += ctx.measureText(feature_name).width + LABEL_SPACING;\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_start -= ctx.measureText(feature_name).width + LABEL_SPACING;\n }\n //ctx.fillStyle = block_color;\n }\n }\n\n // Reset global alpha.\n ctx.globalAlpha = 1;\n\n return [draw_start, draw_end];\n }\n});\n\nvar ReadPainter = function ReadPainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler, ref_seq, base_color_fn) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n this.ref_seq = ref_seq ? ref_seq.data : null;\n this.base_color_fn = base_color_fn;\n};\n\n_.extend(ReadPainter.prototype, FeaturePainter.prototype, {\n /**\n * Returns height based on mode.\n */\n get_row_height: function get_row_height() {\n var height;\n var mode = this.mode;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n if (this.prefs.show_insertions) {\n height *= 2;\n }\n }\n return height;\n },\n\n /**\n * Parse CIGAR string to get (a) a list of contiguous drawing blocks (MD=X) and\n * (b) an array of [ op_index, op_len ] pairs where op_index is an index into the\n * string 'MIDNSHP=X' Return value is a dictionary with two entries, blocks and cigar\n */\n _parse_cigar: function _parse_cigar(cigar_str) {\n var cigar_ops = \"MIDNSHP=X\";\n\n // Parse cigar.\n var blocks = [[0, 0]];\n\n var cur_block = blocks[0];\n var base_pos = 0;\n\n var // Parse cigar operations out and update/create blocks as needed.\n parsed_cigar = _.map(cigar_str.match(/[0-9]+[MIDNSHP=X]/g), function (op) {\n // Get operation length, character.\n var op_len = parseInt(op.slice(0, -1), 10),\n op_char = op.slice(-1);\n\n // Update drawing block.\n if (op_char === \"N\") {\n // At skip, so need to start new block if current block represents\n // drawing area.\n if (cur_block[1] !== 0) {\n cur_block = [base_pos + op_len, base_pos + op_len];\n blocks.push(cur_block);\n }\n } else if (\"ISHP\".indexOf(op_char) === -1) {\n // Operation is M,D,=,X.\n cur_block[1] += op_len;\n base_pos += op_len;\n }\n\n // Return parsed cigar.\n return [cigar_ops.indexOf(op_char), op_len];\n });\n\n return {\n blocks: blocks,\n cigar: parsed_cigar\n };\n },\n\n /**\n * Draw a single read from reference-based read sequence and cigar.\n */\n draw_read: function draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature_start, cigar, strand, read_seq) {\n // Helper function to update base and sequnence offsets.\n var update_base_offset = function update_base_offset(offset, cig_op, cig_len) {\n if (\"M=NXD\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var update_seq_offset = function update_seq_offset(offset, cig_op, cig_len) {\n if (\"IX\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var // Gets drawing coordinate for a sequence coordinate. Assumes closure variables w_scale and tile_low.\n get_draw_coord = function get_draw_coord(sequence_coord // -0.5 to offset sequence between bases.\n ) {\n return Math.floor(Math.max(0, (sequence_coord - tile_low - 0.5) * w_scale));\n };\n\n ctx.textAlign = \"center\";\n var tile_region = [tile_low, tile_high];\n var base_offset = 0;\n var seq_offset = 0;\n var gap = Math.round(w_scale / 2);\n var char_width_px = ctx.canvas.manager.char_width_px;\n\n var block_color = strand === \"+\" ? this.prefs.detail_block_color : this.prefs.reverse_strand_color;\n\n var pack_mode = mode === \"Pack\";\n\n var draw_height = pack_mode ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var rect_y = y_start + 1;\n var paint_utils = new ReadPainterUtils(ctx, draw_height, w_scale, mode);\n var drawing_blocks = [];\n var s_start;\n var s_end;\n\n // Keep list of items that need to be drawn on top of initial drawing layer.\n var draw_last = [];\n\n // Parse cigar and get drawing blocks.\n var t = this._parse_cigar(cigar);\n cigar = t.cigar;\n drawing_blocks = t.blocks;\n\n // Draw blocks.\n for (var i = 0; i < drawing_blocks.length; i++) {\n var block = drawing_blocks[i];\n\n if (is_overlap([feature_start + block[0], feature_start + block[1]], tile_region)) {\n s_start = get_draw_coord(feature_start + block[0]);\n s_end = get_draw_coord(feature_start + block[1]);\n\n // Make sure that block is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read base as rectangle.\n ctx.fillStyle = block_color;\n ctx.fillRect(s_start, rect_y, s_end - s_start, draw_height);\n }\n }\n\n // Draw read features.\n for (var cig_id = 0, len = cigar.length; cig_id < len; cig_id++) {\n var cig = cigar[cig_id];\n var cig_op = \"MIDNSHP=X\"[cig[0]];\n var cig_len = cig[1];\n\n var seq_start = feature_start + base_offset;\n s_start = get_draw_coord(seq_start);\n s_end = get_draw_coord(seq_start + cig_len);\n\n // Skip feature if it's not in tile.\n if (!is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n // Update offsets.\n base_offset = update_base_offset(base_offset, cig_op, cig_len);\n seq_offset = update_seq_offset(seq_offset, cig_op, cig_len);\n continue;\n }\n\n // Make sure that read is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read feature.\n switch (cig_op) {\n case \"H\": // Hard clipping.\n case \"S\": // Soft clipping.\n case \"P\":\n // Padding.\n // Sequence not present and not related to alignment; do nothing.\n break;\n case \"M\":\n // \"Match\".\n // Because it's not known whether there is a match, ignore.\n base_offset += cig_len;\n break;\n case \"=\": // Match with reference.\n case \"X\":\n // Mismatch with reference.\n //\n // Draw sequence and/or variants.\n //\n\n // Get sequence to draw.\n var cur_seq = \"\";\n if (cig_op === \"X\") {\n // Get sequence from read_seq.\n cur_seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n } else if (this.ref_seq) {\n // && cig_op === '='\n // Use reference sequence.\n cur_seq = this.ref_seq.slice(\n // If read starts after tile start, slice at read start.\n Math.max(0, seq_start - tile_low),\n // If read ends before tile end, slice at read end.\n Math.min(seq_start - tile_low + cig_len, tile_high - tile_low));\n }\n\n // Draw sequence. Because cur_seq starts and read/tile start, go to there to start writing.\n var start_pos = Math.max(seq_start, tile_low);\n for (var c = 0; c < cur_seq.length; c++) {\n // Draw base if showing all (i.e. not showing differences) or there is a mismatch.\n if (cur_seq && !this.prefs.show_differences || cig_op === \"X\") {\n // Draw base.\n var c_start = Math.floor(Math.max(0, (start_pos + c - tile_low) * w_scale));\n ctx.fillStyle = this.base_color_fn(cur_seq[c]);\n if (pack_mode && w_scale > char_width_px) {\n ctx.fillText(cur_seq[c], c_start, y_start + 9);\n } else if (w_scale > 0.05) {\n // Require a minimum w_scale so that variants are only drawn when somewhat zoomed in.\n ctx.fillRect(c_start - gap, rect_y, Math.max(1, Math.round(w_scale)), draw_height);\n }\n }\n }\n\n // Move forward in sequence only if sequence used to get mismatches.\n if (cig_op === \"X\") {\n seq_offset += cig_len;\n }\n base_offset += cig_len;\n\n break;\n case \"N\":\n // Skipped bases.\n ctx.fillStyle = CONNECTOR_COLOR;\n ctx.fillRect(s_start, rect_y + (draw_height - 1) / 2, s_end - s_start, 1);\n // No change in seq_offset because sequence not used when skipping.\n base_offset += cig_len;\n break;\n case \"D\":\n // Deletion.\n paint_utils.draw_deletion(s_start, rect_y, cig_len);\n base_offset += cig_len;\n break;\n case \"I\":\n // Insertion.\n // Check to see if sequence should be drawn at all by looking at the overlap between\n // the sequence region and the tile region.\n var insert_x_coord = s_start - gap;\n\n if (is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n var seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n // Insertion point is between the sequence start and the previous base: (-gap) moves\n // back from sequence start to insertion point.\n if (this.prefs.show_insertions) {\n //\n // Show inserted sequence above, centered on insertion point.\n //\n\n // Draw sequence.\n // X center is offset + start - \n var x_center = s_start - (s_end - s_start) / 2;\n if ((mode === \"Pack\" || this.mode === \"Auto\") && read_seq !== undefined && w_scale > char_width_px) {\n // Draw sequence container.\n ctx.fillStyle = \"yellow\";\n ctx.fillRect(x_center - gap, y_start - 9, s_end - s_start, 9);\n draw_last[draw_last.length] = {\n type: \"triangle\",\n data: [insert_x_coord, y_start + 4, 5]\n };\n ctx.fillStyle = CONNECTOR_COLOR;\n // Based on overlap b/t sequence and tile, get sequence to be drawn.\n switch (compute_overlap([seq_start, seq_start + cig_len], tile_region)) {\n case OVERLAP_START:\n seq = seq.slice(tile_low - seq_start);\n break;\n case OVERLAP_END:\n seq = seq.slice(0, seq_start - tile_high);\n break;\n case CONTAINED_BY:\n // All of sequence drawn.\n break;\n case CONTAINS:\n seq = seq.slice(tile_low - seq_start, seq_start - tile_high);\n break;\n }\n // Draw sequence.\n for (var c = 0, str_len = seq.length; c < str_len; c++) {\n var c_start = Math.floor(Math.max(0, (seq_start + c - tile_low) * w_scale));\n ctx.fillText(seq[c], c_start - (s_end - s_start) / 2, y_start);\n }\n } else {\n // Draw block.\n ctx.fillStyle = \"yellow\";\n // TODO: This is a pretty hack-ish way to fill rectangle based on mode.\n ctx.fillRect(x_center, y_start + (this.mode !== \"Dense\" ? 2 : 5), s_end - s_start, mode !== \"Dense\" ? SQUISH_FEATURE_HEIGHT : DENSE_FEATURE_HEIGHT);\n }\n } else {\n if ((mode === \"Pack\" || this.mode === \"Auto\") && read_seq !== undefined && w_scale > char_width_px) {\n // Show insertions with a single number at the insertion point.\n draw_last.push({\n type: \"text\",\n data: [seq.length, insert_x_coord, y_start + 9]\n });\n } else {\n // TODO: probably can merge this case with code above.\n }\n }\n }\n seq_offset += cig_len;\n // No change to base offset because insertions are drawn above sequence/read.\n break;\n }\n }\n\n //\n // Draw last items.\n //\n ctx.fillStyle = \"yellow\";\n var item;\n var type;\n var data;\n for (var i = 0; i < draw_last.length; i++) {\n item = draw_last[i];\n type = item.type;\n data = item.data;\n if (type === \"text\") {\n ctx.save();\n ctx.font = \"bold \" + ctx.font;\n ctx.fillText(data[0], data[1], data[2]);\n ctx.restore();\n } else if (type === \"triangle\") {\n drawDownwardEquilateralTriangle(ctx, data[0], data[1], data[2]);\n }\n }\n },\n\n /**\n * Draw a complete read pair\n */\n draw_element: function draw_element(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n // All features need a start, end, and vertical center.\n var feature_uid = feature[0];\n\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n\n var // -0.5 to put element between bases.\n f_start = Math.floor(Math.max(-0.5 * w_scale, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale;\n\n var draw_height = mode === \"Pack\" ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var label_color = this.prefs.label_color;\n\n // Draw read.\n if (feature[5] instanceof Array) {\n // Read is paired.\n var connector = true;\n\n // Draw left/forward read.\n if (feature[4][1] >= tile_low && feature[4][0] <= tile_high && feature[4][2]) {\n this.draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature[4][0], feature[4][2], feature[4][3], feature[4][4]);\n } else {\n connector = false;\n }\n\n // Draw right/reverse read.\n if (feature[5][1] >= tile_low && feature[5][0] <= tile_high && feature[5][2]) {\n this.draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature[5][0], feature[5][2], feature[5][3], feature[5][4]);\n } else {\n connector = false;\n }\n\n // Draw connector if both reads were drawn.\n // TODO: currently, there is no way to connect reads drawn on different tiles; to connect reads on different tiles, data manager\n // code is needed to join mate pairs from different regions. Alternatively, requesting multiple regions of data at once would\n // make it possible to put together more easily.\n // -0.5 to position connector correctly between reads.\n var b1_end = Math.ceil(Math.min(width, Math.max(-0.5 * w_scale, (feature[4][1] - tile_low - 0.5) * w_scale)));\n\n var b2_start = Math.floor(Math.max(-0.5 * w_scale, (feature[5][0] - tile_low - 0.5) * w_scale));\n\n if (connector && b2_start > b1_end) {\n ctx.fillStyle = CONNECTOR_COLOR;\n var line_height = y_start + 1 + (draw_height - 1) / 2;\n dashedLine(ctx, b1_end, line_height, b2_start, line_height);\n }\n } else {\n // Read is single.\n this.draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature_start, feature[4], feature[5], feature[6]);\n }\n if (mode === \"Pack\" && feature_start >= tile_low && feature_name !== \".\") {\n // Draw label.\n ctx.fillStyle = this.prefs.label_color;\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 9, this.max_label_length);\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 9, this.max_label_length);\n }\n }\n\n // FIXME: provide actual coordinates for drawn read.\n return [0, 0];\n }\n});\n\nvar ArcLinkedFeaturePainter = function ArcLinkedFeaturePainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n LinkedFeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Need to know the longest feature length for adding spacing\n this.longest_feature_length = this.calculate_longest_feature_length();\n this.draw_background_connector = false;\n this.draw_individual_connectors = true;\n};\n\n_.extend(ArcLinkedFeaturePainter.prototype, FeaturePainter.prototype, LinkedFeaturePainter.prototype, {\n calculate_longest_feature_length: function calculate_longest_feature_length() {\n var longest_feature_length = 0;\n for (var i = 0, len = this.data.length; i < len; i++) {\n var feature = this.data[i];\n var feature_start = feature[1];\n var feature_end = feature[2];\n longest_feature_length = Math.max(longest_feature_length, feature_end - feature_start);\n }\n return longest_feature_length;\n },\n\n get_top_padding: function get_top_padding(width) {\n var view_range = this.view_end - this.view_start;\n var w_scale = width / view_range;\n return Math.min(128, Math.ceil(this.longest_feature_length / 2 * w_scale));\n },\n\n draw_connector: function draw_connector(ctx, block1_start, block1_end, block2_start, block2_end, y_start) {\n // Arc drawing -- from closest endpoints\n var x_center = (block1_end + block2_start) / 2;\n\n var radius = block2_start - x_center;\n\n // For full half circles\n var angle1 = Math.PI;\n\n var angle2 = 0;\n if (radius > 0) {\n ctx.beginPath();\n ctx.arc(x_center, y_start, block2_start - x_center, Math.PI, 0);\n ctx.stroke();\n }\n }\n});\n\n// Color stuff from less.js\n\nvar Color = function Color(rgb, a) {\n /**\n * The end goal here, is to parse the arguments\n * into an integer triplet, such as `128, 255, 0`\n *\n * This facilitates operations and conversions.\n */\n if (Array.isArray(rgb)) {\n this.rgb = rgb;\n } else if (rgb.length == 6) {\n this.rgb = rgb.match(/.{2}/g).map(function (c) {\n return parseInt(c, 16);\n });\n } else if (rgb.length == 7) {\n this.rgb = rgb.substring(1, 7).match(/.{2}/g).map(function (c) {\n return parseInt(c, 16);\n });\n } else {\n this.rgb = rgb.split(\"\").map(function (c) {\n return parseInt(c + c, 16);\n });\n }\n this.alpha = typeof a === \"number\" ? a : 1;\n};\nColor.prototype = {\n eval: function _eval() {\n return this;\n },\n\n //\n // If we have some transparency, the only way to represent it\n // is via `rgba`. Otherwise, we use the hex representation,\n // which has better compatibility with older browsers.\n // Values are capped between `0` and `255`, rounded and zero-padded.\n //\n toCSS: function toCSS() {\n if (this.alpha < 1.0) {\n return \"rgba(\" + this.rgb.map(function (c) {\n return Math.round(c);\n }).concat(this.alpha).join(\", \") + \")\";\n } else {\n return \"#\" + this.rgb.map(function (i) {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? \"0\" + i : i;\n }).join(\"\");\n }\n },\n\n toHSL: function toHSL() {\n var r = this.rgb[0] / 255;\n var g = this.rgb[1] / 255;\n var b = this.rgb[2] / 255;\n var a = this.alpha;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n var d = max - min;\n\n if (max === min) {\n h = s = 0;\n } else {\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h * 360, s: s, l: l, a: a };\n },\n\n toARGB: function toARGB() {\n var argb = [Math.round(this.alpha * 255)].concat(this.rgb);\n return \"#\" + argb.map(function (i) {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? \"0\" + i : i;\n }).join(\"\");\n },\n\n mix: function mix(color2, weight) {\n var color1 = this;\n\n var p = weight; // .value / 100.0;\n var w = p * 2 - 1;\n var a = color1.toHSL().a - color2.toHSL().a;\n\n var w1 = ((w * a == -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n var w2 = 1 - w1;\n\n var rgb = [color1.rgb[0] * w1 + color2.rgb[0] * w2, color1.rgb[1] * w1 + color2.rgb[1] * w2, color1.rgb[2] * w1 + color2.rgb[2] * w2];\n\n var alpha = color1.alpha * p + color2.alpha * (1 - p);\n\n return new Color(rgb, alpha);\n }\n};\n\n// End colors from less.js\n\nvar LinearRamp = function LinearRamp(start_color, end_color, start_value, end_value) {\n /**\n * Simple linear gradient\n */\n this.start_color = new Color(start_color);\n this.end_color = new Color(end_color);\n this.start_value = start_value;\n this.end_value = end_value;\n this.value_range = end_value - start_value;\n};\n\nLinearRamp.prototype.map_value = function (value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n value = (value - this.start_value) / this.value_range;\n // HACK: just red for now\n // return \"hsl(0,100%,\" + (value * 100) + \"%)\"\n return this.start_color.mix(this.end_color, 1 - value).toCSS();\n};\n\nvar SplitRamp = function SplitRamp(start_color, middle_color, end_color, start_value, end_value) {\n /**\n * Two gradients split away from 0\n */\n this.positive_ramp = new LinearRamp(middle_color, end_color, 0, end_value);\n this.negative_ramp = new LinearRamp(middle_color, start_color, 0, -start_value);\n this.start_value = start_value;\n this.end_value = end_value;\n};\n\nSplitRamp.prototype.map_value = function (value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n if (value >= 0) {\n return this.positive_ramp.map_value(value);\n } else {\n return this.negative_ramp.map_value(-value);\n }\n};\n\nvar DiagonalHeatmapPainter = function DiagonalHeatmapPainter(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n var i;\n var len;\n\n if (this.prefs.min_value === undefined) {\n var min_value = Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n min_value = Math.min(min_value, this.data[i][6]);\n }\n this.prefs.min_value = min_value;\n }\n if (this.prefs.max_value === undefined) {\n var max_value = -Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n max_value = Math.max(max_value, this.data[i][6]);\n }\n this.prefs.max_value = max_value;\n }\n};\n\nDiagonalHeatmapPainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Heatmap\",\n pos_color: \"#FF8C00\",\n neg_color: \"#4169E1\"\n};\n\nDiagonalHeatmapPainter.prototype.draw = function (ctx, width, height, w_scale) {\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var value_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n var invsqrt2 = 1 / Math.sqrt(2);\n\n var ramp = new SplitRamp(this.prefs.neg_color, \"#FFFFFF\", this.prefs.pos_color, min_value, max_value);\n\n var d;\n var s1;\n var e1;\n var s2;\n var e2;\n var value;\n\n var scale = function scale(p) {\n return (p - view_start) * w_scale;\n };\n\n ctx.save();\n\n // Draw into triangle, then rotate and scale\n ctx.rotate(-45 * Math.PI / 180);\n ctx.scale(invsqrt2, invsqrt2);\n\n // Paint track.\n for (var i = 0, len = data.length; i < len; i++) {\n d = data[i];\n\n s1 = scale(d[1]);\n e1 = scale(d[2]);\n s2 = scale(d[4]);\n e2 = scale(d[5]);\n value = d[6];\n\n ctx.fillStyle = ramp.map_value(value);\n ctx.fillRect(s1, s2, e1 - s1, e2 - s2);\n }\n\n ctx.restore();\n};\n\n/**\n * Utilities for painting reads.\n */\nvar ReadPainterUtils = function ReadPainterUtils(ctx, row_height, px_per_base, mode) {\n this.ctx = ctx;\n this.row_height = row_height;\n this.px_per_base = px_per_base;\n this.draw_details = (mode === \"Pack\" || mode === \"Auto\") && px_per_base >= ctx.canvas.manager.char_width_px;\n this.delete_details_thickness = 0.2;\n};\n\n_.extend(ReadPainterUtils.prototype, {\n /**\n * Draw deletion of base(s).\n * @param draw_detail if true, drawing in detail and deletion is drawn more subtly\n */\n draw_deletion: function draw_deletion(x, y, len) {\n this.ctx.fillStyle = \"black\";\n var thickness = (this.draw_details ? this.delete_details_thickness : 1) * this.row_height;\n y += 0.5 * (this.row_height - thickness);\n this.ctx.fillRect(x, y, len * this.px_per_base, thickness);\n }\n});\n\n/**\n * Paints variant data onto canvas.\n */\nvar VariantPainter = function VariantPainter(data, view_start, view_end, prefs, mode, base_color_fn) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.base_color_fn = base_color_fn;\n this.divider_height = 1;\n};\n\n_.extend(VariantPainter.prototype, Painter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function get_row_height() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Returns required height to draw a particular number of samples in a given mode.\n */\n get_required_height: function get_required_height(num_samples) {\n // FIXME: for single-sample data, height should be summary_height when zoomed out and\n // row_height when zoomed in.\n var height = this.prefs.summary_height;\n\n // If showing sample data, height is summary + divider + samples.\n if (num_samples > 1 && this.prefs.show_sample_data) {\n height += this.divider_height + num_samples * this.get_row_height();\n }\n return height;\n },\n\n /**\n * Draw on the context using a rectangle of width x height with scale w_scale.\n */\n draw: function draw(ctx, width, height, w_scale) {\n ctx.save();\n\n var /**\n * Returns dictionary of information about an indel; returns empty if there no indel. Assumes indel is left-aligned.\n * Dict attributes:\n * -type: 'insertion' or 'deletion'\n * -start: where the deletion starts relative to reference start\n * -len: how long the deletion is\n */\n get_indel_info = function get_indel_info(ref, alt) {\n var ref_len = ref.length;\n var alt_len = alt.length;\n var start = 0;\n var len = 1;\n var type = null;\n if (alt === \"-\") {\n type = \"deletion\";\n len = ref.length;\n } else if (ref.indexOf(alt) === 0 && ref_len > alt_len) {\n type = \"deletion\";\n len = ref_len - alt_len;\n start = alt_len;\n } else if (alt.indexOf(ref) === 0 && ref_len < alt_len) {\n // Insertion.\n type = \"insertion\";\n len = alt_len - ref_len;\n start = alt_len;\n }\n\n return type !== null ? { type: type, start: start, len: len } : {};\n };\n\n // Draw.\n var locus_data;\n\n var pos;\n var id;\n var ref;\n var alt;\n var qual;\n var filter;\n var sample_gts;\n var allele_counts;\n var variant;\n var draw_x_start;\n var draw_y_start;\n var genotype;\n\n var // Always draw variants at least 1 pixel wide.\n base_px = Math.max(1, Math.floor(w_scale));\n\n var // Determine number of samples.\n num_samples = this.data.length ? this.data[0][7].split(\",\").length : 0;\n\n var row_height = this.mode === \"Squish\" ? SQUISH_TRACK_HEIGHT : PACK_TRACK_HEIGHT;\n\n var // If zoomed out, fill the whole row with feature to make it easier to read;\n // when zoomed in, use feature height so that there are gaps in sample rows.\n feature_height = w_scale < 0.1 ? row_height : this.mode === \"Squish\" ? SQUISH_FEATURE_HEIGHT : PACK_FEATURE_HEIGHT;\n\n var draw_summary = true;\n\n var paint_utils = new ReadPainterUtils(ctx, row_height, w_scale, this.mode);\n\n var j;\n\n // If there's a single sample, update drawing variables.\n if (num_samples === 1) {\n row_height = feature_height = w_scale < ctx.canvas.manager.char_width_px ? this.prefs.summary_height : row_height;\n paint_utils.row_height = row_height;\n // No summary when there's a single sample.\n draw_summary = false;\n }\n\n // Draw divider between summary and samples.\n if (this.prefs.show_sample_data && draw_summary) {\n ctx.fillStyle = \"#F3F3F3\";\n ctx.globalAlpha = 1;\n ctx.fillRect(0, this.prefs.summary_height - this.divider_height, width, this.divider_height);\n }\n\n // Draw variants.\n ctx.textAlign = \"center\";\n for (var i = 0; i < this.data.length; i++) {\n // Get locus data.\n locus_data = this.data[i];\n pos = locus_data[1];\n ref = locus_data[3];\n alt = [locus_data[4].split(\",\")];\n sample_gts = locus_data[7].split(\",\");\n allele_counts = locus_data.slice(8);\n\n // Process alterate values to derive information about each alt.\n alt = _.map(_.flatten(alt), function (a) {\n var alt_info = {\n type: \"snp\",\n value: a,\n start: 0\n };\n\n var indel_info = get_indel_info(ref, a);\n\n return _.extend(alt_info, indel_info);\n });\n\n // Only draw locus data if it's in viewing region.\n if (pos < this.view_start || pos > this.view_end) {\n continue;\n }\n\n // Draw summary for alleles.\n if (draw_summary) {\n ctx.fillStyle = \"#999999\";\n ctx.globalAlpha = 1;\n for (j = 0; j < alt.length; j++) {\n // Draw background for summary.\n draw_x_start = this.get_start_draw_pos(pos + alt[j].start, w_scale);\n ctx.fillRect(draw_x_start, 0, base_px, this.prefs.summary_height);\n draw_y_start = this.prefs.summary_height;\n // Draw allele fractions onto summary.\n for (j = 0; j < alt.length; j++) {\n ctx.fillStyle = alt[j].type === \"deletion\" ? \"black\" : this.base_color_fn(alt[j].value);\n var allele_frac = allele_counts / sample_gts.length;\n var draw_height = Math.ceil(this.prefs.summary_height * allele_frac);\n ctx.fillRect(draw_x_start, draw_y_start - draw_height, base_px, draw_height);\n draw_y_start -= draw_height;\n }\n }\n }\n\n // Done drawing if not showing samples data.\n if (!this.prefs.show_sample_data) {\n continue;\n }\n\n // Draw sample genotype(s).\n draw_y_start = draw_summary ? this.prefs.summary_height + this.divider_height : 0;\n for (j = 0; j < sample_gts.length; j++, draw_y_start += row_height) {\n genotype = sample_gts[j] ? sample_gts[j].split(/\\/|\\|/) : [\"0\", \"0\"];\n\n // Get variant to draw and set drawing properties.\n variant = null;\n if (genotype[0] === genotype[1]) {\n if (genotype[0] === \".\") {\n // TODO: draw uncalled variant.\n } else if (genotype[0] !== \"0\") {\n // Homozygous for variant.\n variant = alt[parseInt(genotype[0], 10) - 1];\n ctx.globalAlpha = 1;\n }\n // else reference\n } else {\n // Heterozygous for variant.\n variant = genotype[0] !== \"0\" ? genotype[0] : genotype[1];\n variant = alt[parseInt(variant, 10) - 1];\n ctx.globalAlpha = 0.5;\n }\n\n // If there's a variant, draw it.\n if (variant) {\n draw_x_start = this.get_start_draw_pos(pos + variant.start, w_scale);\n if (variant.type === \"snp\") {\n var snp = variant.value;\n ctx.fillStyle = this.base_color_fn(snp);\n if (paint_utils.draw_details) {\n ctx.fillText(snp, this.get_draw_pos(pos, w_scale), draw_y_start + row_height);\n } else {\n ctx.fillRect(draw_x_start, draw_y_start + 1, base_px, feature_height);\n }\n } else if (variant.type === \"deletion\") {\n paint_utils.draw_deletion(draw_x_start, draw_y_start + 1, variant.len);\n } else {\n // TODO: handle insertions.\n }\n }\n }\n }\n\n ctx.restore();\n }\n});\n\nexports.default = {\n Scaler: Scaler,\n LinePainter: LinePainter,\n LinkedFeaturePainter: LinkedFeaturePainter,\n ReadPainter: ReadPainter,\n ArcLinkedFeaturePainter: ArcLinkedFeaturePainter,\n DiagonalHeatmapPainter: DiagonalHeatmapPainter,\n VariantPainter: VariantPainter\n};\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar extend = _.extend;\n\n/**\n * Filters that enable users to show/hide data points dynamically.\n */\nvar Filter = function Filter(obj_dict) {\n this.manager = null;\n this.name = obj_dict.name;\n // Index into payload to filter.\n this.index = obj_dict.index;\n this.tool_id = obj_dict.tool_id;\n // Name to use for filter when building expression for tool.\n this.tool_exp_name = obj_dict.tool_exp_name;\n};\n\nextend(Filter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function to_dict() {\n return {\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n };\n }\n});\n\n/**\n * Creates an action icon.\n */\nvar create_action_icon = function create_action_icon(title, css_class, on_click_fn) {\n return $(\"\").attr(\"href\", \"javascript:void(0);\").attr(\"title\", title).addClass(\"icon-button\").addClass(css_class).tooltip().click(on_click_fn);\n};\n\n/**\n * Number filters have a min, max as well as a low, high; low and high are used\n */\nvar NumberFilter = function NumberFilter(obj_dict) {\n //\n // Attribute init.\n //\n Filter.call(this, obj_dict);\n // Filter low/high. These values are used to filter elements.\n this.low = \"low\" in obj_dict ? obj_dict.low : -Number.MAX_VALUE;\n this.high = \"high\" in obj_dict ? obj_dict.high : Number.MAX_VALUE;\n // Slide min/max. These values are used to set/update slider.\n this.min = \"min\" in obj_dict ? obj_dict.min : Number.MAX_VALUE;\n this.max = \"max\" in obj_dict ? obj_dict.max : -Number.MAX_VALUE;\n // UI elements associated with filter.\n this.container = null;\n this.slider = null;\n this.slider_label = null;\n\n //\n // Create HTML.\n //\n\n // Function that supports inline text editing of slider values.\n // Enable users to edit parameter's value via a text box.\n var edit_slider_values = function edit_slider_values(container, span, slider) {\n container.click(function () {\n var cur_value = span.text();\n var max = parseFloat(slider.slider(\"option\", \"max\"));\n\n var input_size = max <= 1 ? 4 : max <= 1000000 ? max.toString().length : 6;\n\n var multi_value = false;\n var slider_row = $(this).parents(\".slider-row\");\n\n // Row now has input.\n slider_row.addClass(\"input\");\n\n // Increase input size if there are two values.\n if (slider.slider(\"option\", \"values\")) {\n input_size = 2 * input_size + 1;\n multi_value = true;\n }\n span.text(\"\");\n // Temporary input for changing value.\n $(\"\").attr(\"size\", input_size).attr(\"maxlength\", input_size).attr(\"value\", cur_value).appendTo(span).focus().select().click(function (e) {\n // Don't want click to propogate up to values_span and restart everything.\n e.stopPropagation();\n }).blur(function () {\n $(this).remove();\n span.text(cur_value);\n slider_row.removeClass(\"input\");\n }).keyup(function (e) {\n if (e.keyCode === 27) {\n // Escape key.\n $(this).trigger(\"blur\");\n } else if (e.keyCode === 13) {\n //\n // Enter/return key initiates callback. If new value(s) are in slider range,\n // change value (which calls slider's change() function).\n //\n var slider_min = slider.slider(\"option\", \"min\");\n\n var slider_max = slider.slider(\"option\", \"max\");\n\n var invalid = function invalid(a_val) {\n return isNaN(a_val) || a_val > slider_max || a_val < slider_min;\n };\n\n var new_value = $(this).val();\n if (!multi_value) {\n new_value = parseFloat(new_value);\n if (invalid(new_value)) {\n alert(\"Parameter value must be in the range [\" + slider_min + \"-\" + slider_max + \"]\");\n return $(this);\n }\n } else {\n // Multi value.\n new_value = new_value.split(\"-\");\n new_value = [parseFloat(new_value[0]), parseFloat(new_value[1])];\n if (invalid(new_value[0]) || invalid(new_value[1])) {\n alert(\"Parameter value must be in the range [\" + slider_min + \"-\" + slider_max + \"]\");\n return $(this);\n }\n }\n\n // Updating the slider also updates slider values and removes input.\n slider.slider(multi_value ? \"values\" : \"value\", new_value);\n slider_row.removeClass(\"input\");\n }\n });\n });\n };\n\n var filter = this;\n\n filter.parent_div = $(\"
\").addClass(\"filter-row slider-row\");\n\n // Set up filter label (name, values).\n var filter_label = $(\"
\").addClass(\"elt-label\").appendTo(filter.parent_div);\n\n var name_span = $(\"\").addClass(\"slider-name\").text(filter.name + \" \").appendTo(filter_label);\n\n var values_span = $(\"\").text(this.low + \"-\" + this.high);\n\n var values_span_container = $(\"\").addClass(\"slider-value\").appendTo(filter_label).append(\"[\").append(values_span).append(\"]\");\n\n filter.values_span = values_span;\n\n // Set up slider for filter.\n var slider_div = $(\"
\").addClass(\"slider\").appendTo(filter.parent_div);\n filter.control_element = $(\"
\").attr(\"id\", filter.name + \"-filter-control\").appendTo(slider_div);\n filter.control_element.slider({\n range: true,\n min: this.min,\n max: this.max,\n step: this.get_slider_step(this.min, this.max),\n values: [this.low, this.high],\n slide: function slide(event, ui) {\n filter.slide(event, ui);\n },\n change: function change(event, ui) {\n filter.control_element.slider(\"option\", \"slide\").call(filter.control_element, event, ui);\n }\n });\n filter.slider = filter.control_element;\n filter.slider_label = values_span;\n\n // Enable users to edit slider values via text box.\n edit_slider_values(values_span_container, values_span, filter.control_element);\n\n // Set up filter display controls.\n var display_controls_div = $(\"
\").addClass(\"display-controls\").appendTo(filter.parent_div);\n this.transparency_icon = create_action_icon(\"Use filter for data transparency\", \"layer-transparent\", function () {\n if (filter.manager.alpha_filter !== filter) {\n // Setting this filter as the alpha filter.\n filter.manager.alpha_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div.find(\".layer-transparent\").removeClass(\"active\").hide();\n filter.transparency_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.alpha_filter = null;\n filter.transparency_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }).appendTo(display_controls_div).hide();\n this.height_icon = create_action_icon(\"Use filter for data height\", \"arrow-resize-090\", function () {\n if (filter.manager.height_filter !== filter) {\n // Setting this filter as the height filter.\n filter.manager.height_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div.find(\".arrow-resize-090\").removeClass(\"active\").hide();\n filter.height_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.height_filter = null;\n filter.height_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }).appendTo(display_controls_div).hide();\n filter.parent_div.hover(function () {\n filter.transparency_icon.show();\n filter.height_icon.show();\n }, function () {\n if (filter.manager.alpha_filter !== filter) {\n filter.transparency_icon.hide();\n }\n if (filter.manager.height_filter !== filter) {\n filter.height_icon.hide();\n }\n });\n\n // Add to clear floating layout.\n $(\"
\").appendTo(filter.parent_div);\n};\nextend(NumberFilter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function to_dict() {\n var obj_dict = Filter.prototype.to_dict.call(this);\n return extend(obj_dict, {\n type: \"number\",\n min: this.min,\n max: this.max,\n low: this.low,\n high: this.high\n });\n },\n /**\n * Return a copy of filter.\n */\n copy: function copy() {\n return new NumberFilter({\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n });\n },\n /**\n * Get step for slider.\n */\n // FIXME: make this a \"static\" function.\n get_slider_step: function get_slider_step(min, max) {\n var range = max - min;\n return range <= 2 ? 0.01 : 1;\n },\n /**\n * Handle slide events.\n */\n slide: function slide(event, ui) {\n var values = ui.values;\n\n // Set new values in UI.\n this.values_span.text(values[0] + \"-\" + values[1]);\n\n // Set new values in filter.\n this.low = values[0];\n this.high = values[1];\n\n // Set timeout to update if filter low, high are stable.\n var self = this;\n setTimeout(function () {\n if (values[0] === self.low && values[1] === self.high) {\n self.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }\n }, 25);\n },\n /**\n * Returns true if filter can be applied to element.\n */\n applies_to: function applies_to(element) {\n if (element.length > this.index) {\n return true;\n }\n return false;\n },\n /**\n * Helper function: returns true if value in in filter's [low, high] range.\n */\n _keep_val: function _keep_val(val) {\n return isNaN(val) || val >= this.low && val <= this.high;\n },\n /**\n * Returns true if (a) element's value(s) is in [low, high] (range is inclusive)\n * or (b) if value is non-numeric and hence unfilterable.\n */\n keep: function keep(element) {\n if (!this.applies_to(element)) {\n // No element to filter on.\n return true;\n }\n\n // Keep value function.\n var filter = this;\n\n // Do filtering.\n var to_filter = element[this.index];\n if (to_filter instanceof Array) {\n var returnVal = true;\n for (var i = 0; i < to_filter.length; i++) {\n if (!this._keep_val(to_filter[i])) {\n // Exclude element.\n returnVal = false;\n break;\n }\n }\n return returnVal;\n } else {\n return this._keep_val(element[this.index]);\n }\n },\n /**\n * Update filter's min and max values based on element's values.\n */\n update_attrs: function update_attrs(element) {\n var updated = false;\n if (!this.applies_to(element)) {\n return updated;\n }\n\n //\n // Update filter's min, max based on element values.\n //\n\n // Make value(s) into an Array.\n var values = element[this.index];\n if (!(values instanceof Array)) {\n values = [values];\n }\n\n // Loop through values and update min, max.\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n if (value < this.min) {\n this.min = Math.floor(value);\n updated = true;\n }\n if (value > this.max) {\n this.max = Math.ceil(value);\n updated = true;\n }\n }\n return updated;\n },\n /**\n * Update filter's slider.\n */\n update_ui_elt: function update_ui_elt() {\n // Only show filter if min < max because filter is not useful otherwise. This\n // covers all corner cases, such as when min, max have not been defined and\n // when min == max.\n if (this.min < this.max) {\n this.parent_div.show();\n } else {\n this.parent_div.hide();\n }\n\n var slider_min = this.slider.slider(\"option\", \"min\");\n var slider_max = this.slider.slider(\"option\", \"max\");\n if (this.min < slider_min || this.max > slider_max) {\n // Update slider min, max, step.\n this.slider.slider(\"option\", \"min\", this.min);\n this.slider.slider(\"option\", \"max\", this.max);\n this.slider.slider(\"option\", \"step\", this.get_slider_step(this.min, this.max));\n // Refresh slider:\n // TODO: do we want to keep current values or reset to min/max?\n // Currently we reset values:\n this.slider.slider(\"option\", \"values\", [this.min, this.max]);\n // To use the current values.\n //var values = this.slider.slider( \"option\", \"values\" );\n //this.slider.slider( \"option\", \"values\", values );\n }\n }\n});\n\n/**\n * Manages a set of filters.\n */\nvar FiltersManager = function FiltersManager(track, obj_dict) {\n this.track = track;\n this.alpha_filter = null;\n this.height_filter = null;\n this.filters = [];\n\n //\n // Create HTML.\n //\n\n //\n // Create parent div.\n //\n this.parent_div = $(\"
\").addClass(\"filters\").hide();\n // Disable dragging, double clicking, keys on div so that actions on slider do not impact viz.\n this.parent_div.bind(\"drag\", function (e) {\n e.stopPropagation();\n }).click(function (e) {\n e.stopPropagation();\n }).bind(\"dblclick\", function (e) {\n e.stopPropagation();\n }).bind(\"keydown\", function (e) {\n e.stopPropagation();\n });\n\n //\n // Restore state from dict.\n //\n if (obj_dict && \"filters\" in obj_dict) {\n // Second condition needed for backward compatibility.\n var alpha_filter_name = \"alpha_filter\" in obj_dict ? obj_dict.alpha_filter : null;\n\n var height_filter_name = \"height_filter\" in obj_dict ? obj_dict.height_filter : null;\n\n var filters_dict = obj_dict.filters;\n var filter;\n for (var i = 0; i < filters_dict.length; i++) {\n if (filters_dict[i].type === \"number\") {\n filter = new NumberFilter(filters_dict[i]);\n this.add_filter(filter);\n if (filter.name === alpha_filter_name) {\n this.alpha_filter = filter;\n filter.transparency_icon.addClass(\"active\").show();\n }\n if (filter.name === height_filter_name) {\n this.height_filter = filter;\n filter.height_icon.addClass(\"active\").show();\n }\n } else {\n console.log(\"ERROR: unsupported filter: \", name, type);\n }\n }\n\n if (\"visible\" in obj_dict && obj_dict.visible) {\n this.parent_div.show();\n }\n }\n\n // Add button to filter complete dataset.\n if (this.filters.length !== 0) {\n var run_buttons_row = $(\"
\").addClass(\"param-row\").appendTo(this.parent_div);\n var run_on_dataset_button = $(\"\").attr(\"value\", \"Run on complete dataset\").appendTo(run_buttons_row);\n var filter_manager = this;\n run_on_dataset_button.click(function () {\n filter_manager.run_on_dataset();\n });\n }\n};\n\nextend(FiltersManager.prototype, {\n // HTML manipulation and inspection.\n show: function show() {\n this.parent_div.show();\n },\n hide: function hide() {\n this.parent_div.hide();\n },\n toggle: function toggle() {\n this.parent_div.toggle();\n },\n visible: function visible() {\n return this.parent_div.is(\":visible\");\n },\n /**\n * Returns dictionary for manager.\n */\n to_dict: function to_dict() {\n var obj_dict = {};\n var filter_dicts = [];\n var filter;\n\n // Include individual filter states.\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n filter_dicts.push(filter.to_dict());\n }\n obj_dict.filters = filter_dicts;\n\n // Include transparency, height filters.\n obj_dict.alpha_filter = this.alpha_filter ? this.alpha_filter.name : null;\n obj_dict.height_filter = this.height_filter ? this.height_filter.name : null;\n\n // Include visibility.\n obj_dict.visible = this.parent_div.is(\":visible\");\n\n return obj_dict;\n },\n /**\n * Return a copy of the manager.\n */\n copy: function copy(new_track) {\n var copy = new FiltersManager(new_track);\n for (var i = 0; i < this.filters.length; i++) {\n copy.add_filter(this.filters[i].copy());\n }\n return copy;\n },\n /**\n * Add a filter to the manager.\n */\n add_filter: function add_filter(filter) {\n filter.manager = this;\n this.parent_div.append(filter.parent_div);\n this.filters.push(filter);\n },\n /**\n * Remove all filters from manager.\n */\n remove_all: function remove_all() {\n this.filters = [];\n this.parent_div.children().remove();\n },\n /**\n * Initialize filters.\n */\n\n init_filters: function init_filters() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.update_ui_elt();\n }\n },\n /**\n * Clear filters so that they do not impact track display.\n */\n clear_filters: function clear_filters() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.slider.slider(\"option\", \"values\", [filter.min, filter.max]);\n }\n this.alpha_filter = null;\n this.height_filter = null;\n\n // Hide icons for setting filters.\n this.parent_div.find(\".icon-button\").hide();\n },\n run_on_dataset: function run_on_dataset() {\n // Get or create dictionary item.\n var get_or_create_dict_item = function get_or_create_dict_item(dict, key, new_item) {\n // Add new item to dict if\n if (!(key in dict)) {\n dict[key] = new_item;\n }\n return dict[key];\n };\n\n //\n // Find and group active filters. Active filters are those being used to hide data.\n // Filters with the same tool id are grouped.\n //\n var active_filters = {};\n\n var filter;\n var tool_filter_conditions;\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n if (filter.tool_id) {\n // Add filtering conditions if filter low/high are set.\n if (filter.min !== filter.low) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + \" >= \" + filter.low;\n }\n if (filter.max !== filter.high) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + \" <= \" + filter.high;\n }\n }\n }\n\n //\n // Use tools to run filters.\n //\n\n // Create list of (tool_id, tool_filters) tuples.\n var active_filters_list = [];\n for (var tool_id in active_filters) {\n active_filters_list[active_filters_list.length] = [tool_id, active_filters[tool_id]];\n }\n\n // Invoke recursive function to run filters; this enables chaining of filters via\n // iteratively application.\n (function run_filter(input_dataset_id, filters) {\n var // Set up filtering info and params.\n filter_tuple = filters[0];\n\n var tool_id = filter_tuple[0];\n var tool_filters = filter_tuple[1];\n var tool_filter_str = \"(\" + tool_filters.join(\") and (\") + \")\";\n\n var url_params = {\n cond: tool_filter_str,\n input: input_dataset_id,\n target_dataset_id: input_dataset_id,\n tool_id: tool_id\n };\n\n // Remove current filter.\n filters = filters.slice(1);\n\n $.getJSON(run_tool_url, url_params, function (response) {\n if (response.error) {\n // General error.\n Galaxy.modal.show({\n title: \"Filter Dataset\",\n body: \"Error running tool \" + tool_id,\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else if (filters.length === 0) {\n // No more filters to run.\n Galaxy.modal.show({\n title: \"Filtering Dataset\",\n body: \"Filter(s) are running on the complete dataset. Outputs are in dataset's history.\",\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else {\n // More filters to run.\n run_filter(response.dataset_id, filters);\n }\n });\n })(this.track.dataset_id, active_filters_list);\n }\n});\n\nexports.default = {\n FiltersManager: FiltersManager,\n NumberFilter: NumberFilter\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiPortlet = __webpack_require__(21);\n\nvar _uiPortlet2 = _interopRequireDefault(_uiPortlet);\n\nvar _formRepeat = __webpack_require__(120);\n\nvar _formRepeat2 = _interopRequireDefault(_formRepeat);\n\nvar _formInput = __webpack_require__(121);\n\nvar _formInput2 = _interopRequireDefault(_formInput);\n\nvar _formParameters = __webpack_require__(122);\n\nvar _formParameters2 = _interopRequireDefault(_formParameters);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n This class creates a form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.\n*/\nvar View = Backbone.View.extend({\n initialize: function initialize(app, options) {\n this.app = app;\n this.inputs = options.inputs;\n this.parameters = new _formParameters2.default();\n this.setElement($(\"
\"));\n this.render();\n },\n\n /** Render section view */\n render: function render() {\n var self = this;\n this.$el.empty();\n _.each(this.inputs, function (input) {\n self.add(input);\n });\n },\n\n /** Add a new input element */\n add: function add(input) {\n var input_def = jQuery.extend(true, {}, input);\n input_def.id = input.id = _utils2.default.uid();\n this.app.input_list[input_def.id] = input_def;\n switch (input_def.type) {\n case \"conditional\":\n this._addConditional(input_def);\n break;\n case \"repeat\":\n this._addRepeat(input_def);\n break;\n case \"section\":\n this._addSection(input_def);\n break;\n default:\n this._addRow(input_def);\n }\n },\n\n /** Add a conditional block */\n _addConditional: function _addConditional(input_def) {\n var self = this;\n input_def.test_param.id = input_def.id;\n this.app.model.get(\"sustain_conditionals\") && (input_def.test_param.disabled = true);\n var field = this._addRow(input_def.test_param);\n\n // set onchange event for test parameter\n field.model && field.model.set(\"onchange\", function (value) {\n var selectedCase = self.app.data.matchCase(input_def, value);\n for (var i in input_def.cases) {\n var case_def = input_def.cases[i];\n var section_row = self.$(\"#\" + input_def.id + \"-section-\" + i);\n var nonhidden = false;\n for (var j in case_def.inputs) {\n if (!case_def.inputs[j].hidden) {\n nonhidden = true;\n break;\n }\n }\n if (i == selectedCase && nonhidden) {\n section_row.fadeIn(\"fast\");\n } else {\n section_row.hide();\n }\n }\n self.app.trigger(\"change\");\n });\n\n // add conditional sub sections\n for (var i in input_def.cases) {\n var sub_section = new View(this.app, {\n inputs: input_def.cases[i].inputs\n });\n this._append(sub_section.$el.addClass(\"ui-form-section\"), input_def.id + \"-section-\" + i);\n }\n\n // trigger refresh on conditional input field after all input elements have been created\n field.trigger(\"change\");\n },\n\n /** Add a repeat block */\n _addRepeat: function _addRepeat(input_def) {\n var self = this;\n var block_index = 0;\n\n // create repeat block element\n var repeat = new _formRepeat2.default.View({\n title: input_def.title || \"Repeat\",\n min: input_def.min,\n max: input_def.max,\n onnew: function onnew() {\n create(input_def.inputs);\n self.app.trigger(\"change\");\n }\n });\n\n // helper function to create new repeat blocks\n function create(inputs) {\n var sub_section_id = input_def.id + \"-section-\" + block_index++;\n var sub_section = new View(self.app, { inputs: inputs });\n repeat.add({\n id: sub_section_id,\n $el: sub_section.$el,\n ondel: function ondel() {\n repeat.del(sub_section_id);\n self.app.trigger(\"change\");\n }\n });\n }\n\n //\n // add parsed/minimum number of repeat blocks\n //\n var n_cache = _.size(input_def.cache);\n for (var i = 0; i < Math.max(Math.max(n_cache, input_def.min || 0), input_def.default || 0); i++) {\n create(i < n_cache ? input_def.cache[i] : input_def.inputs);\n }\n\n // hide options\n this.app.model.get(\"sustain_repeats\") && repeat.hideOptions();\n\n // create input field wrapper\n var input_element = new _formInput2.default(this.app, {\n label: input_def.title || input_def.name,\n help: input_def.help,\n field: repeat\n });\n this._append(input_element.$el, input_def.id);\n },\n\n /** Add a customized section */\n _addSection: function _addSection(input_def) {\n var portlet = new _uiPortlet2.default.View({\n title: input_def.title || input_def.name,\n cls: \"ui-portlet-section\",\n collapsible: true,\n collapsible_button: true,\n collapsed: !input_def.expanded\n });\n portlet.append(new View(this.app, { inputs: input_def.inputs }).$el);\n portlet.append($(\"
\").addClass(\"ui-form-info\").html(input_def.help));\n this.app.on(\"expand\", function (input_id) {\n portlet.$(\"#\" + input_id).length > 0 && portlet.expand();\n });\n this._append(portlet.$el, input_def.id);\n },\n\n /** Add a single input field element */\n _addRow: function _addRow(input_def) {\n var self = this;\n var id = input_def.id;\n input_def.onchange = input_def.onchange || function () {\n self.app.trigger(\"change\", id);\n };\n var field = this.parameters.create(input_def);\n this.app.field_list[id] = field;\n var input_element = new _formInput2.default(this.app, {\n name: input_def.name,\n label: input_def.hide_label ? \"\" : input_def.label || input_def.name,\n value: input_def.value,\n text_value: input_def.text_value,\n collapsible_value: input_def.collapsible_value,\n collapsible_preview: input_def.collapsible_preview,\n help: input_def.help,\n argument: input_def.argument,\n disabled: input_def.disabled,\n color: input_def.color,\n style: input_def.style,\n backdrop: input_def.backdrop,\n hidden: input_def.hidden,\n fixed: input_def.fixed,\n field: field\n });\n this.app.element_list[id] = input_element;\n this._append(input_element.$el, input_def.id);\n return field;\n },\n\n /** Append a new element to the form i.e. input element, repeat block, conditionals etc. */\n _append: function _append($el, id) {\n this.$el.append($el.addClass(\"section-row\").attr(\"id\", id));\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiPortlet = __webpack_require__(21);\n\nvar _uiPortlet2 = _interopRequireDefault(_uiPortlet);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n this.list = {};\n this.options = _utils2.default.merge(options, {\n title: \"Repeat\",\n empty_text: \"Not available.\",\n max: null,\n min: null\n });\n this.button_new = new _uiMisc2.default.ButtonIcon({\n icon: \"fa-plus\",\n title: \"Insert \" + this.options.title,\n tooltip: \"Add new \" + this.options.title + \" block\",\n cls: \"ui-button-icon ui-clear-float form-repeat-add\",\n onclick: function onclick() {\n options.onnew && options.onnew();\n }\n });\n this.setElement($(\"
\").append(this.$list = $(\"
\")).append($(\"
\").append(this.button_new.$el)));\n },\n\n /** Number of repeat blocks */\n size: function size() {\n return _.size(this.list);\n },\n\n /** Add new repeat block */\n add: function add(options) {\n if (!options.id || this.list[options.id]) {\n Galaxy.emit.debug(\"form-repeat::add()\", \"Duplicate or invalid repeat block id.\");\n return;\n }\n var button_delete = new _uiMisc2.default.ButtonIcon({\n icon: \"fa-trash-o\",\n tooltip: \"Delete this repeat block\",\n cls: \"ui-button-icon-plain form-repeat-delete\",\n onclick: function onclick() {\n options.ondel && options.ondel();\n }\n });\n var portlet = new _uiPortlet2.default.View({\n id: options.id,\n title: \"placeholder\",\n cls: options.cls || \"ui-portlet-repeat\",\n operations: { button_delete: button_delete }\n });\n portlet.append(options.$el);\n portlet.$el.addClass(\"section-row\").hide();\n this.list[options.id] = portlet;\n this.$list.append(portlet.$el.fadeIn(\"fast\"));\n this.options.max > 0 && this.size() >= this.options.max && this.button_new.disable();\n this._refresh();\n },\n\n /** Delete repeat block */\n del: function del(id) {\n if (!this.list[id]) {\n Galaxy.emit.debug(\"form-repeat::del()\", \"Invalid repeat block id.\");\n return;\n }\n this.$list.find(\"#\" + id).remove();\n delete this.list[id];\n this.button_new.enable();\n this._refresh();\n },\n\n /** Remove all */\n delAll: function delAll() {\n for (var id in this.list) {\n this.del(id);\n }\n },\n\n /** Hides add/del options */\n hideOptions: function hideOptions() {\n this.button_new.$el.hide();\n _.each(this.list, function (portlet) {\n portlet.hideOperation(\"button_delete\");\n });\n _.isEmpty(this.list) && this.$el.append($(\"
\").addClass(\"ui-form-info\").html(this.options.empty_text));\n },\n\n /** Refresh view */\n _refresh: function _refresh() {\n var index = 0;\n for (var id in this.list) {\n var portlet = this.list[id];\n portlet.title(++index + \": \" + this.options.title);\n portlet[this.size() > this.options.min ? \"showOperation\" : \"hideOperation\"](\"button_delete\");\n }\n }\n}); /** This class creates a ui component which enables the dynamic creation of portlets */\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n This class creates a form input element wrapper\n*/\n\nexports.default = Backbone.View.extend({\n initialize: function initialize(app, options) {\n this.app = app;\n this.app_options = app.model ? app.model.attributes : {};\n this.field = options && options.field || new Backbone.View();\n this.model = options && options.model || new Backbone.Model({\n text_enable: this.app_options.text_enable || \"Enable\",\n text_disable: this.app_options.text_disable || \"Disable\",\n cls_enable: this.app_options.cls_enable || \"fa fa-caret-square-o-down\",\n cls_disable: this.app_options.cls_disable || \"fa fa-caret-square-o-up\",\n always_refresh: this.app_options.always_refresh\n }).set(options);\n\n // set element and link components\n this.setElement(this._template());\n this.$field = this.$(\".ui-form-field\");\n this.$info = this.$(\".ui-form-info\");\n this.$preview = this.$(\".ui-form-preview\");\n this.$collapsible = this.$(\".ui-form-collapsible\");\n this.$collapsible_text = this.$(\".ui-form-collapsible-text\");\n this.$collapsible_icon = this.$(\".ui-form-collapsible-icon\");\n this.$title = this.$(\".ui-form-title\");\n this.$title_text = this.$(\".ui-form-title-text\");\n this.$error_text = this.$(\".ui-form-error-text\");\n this.$error = this.$(\".ui-form-error\");\n this.$backdrop = this.$(\".ui-form-backdrop\");\n\n // add field element\n this.$field.prepend(this.field.$el);\n\n // decide wether to expand or collapse fields\n var collapsible_value = this.model.get(\"collapsible_value\");\n this.field.collapsed = collapsible_value !== undefined && JSON.stringify(this.model.get(\"value\")) == JSON.stringify(collapsible_value);\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n\n // add click handler\n var self = this;\n this.$collapsible.on(\"click\", function () {\n self.field.collapsed = !self.field.collapsed;\n app.trigger && app.trigger(\"change\");\n self.render();\n });\n\n // hide error on value change\n if (this.field.model && !this.model.get(\"always_refresh\")) {\n this.listenTo(this.field.model, \"change:value\", function () {\n self.reset();\n });\n }\n },\n\n /** Set backdrop for input element */\n backdrop: function backdrop() {\n this.model.set(\"backdrop\", true);\n },\n\n /** Set error text */\n error: function error(text) {\n this.model.set(\"error_text\", text);\n },\n\n /** Reset this view */\n reset: function reset() {\n !this.model.get(\"fixed\") && this.model.set(\"error_text\", null);\n },\n\n render: function render() {\n // render help\n $(\".tooltip\").hide();\n var help_text = this.model.get(\"help\", \"\");\n var help_argument = this.model.get(\"argument\");\n if (help_argument && help_text.indexOf(\"(\" + help_argument + \")\") == -1) {\n help_text += \" (\" + help_argument + \")\";\n }\n this.$info.html(help_text);\n // render visibility\n this.$el[this.model.get(\"hidden\") ? \"hide\" : \"show\"]();\n // render preview view for collapsed fields\n this.$preview[this.field.collapsed && this.model.get(\"collapsible_preview\") || this.model.get(\"disabled\") ? \"show\" : \"hide\"]().html(_.escape(this.model.get(\"text_value\")));\n // render error messages\n var error_text = this.model.get(\"error_text\");\n this.$error[error_text ? \"show\" : \"hide\"]();\n this.$el[error_text ? \"addClass\" : \"removeClass\"](\"ui-error\");\n this.$error_text.html(error_text);\n // render backdrop\n this.$backdrop[this.model.get(\"backdrop\") ? \"show\" : \"hide\"]();\n // render input field\n this.field.collapsed || this.model.get(\"disabled\") ? this.$field.hide() : this.$field.show();\n // render input field color and style\n this.field.model && this.field.model.set({\n color: this.model.get(\"color\"),\n style: this.model.get(\"style\")\n });\n // render collapsible options\n if (!this.model.get(\"disabled\") && this.model.get(\"collapsible_value\") !== undefined) {\n var collapsible_state = this.field.collapsed ? \"enable\" : \"disable\";\n this.$title_text.hide();\n this.$collapsible.show();\n this.$collapsible_text.text(this.model.get(\"label\"));\n this.$collapsible_icon.removeClass().addClass(\"icon\").addClass(this.model.get(\"cls_\" + collapsible_state)).attr(\"data-original-title\", this.model.get(\"text_\" + collapsible_state)).tooltip({ placement: \"bottom\" });\n } else {\n this.$title_text.show().text(this.model.get(\"label\"));\n this.$collapsible.hide();\n }\n },\n\n _template: function _template() {\n return $(\"
\").addClass(\"ui-form-element\").append($(\"
\").addClass(\"ui-form-error ui-error\").append($(\"\").addClass(\"fa fa-arrow-down\")).append($(\"\").addClass(\"ui-form-error-text\"))).append($(\"
\").addClass(\"ui-form-title\").append($(\"
\").addClass(\"ui-form-collapsible\").append($(\"\").addClass(\"ui-form-collapsible-icon\")).append($(\"\").addClass(\"ui-form-collapsible-text\"))).append($(\"\").addClass(\"ui-form-title-text\"))).append($(\"
\").addClass(\"ui-form-field\").append($(\"\").addClass(\"ui-form-info\")).append($(\"
\").addClass(\"ui-form-backdrop\"))).append($(\"
\").addClass(\"ui-form-preview\"));\n }\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiSelectContent = __webpack_require__(123);\n\nvar _uiSelectContent2 = _interopRequireDefault(_uiSelectContent);\n\nvar _uiSelectLibrary = __webpack_require__(124);\n\nvar _uiSelectLibrary2 = _interopRequireDefault(_uiSelectLibrary);\n\nvar _uiSelectFtp = __webpack_require__(125);\n\nvar _uiSelectFtp2 = _interopRequireDefault(_uiSelectFtp);\n\nvar _uiSelectGenomespace = __webpack_require__(126);\n\nvar _uiSelectGenomespace2 = _interopRequireDefault(_uiSelectGenomespace);\n\nvar _uiColorPicker = __webpack_require__(128);\n\nvar _uiColorPicker2 = _interopRequireDefault(_uiColorPicker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// create form view\nexports.default = Backbone.Model.extend({\n /** Available parameter types */\n types: {\n text: \"_fieldText\",\n password: \"_fieldText\",\n select: \"_fieldSelect\",\n data_column: \"_fieldSelect\",\n genomebuild: \"_fieldSelect\",\n data: \"_fieldData\",\n data_collection: \"_fieldData\",\n integer: \"_fieldSlider\",\n float: \"_fieldSlider\",\n boolean: \"_fieldBoolean\",\n drill_down: \"_fieldDrilldown\",\n color: \"_fieldColor\",\n hidden: \"_fieldHidden\",\n hidden_data: \"_fieldHidden\",\n baseurl: \"_fieldHidden\",\n library_data: \"_fieldLibrary\",\n ftpfile: \"_fieldFtp\",\n upload: \"_fieldUpload\",\n genomespacefile: \"_fieldGenomeSpace\"\n },\n\n /** Returns an input field for a given field type */\n create: function create(input_def) {\n var fieldClass = this.types[input_def.type];\n var field = typeof this[fieldClass] === \"function\" ? this[fieldClass].call(this, input_def) : null;\n if (!field) {\n field = input_def.options ? this._fieldSelect(input_def) : this._fieldText(input_def);\n Galaxy.emit.debug(\"form-parameters::_addRow()\", \"Auto matched field type (\" + input_def.type + \").\");\n }\n input_def.value === undefined && (input_def.value = null);\n field.value(input_def.value);\n return field;\n },\n\n /** Data input field */\n _fieldData: function _fieldData(input_def) {\n return new _uiSelectContent2.default.View({\n id: \"field-\" + input_def.id,\n extensions: input_def.extensions,\n optional: input_def.optional,\n multiple: input_def.multiple,\n type: input_def.type,\n flavor: input_def.flavor,\n data: input_def.options,\n onchange: input_def.onchange\n });\n },\n\n /** Select/Checkbox/Radio options field */\n _fieldSelect: function _fieldSelect(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // customize properties\n if (input_def.type == \"data_column\") {\n input_def.error_text = \"Missing columns in referenced dataset.\";\n }\n\n // identify available options\n var data = input_def.data;\n if (!data) {\n data = [];\n _.each(input_def.options, function (option) {\n data.push({ label: option[0], value: option[1] });\n });\n }\n\n // identify display type\n var SelectClass = _uiMisc2.default.Select;\n switch (input_def.display) {\n case \"checkboxes\":\n SelectClass = _uiMisc2.default.Checkbox;\n break;\n case \"radio\":\n SelectClass = _uiMisc2.default.Radio;\n break;\n case \"radiobutton\":\n SelectClass = _uiMisc2.default.RadioButton;\n break;\n }\n\n // create select field\n return new SelectClass.View({\n id: \"field-\" + input_def.id,\n data: data,\n error_text: input_def.error_text || \"No options available\",\n readonly: input_def.readonly,\n multiple: input_def.multiple,\n optional: input_def.optional,\n onchange: input_def.onchange,\n individual: input_def.individual,\n searchable: input_def.flavor !== \"workflow\"\n });\n },\n\n /** Drill down options field */\n _fieldDrilldown: function _fieldDrilldown(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // create drill down field\n return new _uiMisc2.default.Drilldown.View({\n id: \"field-\" + input_def.id,\n data: input_def.options,\n display: input_def.display,\n optional: input_def.optional,\n onchange: input_def.onchange\n });\n },\n\n /** Text input field */\n _fieldText: function _fieldText(input_def) {\n // field replaces e.g. a select field\n if (input_def.options && input_def.data) {\n input_def.area = input_def.multiple;\n if (_utils2.default.isEmpty(input_def.value)) {\n input_def.value = null;\n } else {\n if ($.isArray(input_def.value)) {\n var str_value = \"\";\n for (var i in input_def.value) {\n str_value += String(input_def.value[i]);\n if (!input_def.multiple) {\n break;\n }\n str_value += \"\\n\";\n }\n input_def.value = str_value;\n }\n }\n }\n // create input element\n return new _uiMisc2.default.Input({\n id: \"field-\" + input_def.id,\n type: input_def.type,\n area: input_def.area,\n readonly: input_def.readonly,\n placeholder: input_def.placeholder,\n datalist: input_def.datalist,\n onchange: input_def.onchange\n });\n },\n\n /** Slider field */\n _fieldSlider: function _fieldSlider(input_def) {\n return new _uiMisc2.default.Slider.View({\n id: \"field-\" + input_def.id,\n precise: input_def.type == \"float\",\n is_workflow: input_def.is_workflow,\n min: input_def.min,\n max: input_def.max,\n onchange: input_def.onchange\n });\n },\n\n /** Hidden field */\n _fieldHidden: function _fieldHidden(input_def) {\n return new _uiMisc2.default.Hidden({\n id: \"field-\" + input_def.id,\n info: input_def.info\n });\n },\n\n /** Boolean field */\n _fieldBoolean: function _fieldBoolean(input_def) {\n return new _uiMisc2.default.RadioButton.View({\n id: \"field-\" + input_def.id,\n data: [{ label: \"Yes\", value: \"true\" }, { label: \"No\", value: \"false\" }],\n onchange: input_def.onchange\n });\n },\n\n /** Color picker field */\n _fieldColor: function _fieldColor(input_def) {\n return new _uiColorPicker2.default({\n id: \"field-\" + input_def.id,\n onchange: input_def.onchange\n });\n },\n\n /** Library dataset field */\n _fieldLibrary: function _fieldLibrary(input_def) {\n return new _uiSelectLibrary2.default.View({\n id: \"field-\" + input_def.id,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** FTP file field */\n _fieldFtp: function _fieldFtp(input_def) {\n return new _uiSelectFtp2.default.View({\n id: \"field-\" + input_def.id,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** GenomeSpace file select field\n */\n _fieldGenomeSpace: function _fieldGenomeSpace(input_def) {\n var self = this;\n return new _uiSelectGenomespace2.default.View({\n id: \"field-\" + input_def.id,\n onchange: function onchange() {\n self.app.trigger(\"change\");\n }\n });\n },\n\n /** Upload file field */\n _fieldUpload: function _fieldUpload(input_def) {\n return new _uiMisc2.default.Upload({\n id: \"field-\" + input_def.id,\n onchange: input_def.onchange\n });\n }\n}); /**\n This class creates input elements. New input parameter types should be added to the types dictionary.\n */\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiSelectDefault = __webpack_require__(62);\n\nvar _uiSelectDefault2 = _interopRequireDefault(_uiSelectDefault);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** Batch mode variations */\nvar Batch = { DISABLED: \"disabled\", ENABLED: \"enabled\", LINKED: \"linked\" };\n\n/** List of available content selectors options */\nvar Configurations = {\n data: [{\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }, {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.LINKED\n }, {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.LINKED\n }],\n data_multiple: [{\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n }, {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collections\",\n multiple: true,\n batch: Batch.DISABLED\n }],\n data_collection: [{\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }],\n workflow_data: [{\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }],\n workflow_data_multiple: [{\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n }],\n workflow_data_collection: [{\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }],\n module_data: [{\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }, {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.ENABLED\n }],\n module_data_collection: [{\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }, {\n src: \"hdca\",\n icon: \"fa-folder\",\n tooltip: \"Multiple collections\",\n multiple: true,\n batch: Batch.ENABLED\n }]\n};\n\n/** View for hda and hdca content selector ui elements */\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n this.model = options && options.model || new Backbone.Model({\n src_labels: { hda: \"dataset\", hdca: \"dataset collection\" },\n pagelimit: 100,\n statustimer: 1000\n }).set(options);\n this.setElement($(\"
\").addClass(\"ui-select-content\"));\n this.button_product = new _uiMisc2.default.RadioButton.View({\n value: \"false\",\n data: [{\n icon: \"fa fa-chain\",\n value: \"false\",\n tooltip: \"Linked inputs will be run in matched order with other datasets e.g. use this for matching forward and reverse reads.\"\n }, {\n icon: \"fa fa-chain-broken\",\n value: \"true\",\n tooltip: \"Unlinked dataset inputs will be run against *all* other inputs.\"\n }]\n });\n var $batch_div = $(\"
\").addClass(\"ui-form-info\").append($(\"\").addClass(\"fa fa-sitemap\")).append($(\"\").html(\"This is a batch mode input field. Separate jobs will be triggered for each dataset selection.\"));\n this.$batch = {\n linked: $batch_div.clone(),\n enabled: $batch_div.clone().append($(\"
\").append($(\"
\").addClass(\"ui-form-title\").html(\"Batch options:\")).append(this.button_product.$el)).append($(\"
\").css(\"clear\", \"both\"))\n };\n\n // add drag-drop event handlers\n this.$el.on(\"dragenter\", function (e) {\n this.lastenter = e.target;\n self.$el.addClass(\"ui-dragover\");\n }).on(\"dragover\", function (e) {\n e.preventDefault();\n }).on(\"dragleave\", function (e) {\n this.lastenter === e.target && self.$el.removeClass(\"ui-dragover\");\n }).on(\"drop\", function (e) {\n self._handleDrop(e);\n });\n\n // track current history elements\n this.history = {};\n\n // add listeners\n this.listenTo(this.model, \"change:data\", this._changeData, this);\n this.listenTo(this.model, \"change:wait\", this._changeWait, this);\n this.listenTo(this.model, \"change:current\", this._changeCurrent, this);\n this.listenTo(this.model, \"change:value\", this._changeValue, this);\n this.listenTo(this.model, \"change:type change:optional change:multiple change:extensions\", this._changeType, this);\n this.render();\n\n // add change event\n this.on(\"change\", function () {\n options.onchange && options.onchange(self.value());\n });\n },\n\n render: function render() {\n this._changeType();\n this._changeValue();\n this._changeWait();\n },\n\n /** Indicate that select fields are being updated */\n wait: function wait() {\n this.model.set(\"wait\", true);\n },\n\n /** Indicate that the options update has been completed */\n unwait: function unwait() {\n this.model.set(\"wait\", false);\n },\n\n /** Update data representing selectable options */\n update: function update(options) {\n this.model.set(\"data\", options);\n },\n\n /** Return the currently selected dataset values */\n value: function value(new_value) {\n new_value !== undefined && this.model.set(\"value\", new_value);\n var current = this.model.get(\"current\");\n if (this.config[current]) {\n var id_list = this.fields[current].value();\n if (id_list !== null) {\n id_list = $.isArray(id_list) ? id_list : [id_list];\n if (id_list.length > 0) {\n var result = this._batch({ values: [] });\n for (var i in id_list) {\n var details = this.history[id_list[i] + \"_\" + this.config[current].src];\n if (details) {\n result.values.push(details);\n } else {\n Galaxy.emit.debug(\"ui-select-content::value()\", \"Requested details not found for '\" + id_list[i] + \"'.\");\n return null;\n }\n }\n result.values.sort(function (a, b) {\n return a.hid - b.hid;\n });\n return result;\n }\n }\n } else {\n Galaxy.emit.debug(\"ui-select-content::value()\", \"Invalid value/source '\" + new_value + \"'.\");\n }\n return null;\n },\n\n /** Change of current select field */\n _changeCurrent: function _changeCurrent() {\n var self = this;\n _.each(this.fields, function (field, i) {\n if (self.model.get(\"current\") == i) {\n field.$el.show();\n _.each(self.$batch, function ($batchfield, batchmode) {\n $batchfield[self.config[i].batch == batchmode ? \"show\" : \"hide\"]();\n });\n self.button_type.value(i);\n } else {\n field.$el.hide();\n }\n });\n },\n\n /** Change of type */\n _changeType: function _changeType() {\n var self = this;\n\n // identify selector type identifier i.e. [ flavor ]_[ type ]_[ multiple ]\n var config_id = (this.model.get(\"flavor\") ? this.model.get(\"flavor\") + \"_\" : \"\") + String(this.model.get(\"type\")) + (this.model.get(\"multiple\") ? \"_multiple\" : \"\");\n if (Configurations[config_id]) {\n this.config = Configurations[config_id];\n } else {\n this.config = Configurations[\"data\"];\n Galaxy.emit.debug(\"ui-select-content::_changeType()\", \"Invalid configuration/type id '\" + config_id + \"'.\");\n }\n\n // prepare extension component of error message\n var data = self.model.get(\"data\");\n var extensions = _utils2.default.textify(this.model.get(\"extensions\"));\n var src_labels = this.model.get(\"src_labels\");\n\n // build views\n this.fields = [];\n this.button_data = [];\n _.each(this.config, function (c, i) {\n self.button_data.push({\n value: i,\n icon: c.icon,\n tooltip: c.tooltip\n });\n self.fields.push(new _uiSelectDefault2.default.View({\n optional: self.model.get(\"optional\"),\n multiple: c.multiple,\n searchable: !c.multiple || data && data[c.src] && data[c.src].length > self.model.get(\"pagelimit\"),\n individual: true,\n error_text: \"No \" + (extensions ? extensions + \" \" : \"\") + (src_labels[c.src] || \"content\") + \" available.\",\n onchange: function onchange() {\n self.trigger(\"change\");\n }\n }));\n });\n this.button_type = new _uiMisc2.default.RadioButton.View({\n value: this.model.get(\"current\"),\n data: this.button_data,\n onchange: function onchange(value) {\n self.model.set(\"current\", value);\n self.trigger(\"change\");\n }\n });\n\n // append views\n this.$el.empty();\n var button_width = 0;\n if (this.fields.length > 1) {\n this.$el.append(this.button_type.$el);\n button_width = Math.max(0, this.fields.length * 36) + \"px\";\n }\n _.each(this.fields, function (field) {\n self.$el.append(field.$el.css({ \"margin-left\": button_width }));\n });\n _.each(this.$batch, function ($batchfield, batchmode) {\n self.$el.append($batchfield.css({ \"margin-left\": button_width }));\n });\n this.model.set(\"current\", 0);\n this._changeCurrent();\n this._changeData();\n },\n\n /** Change of wait flag */\n _changeWait: function _changeWait() {\n var self = this;\n _.each(this.fields, function (field) {\n field[self.model.get(\"wait\") ? \"wait\" : \"unwait\"]();\n });\n },\n\n /** Change of available options */\n _changeData: function _changeData() {\n var options = this.model.get(\"data\");\n var self = this;\n var select_options = {};\n _.each(options, function (items, src) {\n select_options[src] = [];\n _.each(items, function (item) {\n select_options[src].push({\n hid: item.hid,\n keep: item.keep,\n label: item.hid + \": \" + item.name,\n value: item.id,\n tags: item.tags\n });\n self.history[item.id + \"_\" + src] = item;\n });\n });\n _.each(this.config, function (c, i) {\n select_options[c.src] && self.fields[i].add(select_options[c.src], function (a, b) {\n return b.hid - a.hid;\n });\n });\n },\n\n /** Change of incoming value */\n _changeValue: function _changeValue() {\n var new_value = this.model.get(\"value\");\n if (new_value && new_value.values && new_value.values.length > 0) {\n // create list with content ids\n var list = [];\n _.each(new_value.values, function (value) {\n list.push(value.id);\n });\n // sniff first suitable field type from config list\n var src = new_value.values[0].src;\n var multiple = new_value.values.length > 1;\n for (var i = 0; i < this.config.length; i++) {\n var field = this.fields[i];\n var c = this.config[i];\n if (c.src == src && [multiple, true].indexOf(c.multiple) !== -1) {\n this.model.set(\"current\", i);\n field.value(list);\n break;\n }\n }\n } else {\n _.each(this.fields, function (field) {\n field.value(null);\n });\n }\n },\n\n /** Handles drop events e.g. from history panel */\n _handleDrop: function _handleDrop(ev) {\n try {\n var data = this.model.get(\"data\");\n var current = this.model.get(\"current\");\n var config = this.config[current];\n var field = this.fields[current];\n var drop_data = JSON.parse(ev.originalEvent.dataTransfer.getData(\"text\"))[0];\n var new_id = drop_data.id;\n var new_src = drop_data.history_content_type == \"dataset\" ? \"hda\" : \"hdca\";\n var new_value = { id: new_id, src: new_src };\n if (data && _.findWhere(data[new_src], new_value)) {\n if (config.src == new_src) {\n var current_value = field.value();\n if (current_value && config.multiple) {\n if (current_value.indexOf(new_id) == -1) {\n current_value.push(new_id);\n }\n } else {\n current_value = new_id;\n }\n field.value(current_value);\n } else {\n this.model.set(\"value\", { values: [new_value] });\n this.model.trigger(\"change:value\");\n }\n this.trigger(\"change\");\n this._handleDropStatus(\"success\");\n } else {\n this._handleDropStatus(\"danger\");\n }\n } catch (e) {\n this._handleDropStatus(\"danger\");\n }\n ev.preventDefault();\n },\n\n /** Highlight drag result */\n _handleDropStatus: function _handleDropStatus(status) {\n var self = this;\n this.$el.removeClass(\"ui-dragover\").addClass(\"ui-dragover-\" + status);\n setTimeout(function () {\n self.$el.removeClass(\"ui-dragover-\" + status);\n }, this.model.get(\"statustimer\"));\n },\n\n /** Assists in identifying the batch mode */\n _batch: function _batch(result) {\n result[\"batch\"] = false;\n var current = this.model.get(\"current\");\n var config = this.config[current];\n if (config.src == \"hdca\" && !config.multiple) {\n var hdca = this.history[this.fields[current].value() + \"_hdca\"];\n if (hdca && hdca.map_over_type) {\n result[\"batch\"] = true;\n }\n }\n if (config.batch == Batch.LINKED || config.batch == Batch.ENABLED) {\n result[\"batch\"] = true;\n if (config.batch == Batch.ENABLED && this.button_product.value() === \"true\") {\n result[\"product\"] = true;\n }\n }\n return result;\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiTable = __webpack_require__(68);\n\nvar _uiTable2 = _interopRequireDefault(_uiTable);\n\nvar _uiList = __webpack_require__(69);\n\nvar _uiList2 = _interopRequireDefault(_uiList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// collection of libraries\n// dependencies\nvar Libraries = Backbone.Collection.extend({\n url: Galaxy.root + \"api/libraries?deleted=false\"\n});\n\n// collection of dataset\nvar LibraryDatasets = Backbone.Collection.extend({\n initialize: function initialize() {\n var self = this;\n this.config = new Backbone.Model({ library_id: null });\n this.config.on(\"change\", function () {\n self.fetch({ reset: true });\n });\n },\n url: function url() {\n return Galaxy.root + \"api/libraries/\" + this.config.get(\"library_id\") + \"/contents\";\n }\n});\n\n// hda/hdca content selector ui element\nvar View = Backbone.View.extend({\n // initialize\n initialize: function initialize(options) {\n // link this\n var self = this;\n\n // collections\n this.libraries = new Libraries();\n this.datasets = new LibraryDatasets();\n\n // link app and options\n this.options = options;\n\n // select field for the library\n // TODO: Remove this once the library API supports searching for library datasets\n this.library_select = new _uiMisc2.default.Select.View({\n onchange: function onchange(value) {\n self.datasets.config.set(\"library_id\", value);\n }\n });\n\n // create ui-list view to keep track of selected data libraries\n this.dataset_list = new _uiList2.default.View({\n name: \"dataset\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function onchange() {\n self.trigger(\"change\");\n }\n });\n\n // add reset handler for fetched libraries\n this.libraries.on(\"reset\", function () {\n var data = [];\n self.libraries.each(function (model) {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n });\n self.library_select.update(data);\n });\n\n // add reset handler for fetched library datasets\n this.datasets.on(\"reset\", function () {\n var data = [];\n var library_current = self.library_select.text();\n if (library_current !== null) {\n self.datasets.each(function (model) {\n if (model.get(\"type\") === \"file\") {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n }\n });\n }\n self.dataset_list.update(data);\n });\n\n // add change event. fires on trigger\n this.on(\"change\", function () {\n options.onchange && options.onchange(self.value());\n });\n\n // create elements\n this.setElement(this._template());\n this.$(\".library-select\").append(this.library_select.$el);\n this.$el.append(this.dataset_list.$el);\n\n // initial fetch of libraries\n this.libraries.fetch({\n reset: true,\n success: function success() {\n self.library_select.trigger(\"change\");\n if (self.options.value !== undefined) {\n self.value(self.options.value);\n }\n }\n });\n },\n\n /** Return/Set currently selected library datasets */\n value: function value(val) {\n return this.dataset_list.value(val);\n },\n\n /** Template */\n _template: function _template() {\n return '
' + '
' + 'Select Library' + '' + \"
\" + \"
\";\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiList = __webpack_require__(69);\n\nvar _uiList2 = _interopRequireDefault(_uiList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * FTP file selector\n */\n// dependencies\nvar View = Backbone.View.extend({\n // initialize\n initialize: function initialize(options) {\n // link this\n var self = this;\n\n // create ui-list view to keep track of selected ftp files\n this.ftpfile_list = new _uiList2.default.View({\n name: \"file\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function onchange() {\n options.onchange && options.onchange(self.value());\n }\n });\n\n // create elements\n this.setElement(this.ftpfile_list.$el);\n\n // initial fetch of ftps\n _utils2.default.get({\n url: Galaxy.root + \"api/remote_files\",\n success: function success(response) {\n var data = [];\n for (var i in response) {\n data.push({\n value: response[i][\"path\"],\n label: response[i][\"path\"]\n });\n }\n self.ftpfile_list.update(data);\n }\n });\n },\n\n /** Return/Set currently selected ftp datasets */\n value: function value(val) {\n return this.ftpfile_list.value(val);\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _toolGenomespace = __webpack_require__(127);\n\nvar _toolGenomespace2 = _interopRequireDefault(_toolGenomespace);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * GenomeSpace file selector\n */\nvar View = Backbone.View.extend({\n // initialize\n initialize: function initialize(options) {\n // link this\n var self = this;\n\n // create insert new list element button\n this.browse_button = new _uiMisc2.default.ButtonIcon({\n title: \"Browse\",\n icon: \"fa fa-sign-in\",\n tooltip: \"Browse GenomeSpace\",\n onclick: function onclick() {\n self.browseGenomeSpace();\n }\n });\n\n // create genomespace filepath textbox\n this.filename_textbox = new _uiMisc2.default.Input();\n\n // create genomespace token textbox\n this.token_textbox = new _uiMisc2.default.Input({\n type: \"password\"\n });\n\n // create elements\n this.setElement(this._template(options));\n this.$(\".ui-gs-browse-button\").append(this.browse_button.$el);\n this.$(\".ui-gs-filename-textbox\").append(this.filename_textbox.$el);\n this.$(\".ui-gs-token-textbox\").append(this.token_textbox.$el);\n },\n\n /** Browse GenomeSpace */\n browseGenomeSpace: function browseGenomeSpace(options) {\n var self = this;\n _toolGenomespace2.default.openFileBrowser({\n successCallback: function successCallback(data) {\n self.value(data.destination + \"^\" + data.token);\n }\n });\n },\n\n /** Main Template */\n _template: function _template(options) {\n return '
' + '
' + '' + '' + \"
\" + '
' + '
Token
' + '' + \"
\" + \"
\";\n },\n\n /** Return/Set currently selected genomespace filename/token */\n value: function value(new_value) {\n // check if new_value is defined\n if (new_value !== undefined) {\n this._setValue(new_value);\n } else {\n return this._getValue();\n }\n },\n\n // get value\n _getValue: function _getValue() {\n return this.filename_textbox.value() + \"^\" + this.token_textbox.value();\n },\n\n // set value\n _setValue: function _setValue(new_value) {\n if (new_value) {\n values = new_value.split(\"^\");\n this.filename_textbox.value(values[0]);\n this.token_textbox.value(values[1]);\n }\n }\n}); // dependencies\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// Provides support for interacting with the GenomeSpace File Browser popup dialogue\n\n// tool form templates\nexports.default = {\n openFileBrowser: function openFileBrowser(options) {\n var GS_UI_URL = window.Galaxy.config.genomespace_ui_url;\n var GS_UPLOAD_URL = GS_UI_URL + \"upload/loadUrlToGenomespace.html?getLocation=true\";\n\n var newWin = window.open(GS_UPLOAD_URL, \"GenomeSpace File Browser\", \"height=360px,width=600px\");\n\n successCalBack = options[\"successCallback\"];\n window.addEventListener(\"message\", function (e) {\n successCalBack(e.data);\n }, false);\n\n newWin.focus();\n\n if (options[\"errorCallback\"] != null) newWin.setCallbackOnGSUploadError = config[\"errorCallback\"];\n }\n};\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = Backbone.View.extend({\n colors: {\n standard: [\"c00000\", \"ff0000\", \"ffc000\", \"ffff00\", \"92d050\", \"00b050\", \"00b0f0\", \"0070c0\", \"002060\", \"7030a0\"],\n base: [\"ffffff\", \"000000\", \"eeece1\", \"1f497d\", \"4f81bd\", \"c0504d\", \"9bbb59\", \"8064a2\", \"4bacc6\", \"f79646\"],\n theme: [[\"f2f2f2\", \"7f7f7f\", \"ddd9c3\", \"c6d9f0\", \"dbe5f1\", \"f2dcdb\", \"ebf1dd\", \"e5e0ec\", \"dbeef3\", \"fdeada\"], [\"d8d8d8\", \"595959\", \"c4bd97\", \"8db3e2\", \"b8cce4\", \"e5b9b7\", \"d7e3bc\", \"ccc1d9\", \"b7dde8\", \"fbd5b5\"], [\"bfbfbf\", \"3f3f3f\", \"938953\", \"548dd4\", \"95b3d7\", \"d99694\", \"c3d69b\", \"b2a2c7\", \"92cddc\", \"fac08f\"], [\"a5a5a5\", \"262626\", \"494429\", \"17365d\", \"366092\", \"953734\", \"76923c\", \"5f497a\", \"31859b\", \"e36c09\"], [\"7f7f7e\", \"0c0c0c\", \"1d1b10\", \"0f243e\", \"244061\", \"632423\", \"4f6128\", \"3f3151\", \"205867\", \"974806\"]]\n },\n\n initialize: function initialize(options) {\n this.options = _utils2.default.merge(options, {});\n this.setElement(this._template());\n this.$panel = this.$(\".ui-color-picker-panel\");\n this.$view = this.$(\".ui-color-picker-view\");\n this.$value = this.$(\".ui-color-picker-value\");\n this.$header = this.$(\".ui-color-picker-header\");\n this._build();\n this.visible = false;\n this.value(this.options.value);\n this.$boxes = this.$(\".ui-color-picker-box\");\n var self = this;\n this.$boxes.on(\"click\", function () {\n self.value($(this).css(\"background-color\"));\n self.$header.trigger(\"click\");\n });\n this.$header.on(\"click\", function () {\n self.visible = !self.visible;\n if (self.visible) {\n self.$view.fadeIn(\"fast\");\n } else {\n self.$view.fadeOut(\"fast\");\n }\n });\n },\n\n /** Get/set value */\n value: function value(new_val) {\n if (new_val !== undefined && new_val !== null) {\n this.$value.css(\"background-color\", new_val);\n this.$(\".ui-color-picker-box\").empty();\n this.$(this._getValue()).html(this._templateCheck());\n this.options.onchange && this.options.onchange(new_val);\n }\n return this._getValue();\n },\n\n /** Get value from dom */\n _getValue: function _getValue() {\n var rgb = this.$value.css(\"background-color\");\n rgb = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (rgb) {\n var hex = function hex(x) {\n return (\"0\" + parseInt(x).toString(16)).slice(-2);\n };\n\n return \"#\" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);\n } else {\n return null;\n }\n },\n\n /** Build color panel */\n _build: function _build() {\n this._content({ colors: this.colors.base });\n for (var i in this.colors.theme) {\n var line_def = {};\n if (i == 0) {\n line_def[\"bottom\"] = true;\n } else if (i != this.colors.theme.length - 1) {\n line_def[\"top\"] = true;\n line_def[\"bottom\"] = true;\n } else {\n line_def[\"top\"] = true;\n }\n line_def[\"colors\"] = this.colors.theme[i];\n this._content(line_def);\n }\n this._content({ colors: this.colors.standard });\n },\n\n /** Create content */\n _content: function _content(options) {\n var colors = options.colors;\n var $content = $(this._templateContent());\n var $line = $content.find(\".line\");\n this.$panel.append($content);\n for (var i in colors) {\n var $box = $(this._templateBox(colors[i]));\n if (options.top) {\n $box.css(\"border-top\", \"none\");\n $box.css(\"border-top-left-radius\", \"0px\");\n $box.css(\"border-top-right-radius\", \"0px\");\n }\n if (options.bottom) {\n $box.css(\"border-bottom\", \"none\");\n $box.css(\"border-bottom-left-radius\", \"0px\");\n $box.css(\"border-bottom-right-radius\", \"0px\");\n }\n $line.append($box);\n }\n return $content;\n },\n\n /** Check icon */\n _templateCheck: function _templateCheck() {\n return '
';\n },\n\n /** Content template */\n _templateContent: function _templateContent() {\n return '
' + '
' + \"
\";\n },\n\n /** Box template */\n _templateBox: function _templateBox(color) {\n return \"
\";\n },\n\n /** Main template */\n _template: function _template() {\n return '
' + '
' + '
' + '
Select a color
' + \"
\" + '
' + '
' + \"
\";\n \"
\";\n }\n}); /** Renders the color picker used e.g. in the tool form **/\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports) {\n\n/**\n * Parser.js\n * Copyright 2012-13 Mayank Lahiri\n * mlahiri@gmail.com\n * Released under the BSD License.\n *\n * A forgiving Bibtex parser that can:\n * \n * (1) operate in streaming or block mode, extracting entries as dictionaries. \n * (2) convert Latex special characters to UTF-8.\n * (3) best-effort parse malformed entries.\n * (4) run in a CommonJS environment or a browser, without any dependencies.\n * (5) be advanced-compiled by Google Closure Compiler.\n * \n * Handwritten as a labor of love, not auto-generated from a grammar. \n *\n * Modes of usage:\n *\n * (1) Synchronous, string\n *\n * var entries = BibtexParser(text);\n * console.log(entries);\n *\n * (2) Asynchronous, stream\n *\n * var entryCallback = function(entry) { console.log(entry); }\n * var parser = new BibtexParser(entryCallback);\n * parser.parse(chunk1);\n * parser.parse(chunk2);\n * ...\n * \n * @param {text|function(Object)} arg Either a Bibtex string or callback \n * function for processing parsed entries.\n * @constructor\n */\nfunction BibtexParser(arg0) {\n // Determine how this function is to be used\n if (typeof arg0 == 'string') {\n // Passed a string, synchronous call without 'new'\n var tempStorage = {};\n var entries = [];\n function accumulator(entry) {\n entries.push(entry);\n }\n var parser = BibtexParser.call(tempStorage, accumulator);\n parser.parse(arg0);\n return {\n 'entries': entries,\n 'errors': parser.getErrors()\n }\n }\n if (typeof arg0 != 'function') {\n throw 'Invalid parser construction.';\n }\n\n /** @enum {number} */\n this.STATES_ = {\n ENTRY_OR_JUNK: 0,\n OBJECT_TYPE: 1,\n ENTRY_KEY: 2, \n KV_KEY: 3, \n EQUALS: 4,\n KV_VALUE: 5 \n }\n /** @private */ this.DATA_ = {};\n /** @private */ this.CALLBACK_ = arg0;\n /** @private */ this.CHAR_ = 0;\n /** @private */ this.LINE_ = 1;\n /** @private */ this.CHAR_IN_LINE_ = 0;\n /** @private */ this.SKIPWS_ = true;\n /** @private */ this.SKIPCOMMENT_ = true;\n /** @private */ this.PARSETMP_ = {};\n /** @private */ this.SKIPTILLEOL_ = false;\n /** @private */ this.VALBRACES_ = null;\n /** @private */ this.BRACETYPE_ = null;\n /** @private */ this.BRACECOUNT_ = 0;\n /** @private */ this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n /** @private */ this.ERRORS_ = [];\n /** @private */ this.ENTRY_TYPES_ = {\n 'inproceedings' : 1,\n 'proceedings' : 2,\n 'article' : 3,\n 'techreport' : 4,\n 'misc' : 5,\n 'mastersthesis' : 6,\n 'book' : 7,\n 'phdthesis' : 8,\n 'incollection' : 9,\n 'unpublished' : 10,\n 'inbook' : 11,\n 'manual' : 12,\n 'periodical' : 13,\n 'booklet' : 14,\n 'masterthesis' : 15,\n 'conference' : 16\n }\n /** @private */ this.MACROS_ = {\n 'jan' : 'January',\n 'feb' : 'February',\n 'mar' : 'March',\n 'apr' : 'April',\n 'may' : 'May',\n 'jun' : 'June',\n 'jul' : 'July',\n 'aug' : 'August',\n 'sep' : 'September',\n 'oct' : 'October',\n 'nov' : 'November',\n 'dec' : 'December',\n 'Jan' : 'January',\n 'Feb' : 'February',\n 'Mar' : 'March',\n 'Apr' : 'April',\n 'May' : 'May',\n 'Jun' : 'June',\n 'Jul' : 'July',\n 'Aug' : 'August',\n 'Sep' : 'September',\n 'Oct' : 'October',\n 'Nov' : 'November',\n 'Dec' : 'December'\n }\n\n /**\n * Gets an array of all errors encountered during parsing.\n * Array entries are of the format:\n * [ line number, character in line, character in stream, error text ]\n *\n * @returns Array\n * @public\n */\n this.getErrors = function() {\n return this.ERRORS_;\n }\n\n /**\n * Processes a chunk of data\n * @public\n */\n this.parse = function(chunk) {\n for (var i = 0; i < chunk.length; i++)\n this.processCharacter_(chunk[i]);\n }\n\n /**\n * Logs error at current stream position.\n *\n * @private\n */\n this.error_ = function(text) {\n this.ERRORS_.push([ this.LINE_, \n this.CHAR_IN_LINE_,\n this.CHAR_,\n text ])\n }\n\n /**\n * Called after an entire entry has been parsed from the stream.\n * Performs post-processing and invokes the entry callback pointed to by\n * this.CALLBACK_. Parsed (but unprocessed) entry data is in this.DATA_.\n */\n this.processEntry_ = function() {\n var data = this.DATA_;\n if (data.Fields) \n for (var f in data.Fields) {\n var raw = data.Fields[f];\n\n // Convert Latex/Bibtex special characters to UTF-8 equivalents\n for (var i = 0; i < this.CHARCONV_.length; i++) {\n var re = this.CHARCONV_[i][0];\n var rep = this.CHARCONV_[i][1];\n raw = raw.replace(re, rep);\n }\n\n // Basic substitutions\n raw = raw.replace(/[\\n\\r\\t]/g, ' ')\n .replace(/\\s\\s+/g, ' ')\n .replace(/^\\s+|\\s+$/g, '')\n\n // Remove braces and backslashes\n var len = raw.length;\n var processed = '';\n for (var i = 0; i < len; i++) {\n var c = raw[i];\n var skip = false;\n if (c == '\\\\' && i < len-1) \n c = raw[++i];\n else {\n if (c == '{' || c == '}')\n skip = true;\n }\n if (!skip)\n processed += c;\n }\n data.Fields[f] = processed\n }\n\n if (data.ObjectType == 'string') {\n for (var f in data.Fields) { \n this.MACROS_[f] = data.Fields[f];\n }\n } else {\n // Parsed a new Bibtex entry\n this.CALLBACK_(data);\n }\n }\n\n\n /**\n * Processes next character in the stream, invoking the callback after \n * each entry has been found and processed.\n * \n * @private\n * @param {string} c Next character in input stream\n */\n this.processCharacter_ = function(c) {\n // Housekeeping\n this.CHAR_++;\n this.CHAR_IN_LINE_++;\n if (c == '\\n') {\n this.LINE_++;\n this.CHAR_IN_LINE_ = 1;\n }\n\n // Convenience states for skipping whitespace when needed\n if (this.SKIPTILLEOL_) {\n if (c == '\\n')\n this.SKIPTILLEOL_ = false;\n return;\n }\n if (this.SKIPCOMMENT_ && c == '%') {\n this.SKIPTILLEOL_ = true;\n return;\n }\n if (this.SKIPWS_ && /\\s/.test(c))\n return;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n this.SKIPTILLEOL_ = false;\n\n // Main state machine\n var AnotherIteration = true;\n while (AnotherIteration) {\n //console.log(this.LINE_, this.CHAR_IN_LINE_, this.STATE_, c)\n AnotherIteration = false;\n switch(this.STATE_) {\n // -- Scan for an object marker ('@')\n // -- Reset temporary data structure in case previous entry was garbled\n case this.STATES_.ENTRY_OR_JUNK:\n if (c == '@') {\n // SUCCESS: Parsed a valid start-of-object marker.\n // NEXT_STATE: OBJECT_TYPE\n this.STATE_ = this.STATES_.OBJECT_TYPE;\n this.DATA_ = {\n ObjectType : ''\n };\n }\n this.BRACETYPE_ = null;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n\n // Start at first non-whitespace character after start-of-object '@'\n // -- Accept [A-Za-z], break on non-matching character\n // -- Populate this.DATA_.EntryType and this.DATA_.ObjectType\n case this.STATES_.OBJECT_TYPE:\n if (/[A-Za-z]/.test(c)) {\n this.DATA_.ObjectType += c.toLowerCase();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // Break from state and validate object type\n var ot = this.DATA_.ObjectType;\n if (ot == 'comment') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot == 'string') {\n this.DATA_.ObjectType = ot;\n this.DATA_.Fields = {};\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.STATE_ = this.STATES_.KV_KEY;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.PARSETMP_ = {\n Key: ''\n }\n } else {\n if (ot == 'preamble') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot in this.ENTRY_TYPES_) {\n // SUCCESS: Parsed a valid object type.\n // NEXT_STATE: ENTRY_KEY\n this.DATA_.ObjectType = 'entry';\n this.DATA_.EntryType = ot;\n this.DATA_.EntryKey = '';\n this.STATE_ = this.STATES_.ENTRY_KEY;\n AnotherIteration = true;\n } else {\n // ERROR: Unrecognized object type.\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Unrecognized object type: \"' +\n this.DATA_.ObjectType + '\"')\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n }\n }\n }\n }\n }\n break;\n\n // Start at first non-alphabetic character after an entry type\n // -- Populate this.DATA_.EntryKey\n case this.STATES_.ENTRY_KEY:\n if ((c === '{' || c === '(') && this.BRACETYPE_ == null) {\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n }\n if (/[,%\\s]/.test(c)) {\n if (this.DATA_.EntryKey.length < 1) { \n // Skip comments and whitespace before entry key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n if (this.BRACETYPE_ == null) {\n // ERROR: No opening brace for object\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('No opening brace for object.');\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n // SUCCESS: Parsed an entry key\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n AnotherIteration = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.PARSETMP_.Key= '';\n this.DATA_.Fields = {};\n }\n }\n } else {\n this.DATA_.EntryKey += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n }\n break;\n\n // Start at first non-whitespace/comment character after entry key.\n // -- Populate this.PARSETMP_.Key\n case this.STATES_.KV_KEY:\n // Test for end of entry\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // SUCCESS: Parsed an entry, possible incomplete\n // NEXT_STATE: ENTRY_OR_JUNK\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (/[\\-A-Za-z:]/.test(c)) {\n // Add to key\n this.PARSETMP_.Key += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // Either end of key or we haven't encountered start of key\n if (this.PARSETMP_.Key.length < 1) {\n // Keep going till we see a key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // SUCCESS: Found full key in K/V pair\n // NEXT_STATE: EQUALS\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.EQUALS;\n AnotherIteration = true;\n }\n }\n break;\n\n // Start at first non-alphabetic character after K/V pair key.\n case this.STATES_.EQUALS:\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // ERROR: K/V pair with key but no value\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Key-value pair has key \"' +\n this.PARSETMP_.Key + '\", but no value.');\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (c == '=') {\n // SUCCESS: found an equal signs separating key and value\n // NEXT_STATE: KV_VALUE\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_VALUE;\n this.PARSETMP_.Value = '';\n this.VALBRACES_ = { '\"' : [], '{' : [] };\n }\n break;\n\n // Start at first non-whitespace/comment character after '=' \n // -- Populate this.PARSETMP_.Value\n case this.STATES_.KV_VALUE:\n var delim = this.VALBRACES_;\n var val = this.PARSETMP_.Value;\n var doneParsingValue = false;\n\n // Test for special characters\n if (c == '\"' || c == '{' || c == '}' || c == ',') {\n if (c == ',') {\n // This comma can mean:\n // (1) just another comma literal\n // (2) end of a macro reference\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of a macro reference\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n doneParsingValue = true;\n }\n }\n if (c == '\"') {\n // This quote can mean:\n // (1) opening delimiter\n // (2) closing delimiter\n // (3) literal, if we have a '{' on the stack\n if (0 === delim['\"'].length + delim['{'].length) {\n // opening delimiter\n delim['\"'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n break;\n }\n if (delim['\"'].length == 1 && delim['{'].length == 0 &&\n (val.length==0 || val[val.length-1] != '\\\\')) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // literal, add to value\n }\n }\n if (c == '{') {\n // This brace can mean:\n // (1) opening delimiter\n // (2) stacked verbatim delimiter\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n delim['{'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // literal, add to value\n }\n }\n if (c == '}') {\n // This brace can mean:\n // (1) closing delimiter\n // (2) closing stacked verbatim delimiter\n // (3) end of object definition if value was a macro\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of object definition, after macro\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n AnotherIteration = true;\n doneParsingValue = true;\n } else {\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n if (delim['{'].length > 0) {\n // pop stack for stacked verbatim delimiter\n delim['{'].splice(delim['{'].length-1, 1)\n if (0 == delim['{'].length + delim['\"'].length) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // end verbatim block\n }\n }\n } else {\n // literal, add to value\n }\n }\n }\n }\n\n // If here, then we are either done parsing the value or \n // have a literal that should be added to the value.\n if (doneParsingValue) {\n // SUCCESS: value parsed\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.DATA_.Fields[this.PARSETMP_.Key] = this.PARSETMP_.Value;\n this.PARSETMP_ = { Key: '' };\n this.VALBRACES_ = null;\n } else {\n this.PARSETMP_.Value += c;\n }\n break;\n } // end switch (this.STATE_)\n } // end while(AnotherIteration)\n } // end function processCharacter \n\n /** @private */ this.CHARCONV_ = [\n [ /\\\\space /g, '\\u0020' ],\n [ /\\\\textdollar /g, '\\u0024' ],\n [ /\\\\textquotesingle /g, '\\u0027' ],\n [ /\\\\ast /g, '\\u002A' ],\n [ /\\\\textbackslash /g, '\\u005C' ],\n [ /\\\\\\^\\{\\}/g, '\\u005E' ],\n [ /\\\\textasciigrave /g, '\\u0060' ],\n [ /\\\\lbrace /g, '\\u007B' ],\n [ /\\\\vert /g, '\\u007C' ],\n [ /\\\\rbrace /g, '\\u007D' ],\n [ /\\\\textasciitilde /g, '\\u007E' ],\n [ /\\\\textexclamdown /g, '\\u00A1' ],\n [ /\\\\textcent /g, '\\u00A2' ],\n [ /\\\\textsterling /g, '\\u00A3' ],\n [ /\\\\textcurrency /g, '\\u00A4' ],\n [ /\\\\textyen /g, '\\u00A5' ],\n [ /\\\\textbrokenbar /g, '\\u00A6' ],\n [ /\\\\textsection /g, '\\u00A7' ],\n [ /\\\\textasciidieresis /g, '\\u00A8' ],\n [ /\\\\textcopyright /g, '\\u00A9' ],\n [ /\\\\textordfeminine /g, '\\u00AA' ],\n [ /\\\\guillemotleft /g, '\\u00AB' ],\n [ /\\\\lnot /g, '\\u00AC' ],\n [ /\\\\textregistered /g, '\\u00AE' ],\n [ /\\\\textasciimacron /g, '\\u00AF' ],\n [ /\\\\textdegree /g, '\\u00B0' ],\n [ /\\\\pm /g, '\\u00B1' ],\n [ /\\\\textasciiacute /g, '\\u00B4' ],\n [ /\\\\mathrm\\{\\\\mu\\}/g, '\\u00B5' ],\n [ /\\\\textparagraph /g, '\\u00B6' ],\n [ /\\\\cdot /g, '\\u00B7' ],\n [ /\\\\c\\{\\}/g, '\\u00B8' ],\n [ /\\\\textordmasculine /g, '\\u00BA' ],\n [ /\\\\guillemotright /g, '\\u00BB' ],\n [ /\\\\textonequarter /g, '\\u00BC' ],\n [ /\\\\textonehalf /g, '\\u00BD' ],\n [ /\\\\textthreequarters /g, '\\u00BE' ],\n [ /\\\\textquestiondown /g, '\\u00BF' ],\n [ /\\\\`\\{A\\}/g, '\\u00C0' ],\n [ /\\\\'\\{A\\}/g, '\\u00C1' ],\n [ /\\\\\\^\\{A\\}/g, '\\u00C2' ],\n [ /\\\\~\\{A\\}/g, '\\u00C3' ],\n [ /\\\\\"\\{A\\}/g, '\\u00C4' ],\n [ /\\\\AA /g, '\\u00C5' ],\n [ /\\\\AE /g, '\\u00C6' ],\n [ /\\\\c\\{C\\}/g, '\\u00C7' ],\n [ /\\\\`\\{E\\}/g, '\\u00C8' ],\n [ /\\\\'\\{E\\}/g, '\\u00C9' ],\n [ /\\\\\\^\\{E\\}/g, '\\u00CA' ],\n [ /\\\\\"\\{E\\}/g, '\\u00CB' ],\n [ /\\\\`\\{I\\}/g, '\\u00CC' ],\n [ /\\\\'\\{I\\}/g, '\\u00CD' ],\n [ /\\\\\\^\\{I\\}/g, '\\u00CE' ],\n [ /\\\\\"\\{I\\}/g, '\\u00CF' ],\n [ /\\\\DH /g, '\\u00D0' ],\n [ /\\\\~\\{N\\}/g, '\\u00D1' ],\n [ /\\\\`\\{O\\}/g, '\\u00D2' ],\n [ /\\\\'\\{O\\}/g, '\\u00D3' ],\n [ /\\\\\\^\\{O\\}/g, '\\u00D4' ],\n [ /\\\\~\\{O\\}/g, '\\u00D5' ],\n [ /\\\\\"\\{O\\}/g, '\\u00D6' ],\n [ /\\\\texttimes /g, '\\u00D7' ],\n [ /\\\\O /g, '\\u00D8' ],\n [ /\\\\`\\{U\\}/g, '\\u00D9' ],\n [ /\\\\'\\{U\\}/g, '\\u00DA' ],\n [ /\\\\\\^\\{U\\}/g, '\\u00DB' ],\n [ /\\\\\"\\{U\\}/g, '\\u00DC' ],\n [ /\\\\'\\{Y\\}/g, '\\u00DD' ],\n [ /\\\\TH /g, '\\u00DE' ],\n [ /\\\\ss /g, '\\u00DF' ],\n [ /\\\\`\\{a\\}/g, '\\u00E0' ],\n [ /\\\\'\\{a\\}/g, '\\u00E1' ],\n [ /\\\\\\^\\{a\\}/g, '\\u00E2' ],\n [ /\\\\~\\{a\\}/g, '\\u00E3' ],\n [ /\\\\\"\\{a\\}/g, '\\u00E4' ],\n [ /\\\\aa /g, '\\u00E5' ],\n [ /\\\\ae /g, '\\u00E6' ],\n [ /\\\\c\\{c\\}/g, '\\u00E7' ],\n [ /\\\\`\\{e\\}/g, '\\u00E8' ],\n [ /\\\\'\\{e\\}/g, '\\u00E9' ],\n [ /\\\\\\^\\{e\\}/g, '\\u00EA' ],\n [ /\\\\\"\\{e\\}/g, '\\u00EB' ],\n [ /\\\\`\\{\\\\i\\}/g, '\\u00EC' ],\n [ /\\\\'\\{\\\\i\\}/g, '\\u00ED' ],\n [ /\\\\\\^\\{\\\\i\\}/g, '\\u00EE' ],\n [ /\\\\\"\\{\\\\i\\}/g, '\\u00EF' ],\n [ /\\\\dh /g, '\\u00F0' ],\n [ /\\\\~\\{n\\}/g, '\\u00F1' ],\n [ /\\\\`\\{o\\}/g, '\\u00F2' ],\n [ /\\\\'\\{o\\}/g, '\\u00F3' ],\n [ /\\\\\\^\\{o\\}/g, '\\u00F4' ],\n [ /\\\\~\\{o\\}/g, '\\u00F5' ],\n [ /\\\\\"\\{o\\}/g, '\\u00F6' ],\n [ /\\\\div /g, '\\u00F7' ],\n [ /\\\\o /g, '\\u00F8' ],\n [ /\\\\`\\{u\\}/g, '\\u00F9' ],\n [ /\\\\'\\{u\\}/g, '\\u00FA' ],\n [ /\\\\\\^\\{u\\}/g, '\\u00FB' ],\n [ /\\\\\"\\{u\\}/g, '\\u00FC' ],\n [ /\\\\'\\{y\\}/g, '\\u00FD' ],\n [ /\\\\th /g, '\\u00FE' ],\n [ /\\\\\"\\{y\\}/g, '\\u00FF' ],\n [ /\\\\=\\{A\\}/g, '\\u0100' ],\n [ /\\\\=\\{a\\}/g, '\\u0101' ],\n [ /\\\\u\\{A\\}/g, '\\u0102' ],\n [ /\\\\u\\{a\\}/g, '\\u0103' ],\n [ /\\\\k\\{A\\}/g, '\\u0104' ],\n [ /\\\\k\\{a\\}/g, '\\u0105' ],\n [ /\\\\'\\{C\\}/g, '\\u0106' ],\n [ /\\\\'\\{c\\}/g, '\\u0107' ],\n [ /\\\\\\^\\{C\\}/g, '\\u0108' ],\n [ /\\\\\\^\\{c\\}/g, '\\u0109' ],\n [ /\\\\.\\{C\\}/g, '\\u010A' ],\n [ /\\\\.\\{c\\}/g, '\\u010B' ],\n [ /\\\\v\\{C\\}/g, '\\u010C' ],\n [ /\\\\v\\{c\\}/g, '\\u010D' ],\n [ /\\\\v\\{D\\}/g, '\\u010E' ],\n [ /\\\\v\\{d\\}/g, '\\u010F' ],\n [ /\\\\DJ /g, '\\u0110' ],\n [ /\\\\dj /g, '\\u0111' ],\n [ /\\\\=\\{E\\}/g, '\\u0112' ],\n [ /\\\\=\\{e\\}/g, '\\u0113' ],\n [ /\\\\u\\{E\\}/g, '\\u0114' ],\n [ /\\\\u\\{e\\}/g, '\\u0115' ],\n [ /\\\\.\\{E\\}/g, '\\u0116' ],\n [ /\\\\.\\{e\\}/g, '\\u0117' ],\n [ /\\\\k\\{E\\}/g, '\\u0118' ],\n [ /\\\\k\\{e\\}/g, '\\u0119' ],\n [ /\\\\v\\{E\\}/g, '\\u011A' ],\n [ /\\\\v\\{e\\}/g, '\\u011B' ],\n [ /\\\\\\^\\{G\\}/g, '\\u011C' ],\n [ /\\\\\\^\\{g\\}/g, '\\u011D' ],\n [ /\\\\u\\{G\\}/g, '\\u011E' ],\n [ /\\\\u\\{g\\}/g, '\\u011F' ],\n [ /\\\\.\\{G\\}/g, '\\u0120' ],\n [ /\\\\.\\{g\\}/g, '\\u0121' ],\n [ /\\\\c\\{G\\}/g, '\\u0122' ],\n [ /\\\\c\\{g\\}/g, '\\u0123' ],\n [ /\\\\\\^\\{H\\}/g, '\\u0124' ],\n [ /\\\\\\^\\{h\\}/g, '\\u0125' ],\n [ /\\\\Elzxh /g, '\\u0127' ],\n [ /\\\\~\\{I\\}/g, '\\u0128' ],\n [ /\\\\~\\{\\\\i\\}/g, '\\u0129' ],\n [ /\\\\=\\{I\\}/g, '\\u012A' ],\n [ /\\\\=\\{\\\\i\\}/g, '\\u012B' ],\n [ /\\\\u\\{I\\}/g, '\\u012C' ],\n [ /\\\\u\\{\\\\i\\}/g, '\\u012D' ],\n [ /\\\\k\\{I\\}/g, '\\u012E' ],\n [ /\\\\k\\{i\\}/g, '\\u012F' ],\n [ /\\\\.\\{I\\}/g, '\\u0130' ],\n [ /\\\\i /g, '\\u0131' ],\n [ /\\\\\\^\\{J\\}/g, '\\u0134' ],\n [ /\\\\\\^\\{\\\\j\\}/g, '\\u0135' ],\n [ /\\\\c\\{K\\}/g, '\\u0136' ],\n [ /\\\\c\\{k\\}/g, '\\u0137' ],\n [ /\\\\'\\{L\\}/g, '\\u0139' ],\n [ /\\\\'\\{l\\}/g, '\\u013A' ],\n [ /\\\\c\\{L\\}/g, '\\u013B' ],\n [ /\\\\c\\{l\\}/g, '\\u013C' ],\n [ /\\\\v\\{L\\}/g, '\\u013D' ],\n [ /\\\\v\\{l\\}/g, '\\u013E' ],\n [ /\\\\L /g, '\\u0141' ],\n [ /\\\\l /g, '\\u0142' ],\n [ /\\\\'\\{N\\}/g, '\\u0143' ],\n [ /\\\\'\\{n\\}/g, '\\u0144' ],\n [ /\\\\c\\{N\\}/g, '\\u0145' ],\n [ /\\\\c\\{n\\}/g, '\\u0146' ],\n [ /\\\\v\\{N\\}/g, '\\u0147' ],\n [ /\\\\v\\{n\\}/g, '\\u0148' ],\n [ /\\\\NG /g, '\\u014A' ],\n [ /\\\\ng /g, '\\u014B' ],\n [ /\\\\=\\{O\\}/g, '\\u014C' ],\n [ /\\\\=\\{o\\}/g, '\\u014D' ],\n [ /\\\\u\\{O\\}/g, '\\u014E' ],\n [ /\\\\u\\{o\\}/g, '\\u014F' ],\n [ /\\\\H\\{O\\}/g, '\\u0150' ],\n [ /\\\\H\\{o\\}/g, '\\u0151' ],\n [ /\\\\OE /g, '\\u0152' ],\n [ /\\\\oe /g, '\\u0153' ],\n [ /\\\\'\\{R\\}/g, '\\u0154' ],\n [ /\\\\'\\{r\\}/g, '\\u0155' ],\n [ /\\\\c\\{R\\}/g, '\\u0156' ],\n [ /\\\\c\\{r\\}/g, '\\u0157' ],\n [ /\\\\v\\{R\\}/g, '\\u0158' ],\n [ /\\\\v\\{r\\}/g, '\\u0159' ],\n [ /\\\\'\\{S\\}/g, '\\u015A' ],\n [ /\\\\'\\{s\\}/g, '\\u015B' ],\n [ /\\\\\\^\\{S\\}/g, '\\u015C' ],\n [ /\\\\\\^\\{s\\}/g, '\\u015D' ],\n [ /\\\\c\\{S\\}/g, '\\u015E' ],\n [ /\\\\c\\{s\\}/g, '\\u015F' ],\n [ /\\\\v\\{S\\}/g, '\\u0160' ],\n [ /\\\\v\\{s\\}/g, '\\u0161' ],\n [ /\\\\c\\{T\\}/g, '\\u0162' ],\n [ /\\\\c\\{t\\}/g, '\\u0163' ],\n [ /\\\\v\\{T\\}/g, '\\u0164' ],\n [ /\\\\v\\{t\\}/g, '\\u0165' ],\n [ /\\\\~\\{U\\}/g, '\\u0168' ],\n [ /\\\\~\\{u\\}/g, '\\u0169' ],\n [ /\\\\=\\{U\\}/g, '\\u016A' ],\n [ /\\\\=\\{u\\}/g, '\\u016B' ],\n [ /\\\\u\\{U\\}/g, '\\u016C' ],\n [ /\\\\u\\{u\\}/g, '\\u016D' ],\n [ /\\\\r\\{U\\}/g, '\\u016E' ],\n [ /\\\\r\\{u\\}/g, '\\u016F' ],\n [ /\\\\H\\{U\\}/g, '\\u0170' ],\n [ /\\\\H\\{u\\}/g, '\\u0171' ],\n [ /\\\\k\\{U\\}/g, '\\u0172' ],\n [ /\\\\k\\{u\\}/g, '\\u0173' ],\n [ /\\\\\\^\\{W\\}/g, '\\u0174' ],\n [ /\\\\\\^\\{w\\}/g, '\\u0175' ],\n [ /\\\\\\^\\{Y\\}/g, '\\u0176' ],\n [ /\\\\\\^\\{y\\}/g, '\\u0177' ],\n [ /\\\\\"\\{Y\\}/g, '\\u0178' ],\n [ /\\\\'\\{Z\\}/g, '\\u0179' ],\n [ /\\\\'\\{z\\}/g, '\\u017A' ],\n [ /\\\\.\\{Z\\}/g, '\\u017B' ],\n [ /\\\\.\\{z\\}/g, '\\u017C' ],\n [ /\\\\v\\{Z\\}/g, '\\u017D' ],\n [ /\\\\v\\{z\\}/g, '\\u017E' ],\n [ /\\\\texthvlig /g, '\\u0195' ],\n [ /\\\\textnrleg /g, '\\u019E' ],\n [ /\\\\eth /g, '\\u01AA' ],\n [ /\\\\textdoublepipe /g, '\\u01C2' ],\n [ /\\\\'\\{g\\}/g, '\\u01F5' ],\n [ /\\\\Elztrna /g, '\\u0250' ],\n [ /\\\\Elztrnsa /g, '\\u0252' ],\n [ /\\\\Elzopeno /g, '\\u0254' ],\n [ /\\\\Elzrtld /g, '\\u0256' ],\n [ /\\\\Elzschwa /g, '\\u0259' ],\n [ /\\\\varepsilon /g, '\\u025B' ],\n [ /\\\\Elzpgamma /g, '\\u0263' ],\n [ /\\\\Elzpbgam /g, '\\u0264' ],\n [ /\\\\Elztrnh /g, '\\u0265' ],\n [ /\\\\Elzbtdl /g, '\\u026C' ],\n [ /\\\\Elzrtll /g, '\\u026D' ],\n [ /\\\\Elztrnm /g, '\\u026F' ],\n [ /\\\\Elztrnmlr /g, '\\u0270' ],\n [ /\\\\Elzltlmr /g, '\\u0271' ],\n [ /\\\\Elzltln /g, '\\u0272' ],\n [ /\\\\Elzrtln /g, '\\u0273' ],\n [ /\\\\Elzclomeg /g, '\\u0277' ],\n [ /\\\\textphi /g, '\\u0278' ],\n [ /\\\\Elztrnr /g, '\\u0279' ],\n [ /\\\\Elztrnrl /g, '\\u027A' ],\n [ /\\\\Elzrttrnr /g, '\\u027B' ],\n [ /\\\\Elzrl /g, '\\u027C' ],\n [ /\\\\Elzrtlr /g, '\\u027D' ],\n [ /\\\\Elzfhr /g, '\\u027E' ],\n [ /\\\\Elzrtls /g, '\\u0282' ],\n [ /\\\\Elzesh /g, '\\u0283' ],\n [ /\\\\Elztrnt /g, '\\u0287' ],\n [ /\\\\Elzrtlt /g, '\\u0288' ],\n [ /\\\\Elzpupsil /g, '\\u028A' ],\n [ /\\\\Elzpscrv /g, '\\u028B' ],\n [ /\\\\Elzinvv /g, '\\u028C' ],\n [ /\\\\Elzinvw /g, '\\u028D' ],\n [ /\\\\Elztrny /g, '\\u028E' ],\n [ /\\\\Elzrtlz /g, '\\u0290' ],\n [ /\\\\Elzyogh /g, '\\u0292' ],\n [ /\\\\Elzglst /g, '\\u0294' ],\n [ /\\\\Elzreglst /g, '\\u0295' ],\n [ /\\\\Elzinglst /g, '\\u0296' ],\n [ /\\\\textturnk /g, '\\u029E' ],\n [ /\\\\Elzdyogh /g, '\\u02A4' ],\n [ /\\\\Elztesh /g, '\\u02A7' ],\n [ /\\\\textasciicaron /g, '\\u02C7' ],\n [ /\\\\Elzverts /g, '\\u02C8' ],\n [ /\\\\Elzverti /g, '\\u02CC' ],\n [ /\\\\Elzlmrk /g, '\\u02D0' ],\n [ /\\\\Elzhlmrk /g, '\\u02D1' ],\n [ /\\\\Elzsbrhr /g, '\\u02D2' ],\n [ /\\\\Elzsblhr /g, '\\u02D3' ],\n [ /\\\\Elzrais /g, '\\u02D4' ],\n [ /\\\\Elzlow /g, '\\u02D5' ],\n [ /\\\\textasciibreve /g, '\\u02D8' ],\n [ /\\\\textperiodcentered /g, '\\u02D9' ],\n [ /\\\\r\\{\\}/g, '\\u02DA' ],\n [ /\\\\k\\{\\}/g, '\\u02DB' ],\n [ /\\\\texttildelow /g, '\\u02DC' ],\n [ /\\\\H\\{\\}/g, '\\u02DD' ],\n [ /\\\\tone\\{55\\}/g, '\\u02E5' ],\n [ /\\\\tone\\{44\\}/g, '\\u02E6' ],\n [ /\\\\tone\\{33\\}/g, '\\u02E7' ],\n [ /\\\\tone\\{22\\}/g, '\\u02E8' ],\n [ /\\\\tone\\{11\\}/g, '\\u02E9' ],\n [ /\\\\cyrchar\\\\C/g, '\\u030F' ],\n [ /\\\\Elzpalh /g, '\\u0321' ],\n [ /\\\\Elzrh /g, '\\u0322' ],\n [ /\\\\Elzsbbrg /g, '\\u032A' ],\n [ /\\\\Elzxl /g, '\\u0335' ],\n [ /\\\\Elzbar /g, '\\u0336' ],\n [ /\\\\'\\{A\\}/g, '\\u0386' ],\n [ /\\\\'\\{E\\}/g, '\\u0388' ],\n [ /\\\\'\\{H\\}/g, '\\u0389' ],\n [ /\\\\'\\{\\}\\{I\\}/g, '\\u038A' ],\n [ /\\\\'\\{\\}O/g, '\\u038C' ],\n [ /\\\\mathrm\\{'Y\\}/g, '\\u038E' ],\n [ /\\\\mathrm\\{'\\\\Omega\\}/g, '\\u038F' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\iota\\}\\}/g, '\\u0390' ],\n [ /\\\\Alpha /g, '\\u0391' ],\n [ /\\\\Beta /g, '\\u0392' ],\n [ /\\\\Gamma /g, '\\u0393' ],\n [ /\\\\Delta /g, '\\u0394' ],\n [ /\\\\Epsilon /g, '\\u0395' ],\n [ /\\\\Zeta /g, '\\u0396' ],\n [ /\\\\Eta /g, '\\u0397' ],\n [ /\\\\Theta /g, '\\u0398' ],\n [ /\\\\Iota /g, '\\u0399' ],\n [ /\\\\Kappa /g, '\\u039A' ],\n [ /\\\\Lambda /g, '\\u039B' ],\n [ /\\\\Xi /g, '\\u039E' ],\n [ /\\\\Pi /g, '\\u03A0' ],\n [ /\\\\Rho /g, '\\u03A1' ],\n [ /\\\\Sigma /g, '\\u03A3' ],\n [ /\\\\Tau /g, '\\u03A4' ],\n [ /\\\\Upsilon /g, '\\u03A5' ],\n [ /\\\\Phi /g, '\\u03A6' ],\n [ /\\\\Chi /g, '\\u03A7' ],\n [ /\\\\Psi /g, '\\u03A8' ],\n [ /\\\\Omega /g, '\\u03A9' ],\n [ /\\\\mathrm\\{\\\\ddot\\{I\\}\\}/g, '\\u03AA' ],\n [ /\\\\mathrm\\{\\\\ddot\\{Y\\}\\}/g, '\\u03AB' ],\n [ /\\\\'\\{\\$\\\\alpha\\$\\}/g, '\\u03AC' ],\n [ /\\\\acute\\{\\\\epsilon\\}/g, '\\u03AD' ],\n [ /\\\\acute\\{\\\\eta\\}/g, '\\u03AE' ],\n [ /\\\\acute\\{\\\\iota\\}/g, '\\u03AF' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\upsilon\\}\\}/g, '\\u03B0' ],\n [ /\\\\alpha /g, '\\u03B1' ],\n [ /\\\\beta /g, '\\u03B2' ],\n [ /\\\\gamma /g, '\\u03B3' ],\n [ /\\\\delta /g, '\\u03B4' ],\n [ /\\\\epsilon /g, '\\u03B5' ],\n [ /\\\\zeta /g, '\\u03B6' ],\n [ /\\\\eta /g, '\\u03B7' ],\n [ /\\\\texttheta /g, '\\u03B8' ],\n [ /\\\\iota /g, '\\u03B9' ],\n [ /\\\\kappa /g, '\\u03BA' ],\n [ /\\\\lambda /g, '\\u03BB' ],\n [ /\\\\mu /g, '\\u03BC' ],\n [ /\\\\nu /g, '\\u03BD' ],\n [ /\\\\xi /g, '\\u03BE' ],\n [ /\\\\pi /g, '\\u03C0' ],\n [ /\\\\rho /g, '\\u03C1' ],\n [ /\\\\varsigma /g, '\\u03C2' ],\n [ /\\\\sigma /g, '\\u03C3' ],\n [ /\\\\tau /g, '\\u03C4' ],\n [ /\\\\upsilon /g, '\\u03C5' ],\n [ /\\\\varphi /g, '\\u03C6' ],\n [ /\\\\chi /g, '\\u03C7' ],\n [ /\\\\psi /g, '\\u03C8' ],\n [ /\\\\omega /g, '\\u03C9' ],\n [ /\\\\ddot\\{\\\\iota\\}/g, '\\u03CA' ],\n [ /\\\\ddot\\{\\\\upsilon\\}/g, '\\u03CB' ],\n [ /\\\\'\\{o\\}/g, '\\u03CC' ],\n [ /\\\\acute\\{\\\\upsilon\\}/g, '\\u03CD' ],\n [ /\\\\acute\\{\\\\omega\\}/g, '\\u03CE' ],\n [ /\\\\Pisymbol\\{ppi022\\}\\{87\\}/g, '\\u03D0' ],\n [ /\\\\textvartheta /g, '\\u03D1' ],\n [ /\\\\Upsilon /g, '\\u03D2' ],\n [ /\\\\phi /g, '\\u03D5' ],\n [ /\\\\varpi /g, '\\u03D6' ],\n [ /\\\\Stigma /g, '\\u03DA' ],\n [ /\\\\Digamma /g, '\\u03DC' ],\n [ /\\\\digamma /g, '\\u03DD' ],\n [ /\\\\Koppa /g, '\\u03DE' ],\n [ /\\\\Sampi /g, '\\u03E0' ],\n [ /\\\\varkappa /g, '\\u03F0' ],\n [ /\\\\varrho /g, '\\u03F1' ],\n [ /\\\\textTheta /g, '\\u03F4' ],\n [ /\\\\backepsilon /g, '\\u03F6' ],\n [ /\\\\cyrchar\\\\CYRYO /g, '\\u0401' ],\n [ /\\\\cyrchar\\\\CYRDJE /g, '\\u0402' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRG\\}/g, '\\u0403' ],\n [ /\\\\cyrchar\\\\CYRIE /g, '\\u0404' ],\n [ /\\\\cyrchar\\\\CYRDZE /g, '\\u0405' ],\n [ /\\\\cyrchar\\\\CYRII /g, '\\u0406' ],\n [ /\\\\cyrchar\\\\CYRYI /g, '\\u0407' ],\n [ /\\\\cyrchar\\\\CYRJE /g, '\\u0408' ],\n [ /\\\\cyrchar\\\\CYRLJE /g, '\\u0409' ],\n [ /\\\\cyrchar\\\\CYRNJE /g, '\\u040A' ],\n [ /\\\\cyrchar\\\\CYRTSHE /g, '\\u040B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRK\\}/g, '\\u040C' ],\n [ /\\\\cyrchar\\\\CYRUSHRT /g, '\\u040E' ],\n [ /\\\\cyrchar\\\\CYRDZHE /g, '\\u040F' ],\n [ /\\\\cyrchar\\\\CYRA /g, '\\u0410' ],\n [ /\\\\cyrchar\\\\CYRB /g, '\\u0411' ],\n [ /\\\\cyrchar\\\\CYRV /g, '\\u0412' ],\n [ /\\\\cyrchar\\\\CYRG /g, '\\u0413' ],\n [ /\\\\cyrchar\\\\CYRD /g, '\\u0414' ],\n [ /\\\\cyrchar\\\\CYRE /g, '\\u0415' ],\n [ /\\\\cyrchar\\\\CYRZH /g, '\\u0416' ],\n [ /\\\\cyrchar\\\\CYRZ /g, '\\u0417' ],\n [ /\\\\cyrchar\\\\CYRI /g, '\\u0418' ],\n [ /\\\\cyrchar\\\\CYRISHRT /g, '\\u0419' ],\n [ /\\\\cyrchar\\\\CYRK /g, '\\u041A' ],\n [ /\\\\cyrchar\\\\CYRL /g, '\\u041B' ],\n [ /\\\\cyrchar\\\\CYRM /g, '\\u041C' ],\n [ /\\\\cyrchar\\\\CYRN /g, '\\u041D' ],\n [ /\\\\cyrchar\\\\CYRO /g, '\\u041E' ],\n [ /\\\\cyrchar\\\\CYRP /g, '\\u041F' ],\n [ /\\\\cyrchar\\\\CYRR /g, '\\u0420' ],\n [ /\\\\cyrchar\\\\CYRS /g, '\\u0421' ],\n [ /\\\\cyrchar\\\\CYRT /g, '\\u0422' ],\n [ /\\\\cyrchar\\\\CYRU /g, '\\u0423' ],\n [ /\\\\cyrchar\\\\CYRF /g, '\\u0424' ],\n [ /\\\\cyrchar\\\\CYRH /g, '\\u0425' ],\n [ /\\\\cyrchar\\\\CYRC /g, '\\u0426' ],\n [ /\\\\cyrchar\\\\CYRCH /g, '\\u0427' ],\n [ /\\\\cyrchar\\\\CYRSH /g, '\\u0428' ],\n [ /\\\\cyrchar\\\\CYRSHCH /g, '\\u0429' ],\n [ /\\\\cyrchar\\\\CYRHRDSN /g, '\\u042A' ],\n [ /\\\\cyrchar\\\\CYRERY /g, '\\u042B' ],\n [ /\\\\cyrchar\\\\CYRSFTSN /g, '\\u042C' ],\n [ /\\\\cyrchar\\\\CYREREV /g, '\\u042D' ],\n [ /\\\\cyrchar\\\\CYRYU /g, '\\u042E' ],\n [ /\\\\cyrchar\\\\CYRYA /g, '\\u042F' ],\n [ /\\\\cyrchar\\\\cyra /g, '\\u0430' ],\n [ /\\\\cyrchar\\\\cyrb /g, '\\u0431' ],\n [ /\\\\cyrchar\\\\cyrv /g, '\\u0432' ],\n [ /\\\\cyrchar\\\\cyrg /g, '\\u0433' ],\n [ /\\\\cyrchar\\\\cyrd /g, '\\u0434' ],\n [ /\\\\cyrchar\\\\cyre /g, '\\u0435' ],\n [ /\\\\cyrchar\\\\cyrzh /g, '\\u0436' ],\n [ /\\\\cyrchar\\\\cyrz /g, '\\u0437' ],\n [ /\\\\cyrchar\\\\cyri /g, '\\u0438' ],\n [ /\\\\cyrchar\\\\cyrishrt /g, '\\u0439' ],\n [ /\\\\cyrchar\\\\cyrk /g, '\\u043A' ],\n [ /\\\\cyrchar\\\\cyrl /g, '\\u043B' ],\n [ /\\\\cyrchar\\\\cyrm /g, '\\u043C' ],\n [ /\\\\cyrchar\\\\cyrn /g, '\\u043D' ],\n [ /\\\\cyrchar\\\\cyro /g, '\\u043E' ],\n [ /\\\\cyrchar\\\\cyrp /g, '\\u043F' ],\n [ /\\\\cyrchar\\\\cyrr /g, '\\u0440' ],\n [ /\\\\cyrchar\\\\cyrs /g, '\\u0441' ],\n [ /\\\\cyrchar\\\\cyrt /g, '\\u0442' ],\n [ /\\\\cyrchar\\\\cyru /g, '\\u0443' ],\n [ /\\\\cyrchar\\\\cyrf /g, '\\u0444' ],\n [ /\\\\cyrchar\\\\cyrh /g, '\\u0445' ],\n [ /\\\\cyrchar\\\\cyrc /g, '\\u0446' ],\n [ /\\\\cyrchar\\\\cyrch /g, '\\u0447' ],\n [ /\\\\cyrchar\\\\cyrsh /g, '\\u0448' ],\n [ /\\\\cyrchar\\\\cyrshch /g, '\\u0449' ],\n [ /\\\\cyrchar\\\\cyrhrdsn /g, '\\u044A' ],\n [ /\\\\cyrchar\\\\cyrery /g, '\\u044B' ],\n [ /\\\\cyrchar\\\\cyrsftsn /g, '\\u044C' ],\n [ /\\\\cyrchar\\\\cyrerev /g, '\\u044D' ],\n [ /\\\\cyrchar\\\\cyryu /g, '\\u044E' ],\n [ /\\\\cyrchar\\\\cyrya /g, '\\u044F' ],\n [ /\\\\cyrchar\\\\cyryo /g, '\\u0451' ],\n [ /\\\\cyrchar\\\\cyrdje /g, '\\u0452' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrg\\}/g, '\\u0453' ],\n [ /\\\\cyrchar\\\\cyrie /g, '\\u0454' ],\n [ /\\\\cyrchar\\\\cyrdze /g, '\\u0455' ],\n [ /\\\\cyrchar\\\\cyrii /g, '\\u0456' ],\n [ /\\\\cyrchar\\\\cyryi /g, '\\u0457' ],\n [ /\\\\cyrchar\\\\cyrje /g, '\\u0458' ],\n [ /\\\\cyrchar\\\\cyrlje /g, '\\u0459' ],\n [ /\\\\cyrchar\\\\cyrnje /g, '\\u045A' ],\n [ /\\\\cyrchar\\\\cyrtshe /g, '\\u045B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrk\\}/g, '\\u045C' ],\n [ /\\\\cyrchar\\\\cyrushrt /g, '\\u045E' ],\n [ /\\\\cyrchar\\\\cyrdzhe /g, '\\u045F' ],\n [ /\\\\cyrchar\\\\CYROMEGA /g, '\\u0460' ],\n [ /\\\\cyrchar\\\\cyromega /g, '\\u0461' ],\n [ /\\\\cyrchar\\\\CYRYAT /g, '\\u0462' ],\n [ /\\\\cyrchar\\\\CYRIOTE /g, '\\u0464' ],\n [ /\\\\cyrchar\\\\cyriote /g, '\\u0465' ],\n [ /\\\\cyrchar\\\\CYRLYUS /g, '\\u0466' ],\n [ /\\\\cyrchar\\\\cyrlyus /g, '\\u0467' ],\n [ /\\\\cyrchar\\\\CYRIOTLYUS /g, '\\u0468' ],\n [ /\\\\cyrchar\\\\cyriotlyus /g, '\\u0469' ],\n [ /\\\\cyrchar\\\\CYRBYUS /g, '\\u046A' ],\n [ /\\\\cyrchar\\\\CYRIOTBYUS /g, '\\u046C' ],\n [ /\\\\cyrchar\\\\cyriotbyus /g, '\\u046D' ],\n [ /\\\\cyrchar\\\\CYRKSI /g, '\\u046E' ],\n [ /\\\\cyrchar\\\\cyrksi /g, '\\u046F' ],\n [ /\\\\cyrchar\\\\CYRPSI /g, '\\u0470' ],\n [ /\\\\cyrchar\\\\cyrpsi /g, '\\u0471' ],\n [ /\\\\cyrchar\\\\CYRFITA /g, '\\u0472' ],\n [ /\\\\cyrchar\\\\CYRIZH /g, '\\u0474' ],\n [ /\\\\cyrchar\\\\CYRUK /g, '\\u0478' ],\n [ /\\\\cyrchar\\\\cyruk /g, '\\u0479' ],\n [ /\\\\cyrchar\\\\CYROMEGARND /g, '\\u047A' ],\n [ /\\\\cyrchar\\\\cyromegarnd /g, '\\u047B' ],\n [ /\\\\cyrchar\\\\CYROMEGATITLO /g, '\\u047C' ],\n [ /\\\\cyrchar\\\\cyromegatitlo /g, '\\u047D' ],\n [ /\\\\cyrchar\\\\CYROT /g, '\\u047E' ],\n [ /\\\\cyrchar\\\\cyrot /g, '\\u047F' ],\n [ /\\\\cyrchar\\\\CYRKOPPA /g, '\\u0480' ],\n [ /\\\\cyrchar\\\\cyrkoppa /g, '\\u0481' ],\n [ /\\\\cyrchar\\\\cyrthousands /g, '\\u0482' ],\n [ /\\\\cyrchar\\\\cyrhundredthousands /g, '\\u0488' ],\n [ /\\\\cyrchar\\\\cyrmillions /g, '\\u0489' ],\n [ /\\\\cyrchar\\\\CYRSEMISFTSN /g, '\\u048C' ],\n [ /\\\\cyrchar\\\\cyrsemisftsn /g, '\\u048D' ],\n [ /\\\\cyrchar\\\\CYRRTICK /g, '\\u048E' ],\n [ /\\\\cyrchar\\\\cyrrtick /g, '\\u048F' ],\n [ /\\\\cyrchar\\\\CYRGUP /g, '\\u0490' ],\n [ /\\\\cyrchar\\\\cyrgup /g, '\\u0491' ],\n [ /\\\\cyrchar\\\\CYRGHCRS /g, '\\u0492' ],\n [ /\\\\cyrchar\\\\cyrghcrs /g, '\\u0493' ],\n [ /\\\\cyrchar\\\\CYRGHK /g, '\\u0494' ],\n [ /\\\\cyrchar\\\\cyrghk /g, '\\u0495' ],\n [ /\\\\cyrchar\\\\CYRZHDSC /g, '\\u0496' ],\n [ /\\\\cyrchar\\\\cyrzhdsc /g, '\\u0497' ],\n [ /\\\\cyrchar\\\\CYRZDSC /g, '\\u0498' ],\n [ /\\\\cyrchar\\\\cyrzdsc /g, '\\u0499' ],\n [ /\\\\cyrchar\\\\CYRKDSC /g, '\\u049A' ],\n [ /\\\\cyrchar\\\\cyrkdsc /g, '\\u049B' ],\n [ /\\\\cyrchar\\\\CYRKVCRS /g, '\\u049C' ],\n [ /\\\\cyrchar\\\\cyrkvcrs /g, '\\u049D' ],\n [ /\\\\cyrchar\\\\CYRKHCRS /g, '\\u049E' ],\n [ /\\\\cyrchar\\\\cyrkhcrs /g, '\\u049F' ],\n [ /\\\\cyrchar\\\\CYRKBEAK /g, '\\u04A0' ],\n [ /\\\\cyrchar\\\\cyrkbeak /g, '\\u04A1' ],\n [ /\\\\cyrchar\\\\CYRNDSC /g, '\\u04A2' ],\n [ /\\\\cyrchar\\\\cyrndsc /g, '\\u04A3' ],\n [ /\\\\cyrchar\\\\CYRNG /g, '\\u04A4' ],\n [ /\\\\cyrchar\\\\cyrng /g, '\\u04A5' ],\n [ /\\\\cyrchar\\\\CYRPHK /g, '\\u04A6' ],\n [ /\\\\cyrchar\\\\cyrphk /g, '\\u04A7' ],\n [ /\\\\cyrchar\\\\CYRABHHA /g, '\\u04A8' ],\n [ /\\\\cyrchar\\\\cyrabhha /g, '\\u04A9' ],\n [ /\\\\cyrchar\\\\CYRSDSC /g, '\\u04AA' ],\n [ /\\\\cyrchar\\\\cyrsdsc /g, '\\u04AB' ],\n [ /\\\\cyrchar\\\\CYRTDSC /g, '\\u04AC' ],\n [ /\\\\cyrchar\\\\cyrtdsc /g, '\\u04AD' ],\n [ /\\\\cyrchar\\\\CYRY /g, '\\u04AE' ],\n [ /\\\\cyrchar\\\\cyry /g, '\\u04AF' ],\n [ /\\\\cyrchar\\\\CYRYHCRS /g, '\\u04B0' ],\n [ /\\\\cyrchar\\\\cyryhcrs /g, '\\u04B1' ],\n [ /\\\\cyrchar\\\\CYRHDSC /g, '\\u04B2' ],\n [ /\\\\cyrchar\\\\cyrhdsc /g, '\\u04B3' ],\n [ /\\\\cyrchar\\\\CYRTETSE /g, '\\u04B4' ],\n [ /\\\\cyrchar\\\\cyrtetse /g, '\\u04B5' ],\n [ /\\\\cyrchar\\\\CYRCHRDSC /g, '\\u04B6' ],\n [ /\\\\cyrchar\\\\cyrchrdsc /g, '\\u04B7' ],\n [ /\\\\cyrchar\\\\CYRCHVCRS /g, '\\u04B8' ],\n [ /\\\\cyrchar\\\\cyrchvcrs /g, '\\u04B9' ],\n [ /\\\\cyrchar\\\\CYRSHHA /g, '\\u04BA' ],\n [ /\\\\cyrchar\\\\cyrshha /g, '\\u04BB' ],\n [ /\\\\cyrchar\\\\CYRABHCH /g, '\\u04BC' ],\n [ /\\\\cyrchar\\\\cyrabhch /g, '\\u04BD' ],\n [ /\\\\cyrchar\\\\CYRABHCHDSC /g, '\\u04BE' ],\n [ /\\\\cyrchar\\\\cyrabhchdsc /g, '\\u04BF' ],\n [ /\\\\cyrchar\\\\CYRpalochka /g, '\\u04C0' ],\n [ /\\\\cyrchar\\\\CYRKHK /g, '\\u04C3' ],\n [ /\\\\cyrchar\\\\cyrkhk /g, '\\u04C4' ],\n [ /\\\\cyrchar\\\\CYRNHK /g, '\\u04C7' ],\n [ /\\\\cyrchar\\\\cyrnhk /g, '\\u04C8' ],\n [ /\\\\cyrchar\\\\CYRCHLDSC /g, '\\u04CB' ],\n [ /\\\\cyrchar\\\\cyrchldsc /g, '\\u04CC' ],\n [ /\\\\cyrchar\\\\CYRAE /g, '\\u04D4' ],\n [ /\\\\cyrchar\\\\cyrae /g, '\\u04D5' ],\n [ /\\\\cyrchar\\\\CYRSCHWA /g, '\\u04D8' ],\n [ /\\\\cyrchar\\\\cyrschwa /g, '\\u04D9' ],\n [ /\\\\cyrchar\\\\CYRABHDZE /g, '\\u04E0' ],\n [ /\\\\cyrchar\\\\cyrabhdze /g, '\\u04E1' ],\n [ /\\\\cyrchar\\\\CYROTLD /g, '\\u04E8' ],\n [ /\\\\cyrchar\\\\cyrotld /g, '\\u04E9' ],\n [ /\\\\hspace\\{0.6em\\}/g, '\\u2002' ],\n [ /\\\\hspace\\{1em\\}/g, '\\u2003' ],\n [ /\\\\hspace\\{0.33em\\}/g, '\\u2004' ],\n [ /\\\\hspace\\{0.25em\\}/g, '\\u2005' ],\n [ /\\\\hspace\\{0.166em\\}/g, '\\u2006' ],\n [ /\\\\hphantom\\{0\\}/g, '\\u2007' ],\n [ /\\\\hphantom\\{,\\}/g, '\\u2008' ],\n [ /\\\\hspace\\{0.167em\\}/g, '\\u2009' ],\n [ /\\\\mkern1mu /g, '\\u200A' ],\n [ /\\\\textendash /g, '\\u2013' ],\n [ /\\\\textemdash /g, '\\u2014' ],\n [ /\\\\rule\\{1em\\}\\{1pt\\}/g, '\\u2015' ],\n [ /\\\\Vert /g, '\\u2016' ],\n [ /\\\\Elzreapos /g, '\\u201B' ],\n [ /\\\\textquotedblleft /g, '\\u201C' ],\n [ /\\\\textquotedblright /g, '\\u201D' ],\n [ /\\\\textdagger /g, '\\u2020' ],\n [ /\\\\textdaggerdbl /g, '\\u2021' ],\n [ /\\\\textbullet /g, '\\u2022' ],\n [ /\\\\ldots /g, '\\u2026' ],\n [ /\\\\textperthousand /g, '\\u2030' ],\n [ /\\\\textpertenthousand /g, '\\u2031' ],\n [ /\\\\backprime /g, '\\u2035' ],\n [ /\\\\guilsinglleft /g, '\\u2039' ],\n [ /\\\\guilsinglright /g, '\\u203A' ],\n [ /\\\\mkern4mu /g, '\\u205F' ],\n [ /\\\\nolinebreak /g, '\\u2060' ],\n [ /\\\\ensuremath\\{\\\\Elzpes\\}/g, '\\u20A7' ],\n [ /\\\\mbox\\{\\\\texteuro\\} /g, '\\u20AC' ],\n [ /\\\\dddot /g, '\\u20DB' ],\n [ /\\\\ddddot /g, '\\u20DC' ],\n [ /\\\\mathbb\\{C\\}/g, '\\u2102' ],\n [ /\\\\mathscr\\{g\\}/g, '\\u210A' ],\n [ /\\\\mathscr\\{H\\}/g, '\\u210B' ],\n [ /\\\\mathfrak\\{H\\}/g, '\\u210C' ],\n [ /\\\\mathbb\\{H\\}/g, '\\u210D' ],\n [ /\\\\hslash /g, '\\u210F' ],\n [ /\\\\mathscr\\{I\\}/g, '\\u2110' ],\n [ /\\\\mathfrak\\{I\\}/g, '\\u2111' ],\n [ /\\\\mathscr\\{L\\}/g, '\\u2112' ],\n [ /\\\\mathscr\\{l\\}/g, '\\u2113' ],\n [ /\\\\mathbb\\{N\\}/g, '\\u2115' ],\n [ /\\\\cyrchar\\\\textnumero /g, '\\u2116' ],\n [ /\\\\wp /g, '\\u2118' ],\n [ /\\\\mathbb\\{P\\}/g, '\\u2119' ],\n [ /\\\\mathbb\\{Q\\}/g, '\\u211A' ],\n [ /\\\\mathscr\\{R\\}/g, '\\u211B' ],\n [ /\\\\mathfrak\\{R\\}/g, '\\u211C' ],\n [ /\\\\mathbb\\{R\\}/g, '\\u211D' ],\n [ /\\\\Elzxrat /g, '\\u211E' ],\n [ /\\\\texttrademark /g, '\\u2122' ],\n [ /\\\\mathbb\\{Z\\}/g, '\\u2124' ],\n [ /\\\\Omega /g, '\\u2126' ],\n [ /\\\\mho /g, '\\u2127' ],\n [ /\\\\mathfrak\\{Z\\}/g, '\\u2128' ],\n [ /\\\\ElsevierGlyph\\{2129\\}/g, '\\u2129' ],\n [ /\\\\AA /g, '\\u212B' ],\n [ /\\\\mathscr\\{B\\}/g, '\\u212C' ],\n [ /\\\\mathfrak\\{C\\}/g, '\\u212D' ],\n [ /\\\\mathscr\\{e\\}/g, '\\u212F' ],\n [ /\\\\mathscr\\{E\\}/g, '\\u2130' ],\n [ /\\\\mathscr\\{F\\}/g, '\\u2131' ],\n [ /\\\\mathscr\\{M\\}/g, '\\u2133' ],\n [ /\\\\mathscr\\{o\\}/g, '\\u2134' ],\n [ /\\\\aleph /g, '\\u2135' ],\n [ /\\\\beth /g, '\\u2136' ],\n [ /\\\\gimel /g, '\\u2137' ],\n [ /\\\\daleth /g, '\\u2138' ],\n [ /\\\\textfrac\\{1\\}\\{3\\}/g, '\\u2153' ],\n [ /\\\\textfrac\\{2\\}\\{3\\}/g, '\\u2154' ],\n [ /\\\\textfrac\\{1\\}\\{5\\}/g, '\\u2155' ],\n [ /\\\\textfrac\\{2\\}\\{5\\}/g, '\\u2156' ],\n [ /\\\\textfrac\\{3\\}\\{5\\}/g, '\\u2157' ],\n [ /\\\\textfrac\\{4\\}\\{5\\}/g, '\\u2158' ],\n [ /\\\\textfrac\\{1\\}\\{6\\}/g, '\\u2159' ],\n [ /\\\\textfrac\\{5\\}\\{6\\}/g, '\\u215A' ],\n [ /\\\\textfrac\\{1\\}\\{8\\}/g, '\\u215B' ],\n [ /\\\\textfrac\\{3\\}\\{8\\}/g, '\\u215C' ],\n [ /\\\\textfrac\\{5\\}\\{8\\}/g, '\\u215D' ],\n [ /\\\\textfrac\\{7\\}\\{8\\}/g, '\\u215E' ],\n [ /\\\\leftarrow /g, '\\u2190' ],\n [ /\\\\uparrow /g, '\\u2191' ],\n [ /\\\\rightarrow /g, '\\u2192' ],\n [ /\\\\downarrow /g, '\\u2193' ],\n [ /\\\\leftrightarrow /g, '\\u2194' ],\n [ /\\\\updownarrow /g, '\\u2195' ],\n [ /\\\\nwarrow /g, '\\u2196' ],\n [ /\\\\nearrow /g, '\\u2197' ],\n [ /\\\\searrow /g, '\\u2198' ],\n [ /\\\\swarrow /g, '\\u2199' ],\n [ /\\\\nleftarrow /g, '\\u219A' ],\n [ /\\\\nrightarrow /g, '\\u219B' ],\n [ /\\\\arrowwaveright /g, '\\u219C' ],\n [ /\\\\arrowwaveright /g, '\\u219D' ],\n [ /\\\\twoheadleftarrow /g, '\\u219E' ],\n [ /\\\\twoheadrightarrow /g, '\\u21A0' ],\n [ /\\\\leftarrowtail /g, '\\u21A2' ],\n [ /\\\\rightarrowtail /g, '\\u21A3' ],\n [ /\\\\mapsto /g, '\\u21A6' ],\n [ /\\\\hookleftarrow /g, '\\u21A9' ],\n [ /\\\\hookrightarrow /g, '\\u21AA' ],\n [ /\\\\looparrowleft /g, '\\u21AB' ],\n [ /\\\\looparrowright /g, '\\u21AC' ],\n [ /\\\\leftrightsquigarrow /g, '\\u21AD' ],\n [ /\\\\nleftrightarrow /g, '\\u21AE' ],\n [ /\\\\Lsh /g, '\\u21B0' ],\n [ /\\\\Rsh /g, '\\u21B1' ],\n [ /\\\\ElsevierGlyph\\{21B3\\}/g, '\\u21B3' ],\n [ /\\\\curvearrowleft /g, '\\u21B6' ],\n [ /\\\\curvearrowright /g, '\\u21B7' ],\n [ /\\\\circlearrowleft /g, '\\u21BA' ],\n [ /\\\\circlearrowright /g, '\\u21BB' ],\n [ /\\\\leftharpoonup /g, '\\u21BC' ],\n [ /\\\\leftharpoondown /g, '\\u21BD' ],\n [ /\\\\upharpoonright /g, '\\u21BE' ],\n [ /\\\\upharpoonleft /g, '\\u21BF' ],\n [ /\\\\rightharpoonup /g, '\\u21C0' ],\n [ /\\\\rightharpoondown /g, '\\u21C1' ],\n [ /\\\\downharpoonright /g, '\\u21C2' ],\n [ /\\\\downharpoonleft /g, '\\u21C3' ],\n [ /\\\\rightleftarrows /g, '\\u21C4' ],\n [ /\\\\dblarrowupdown /g, '\\u21C5' ],\n [ /\\\\leftrightarrows /g, '\\u21C6' ],\n [ /\\\\leftleftarrows /g, '\\u21C7' ],\n [ /\\\\upuparrows /g, '\\u21C8' ],\n [ /\\\\rightrightarrows /g, '\\u21C9' ],\n [ /\\\\downdownarrows /g, '\\u21CA' ],\n [ /\\\\leftrightharpoons /g, '\\u21CB' ],\n [ /\\\\rightleftharpoons /g, '\\u21CC' ],\n [ /\\\\nLeftarrow /g, '\\u21CD' ],\n [ /\\\\nLeftrightarrow /g, '\\u21CE' ],\n [ /\\\\nRightarrow /g, '\\u21CF' ],\n [ /\\\\Leftarrow /g, '\\u21D0' ],\n [ /\\\\Uparrow /g, '\\u21D1' ],\n [ /\\\\Rightarrow /g, '\\u21D2' ],\n [ /\\\\Downarrow /g, '\\u21D3' ],\n [ /\\\\Leftrightarrow /g, '\\u21D4' ],\n [ /\\\\Updownarrow /g, '\\u21D5' ],\n [ /\\\\Lleftarrow /g, '\\u21DA' ],\n [ /\\\\Rrightarrow /g, '\\u21DB' ],\n [ /\\\\rightsquigarrow /g, '\\u21DD' ],\n [ /\\\\DownArrowUpArrow /g, '\\u21F5' ],\n [ /\\\\forall /g, '\\u2200' ],\n [ /\\\\complement /g, '\\u2201' ],\n [ /\\\\partial /g, '\\u2202' ],\n [ /\\\\exists /g, '\\u2203' ],\n [ /\\\\nexists /g, '\\u2204' ],\n [ /\\\\varnothing /g, '\\u2205' ],\n [ /\\\\nabla /g, '\\u2207' ],\n [ /\\\\in /g, '\\u2208' ],\n [ /\\\\not\\\\in /g, '\\u2209' ],\n [ /\\\\ni /g, '\\u220B' ],\n [ /\\\\not\\\\ni /g, '\\u220C' ],\n [ /\\\\prod /g, '\\u220F' ],\n [ /\\\\coprod /g, '\\u2210' ],\n [ /\\\\sum /g, '\\u2211' ],\n [ /\\\\mp /g, '\\u2213' ],\n [ /\\\\dotplus /g, '\\u2214' ],\n [ /\\\\setminus /g, '\\u2216' ],\n [ /\\\\circ /g, '\\u2218' ],\n [ /\\\\bullet /g, '\\u2219' ],\n [ /\\\\surd /g, '\\u221A' ],\n [ /\\\\propto /g, '\\u221D' ],\n [ /\\\\infty /g, '\\u221E' ],\n [ /\\\\rightangle /g, '\\u221F' ],\n [ /\\\\angle /g, '\\u2220' ],\n [ /\\\\measuredangle /g, '\\u2221' ],\n [ /\\\\sphericalangle /g, '\\u2222' ],\n [ /\\\\mid /g, '\\u2223' ],\n [ /\\\\nmid /g, '\\u2224' ],\n [ /\\\\parallel /g, '\\u2225' ],\n [ /\\\\nparallel /g, '\\u2226' ],\n [ /\\\\wedge /g, '\\u2227' ],\n [ /\\\\vee /g, '\\u2228' ],\n [ /\\\\cap /g, '\\u2229' ],\n [ /\\\\cup /g, '\\u222A' ],\n [ /\\\\int /g, '\\u222B' ],\n [ /\\\\int\\\\!\\\\int /g, '\\u222C' ],\n [ /\\\\int\\\\!\\\\int\\\\!\\\\int /g, '\\u222D' ],\n [ /\\\\oint /g, '\\u222E' ],\n [ /\\\\surfintegral /g, '\\u222F' ],\n [ /\\\\volintegral /g, '\\u2230' ],\n [ /\\\\clwintegral /g, '\\u2231' ],\n [ /\\\\ElsevierGlyph\\{2232\\}/g, '\\u2232' ],\n [ /\\\\ElsevierGlyph\\{2233\\}/g, '\\u2233' ],\n [ /\\\\therefore /g, '\\u2234' ],\n [ /\\\\because /g, '\\u2235' ],\n [ /\\\\Colon /g, '\\u2237' ],\n [ /\\\\ElsevierGlyph\\{2238\\}/g, '\\u2238' ],\n [ /\\\\mathbin\\{\\{:\\}\\\\!\\\\!\\{\\-\\}\\\\!\\\\!\\{:\\}\\}/g, '\\u223A' ],\n [ /\\\\homothetic /g, '\\u223B' ],\n [ /\\\\sim /g, '\\u223C' ],\n [ /\\\\backsim /g, '\\u223D' ],\n [ /\\\\lazysinv /g, '\\u223E' ],\n [ /\\\\wr /g, '\\u2240' ],\n [ /\\\\not\\\\sim /g, '\\u2241' ],\n [ /\\\\ElsevierGlyph\\{2242\\}/g, '\\u2242' ],\n [ /\\\\NotEqualTilde /g, '\\u2242-00338' ],\n [ /\\\\simeq /g, '\\u2243' ],\n [ /\\\\not\\\\simeq /g, '\\u2244' ],\n [ /\\\\cong /g, '\\u2245' ],\n [ /\\\\approxnotequal /g, '\\u2246' ],\n [ /\\\\not\\\\cong /g, '\\u2247' ],\n [ /\\\\approx /g, '\\u2248' ],\n [ /\\\\not\\\\approx /g, '\\u2249' ],\n [ /\\\\approxeq /g, '\\u224A' ],\n [ /\\\\tildetrpl /g, '\\u224B' ],\n [ /\\\\not\\\\apid /g, '\\u224B-00338' ],\n [ /\\\\allequal /g, '\\u224C' ],\n [ /\\\\asymp /g, '\\u224D' ],\n [ /\\\\Bumpeq /g, '\\u224E' ],\n [ /\\\\NotHumpDownHump /g, '\\u224E-00338' ],\n [ /\\\\bumpeq /g, '\\u224F' ],\n [ /\\\\NotHumpEqual /g, '\\u224F-00338' ],\n [ /\\\\doteq /g, '\\u2250' ],\n [ /\\\\not\\\\doteq/g, '\\u2250-00338' ],\n [ /\\\\doteqdot /g, '\\u2251' ],\n [ /\\\\fallingdotseq /g, '\\u2252' ],\n [ /\\\\risingdotseq /g, '\\u2253' ],\n [ /\\\\eqcirc /g, '\\u2256' ],\n [ /\\\\circeq /g, '\\u2257' ],\n [ /\\\\estimates /g, '\\u2259' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u225A' ],\n [ /\\\\starequal /g, '\\u225B' ],\n [ /\\\\triangleq /g, '\\u225C' ],\n [ /\\\\ElsevierGlyph\\{225F\\}/g, '\\u225F' ],\n [ /\\\\not =/g, '\\u2260' ],\n [ /\\\\equiv /g, '\\u2261' ],\n [ /\\\\not\\\\equiv /g, '\\u2262' ],\n [ /\\\\leq /g, '\\u2264' ],\n [ /\\\\geq /g, '\\u2265' ],\n [ /\\\\leqq /g, '\\u2266' ],\n [ /\\\\geqq /g, '\\u2267' ],\n [ /\\\\lneqq /g, '\\u2268' ],\n [ /\\\\lvertneqq /g, '\\u2268-0FE00' ],\n [ /\\\\gneqq /g, '\\u2269' ],\n [ /\\\\gvertneqq /g, '\\u2269-0FE00' ],\n [ /\\\\ll /g, '\\u226A' ],\n [ /\\\\NotLessLess /g, '\\u226A-00338' ],\n [ /\\\\gg /g, '\\u226B' ],\n [ /\\\\NotGreaterGreater /g, '\\u226B-00338' ],\n [ /\\\\between /g, '\\u226C' ],\n [ /\\\\not\\\\kern\\-0.3em\\\\times /g, '\\u226D' ],\n [ /\\\\not/g, '\\u226F' ],\n [ /\\\\not\\\\leq /g, '\\u2270' ],\n [ /\\\\not\\\\geq /g, '\\u2271' ],\n [ /\\\\lessequivlnt /g, '\\u2272' ],\n [ /\\\\greaterequivlnt /g, '\\u2273' ],\n [ /\\\\ElsevierGlyph\\{2274\\}/g, '\\u2274' ],\n [ /\\\\ElsevierGlyph\\{2275\\}/g, '\\u2275' ],\n [ /\\\\lessgtr /g, '\\u2276' ],\n [ /\\\\gtrless /g, '\\u2277' ],\n [ /\\\\notlessgreater /g, '\\u2278' ],\n [ /\\\\notgreaterless /g, '\\u2279' ],\n [ /\\\\prec /g, '\\u227A' ],\n [ /\\\\succ /g, '\\u227B' ],\n [ /\\\\preccurlyeq /g, '\\u227C' ],\n [ /\\\\succcurlyeq /g, '\\u227D' ],\n [ /\\\\precapprox /g, '\\u227E' ],\n [ /\\\\NotPrecedesTilde /g, '\\u227E-00338' ],\n [ /\\\\succapprox /g, '\\u227F' ],\n [ /\\\\NotSucceedsTilde /g, '\\u227F-00338' ],\n [ /\\\\not\\\\prec /g, '\\u2280' ],\n [ /\\\\not\\\\succ /g, '\\u2281' ],\n [ /\\\\subset /g, '\\u2282' ],\n [ /\\\\supset /g, '\\u2283' ],\n [ /\\\\not\\\\subset /g, '\\u2284' ],\n [ /\\\\not\\\\supset /g, '\\u2285' ],\n [ /\\\\subseteq /g, '\\u2286' ],\n [ /\\\\supseteq /g, '\\u2287' ],\n [ /\\\\not\\\\subseteq /g, '\\u2288' ],\n [ /\\\\not\\\\supseteq /g, '\\u2289' ],\n [ /\\\\subsetneq /g, '\\u228A' ],\n [ /\\\\varsubsetneqq /g, '\\u228A-0FE00' ],\n [ /\\\\supsetneq /g, '\\u228B' ],\n [ /\\\\varsupsetneq /g, '\\u228B-0FE00' ],\n [ /\\\\uplus /g, '\\u228E' ],\n [ /\\\\sqsubset /g, '\\u228F' ],\n [ /\\\\NotSquareSubset /g, '\\u228F-00338' ],\n [ /\\\\sqsupset /g, '\\u2290' ],\n [ /\\\\NotSquareSuperset /g, '\\u2290-00338' ],\n [ /\\\\sqsubseteq /g, '\\u2291' ],\n [ /\\\\sqsupseteq /g, '\\u2292' ],\n [ /\\\\sqcap /g, '\\u2293' ],\n [ /\\\\sqcup /g, '\\u2294' ],\n [ /\\\\oplus /g, '\\u2295' ],\n [ /\\\\ominus /g, '\\u2296' ],\n [ /\\\\otimes /g, '\\u2297' ],\n [ /\\\\oslash /g, '\\u2298' ],\n [ /\\\\odot /g, '\\u2299' ],\n [ /\\\\circledcirc /g, '\\u229A' ],\n [ /\\\\circledast /g, '\\u229B' ],\n [ /\\\\circleddash /g, '\\u229D' ],\n [ /\\\\boxplus /g, '\\u229E' ],\n [ /\\\\boxminus /g, '\\u229F' ],\n [ /\\\\boxtimes /g, '\\u22A0' ],\n [ /\\\\boxdot /g, '\\u22A1' ],\n [ /\\\\vdash /g, '\\u22A2' ],\n [ /\\\\dashv /g, '\\u22A3' ],\n [ /\\\\top /g, '\\u22A4' ],\n [ /\\\\perp /g, '\\u22A5' ],\n [ /\\\\truestate /g, '\\u22A7' ],\n [ /\\\\forcesextra /g, '\\u22A8' ],\n [ /\\\\Vdash /g, '\\u22A9' ],\n [ /\\\\Vvdash /g, '\\u22AA' ],\n [ /\\\\VDash /g, '\\u22AB' ],\n [ /\\\\nvdash /g, '\\u22AC' ],\n [ /\\\\nvDash /g, '\\u22AD' ],\n [ /\\\\nVdash /g, '\\u22AE' ],\n [ /\\\\nVDash /g, '\\u22AF' ],\n [ /\\\\vartriangleleft /g, '\\u22B2' ],\n [ /\\\\vartriangleright /g, '\\u22B3' ],\n [ /\\\\trianglelefteq /g, '\\u22B4' ],\n [ /\\\\trianglerighteq /g, '\\u22B5' ],\n [ /\\\\original /g, '\\u22B6' ],\n [ /\\\\image /g, '\\u22B7' ],\n [ /\\\\multimap /g, '\\u22B8' ],\n [ /\\\\hermitconjmatrix /g, '\\u22B9' ],\n [ /\\\\intercal /g, '\\u22BA' ],\n [ /\\\\veebar /g, '\\u22BB' ],\n [ /\\\\rightanglearc /g, '\\u22BE' ],\n [ /\\\\ElsevierGlyph\\{22C0\\}/g, '\\u22C0' ],\n [ /\\\\ElsevierGlyph\\{22C1\\}/g, '\\u22C1' ],\n [ /\\\\bigcap /g, '\\u22C2' ],\n [ /\\\\bigcup /g, '\\u22C3' ],\n [ /\\\\diamond /g, '\\u22C4' ],\n [ /\\\\cdot /g, '\\u22C5' ],\n [ /\\\\star /g, '\\u22C6' ],\n [ /\\\\divideontimes /g, '\\u22C7' ],\n [ /\\\\bowtie /g, '\\u22C8' ],\n [ /\\\\ltimes /g, '\\u22C9' ],\n [ /\\\\rtimes /g, '\\u22CA' ],\n [ /\\\\leftthreetimes /g, '\\u22CB' ],\n [ /\\\\rightthreetimes /g, '\\u22CC' ],\n [ /\\\\backsimeq /g, '\\u22CD' ],\n [ /\\\\curlyvee /g, '\\u22CE' ],\n [ /\\\\curlywedge /g, '\\u22CF' ],\n [ /\\\\Subset /g, '\\u22D0' ],\n [ /\\\\Supset /g, '\\u22D1' ],\n [ /\\\\Cap /g, '\\u22D2' ],\n [ /\\\\Cup /g, '\\u22D3' ],\n [ /\\\\pitchfork /g, '\\u22D4' ],\n [ /\\\\lessdot /g, '\\u22D6' ],\n [ /\\\\gtrdot /g, '\\u22D7' ],\n [ /\\\\verymuchless /g, '\\u22D8' ],\n [ /\\\\verymuchgreater /g, '\\u22D9' ],\n [ /\\\\lesseqgtr /g, '\\u22DA' ],\n [ /\\\\gtreqless /g, '\\u22DB' ],\n [ /\\\\curlyeqprec /g, '\\u22DE' ],\n [ /\\\\curlyeqsucc /g, '\\u22DF' ],\n [ /\\\\not\\\\sqsubseteq /g, '\\u22E2' ],\n [ /\\\\not\\\\sqsupseteq /g, '\\u22E3' ],\n [ /\\\\Elzsqspne /g, '\\u22E5' ],\n [ /\\\\lnsim /g, '\\u22E6' ],\n [ /\\\\gnsim /g, '\\u22E7' ],\n [ /\\\\precedesnotsimilar /g, '\\u22E8' ],\n [ /\\\\succnsim /g, '\\u22E9' ],\n [ /\\\\ntriangleleft /g, '\\u22EA' ],\n [ /\\\\ntriangleright /g, '\\u22EB' ],\n [ /\\\\ntrianglelefteq /g, '\\u22EC' ],\n [ /\\\\ntrianglerighteq /g, '\\u22ED' ],\n [ /\\\\vdots /g, '\\u22EE' ],\n [ /\\\\cdots /g, '\\u22EF' ],\n [ /\\\\upslopeellipsis /g, '\\u22F0' ],\n [ /\\\\downslopeellipsis /g, '\\u22F1' ],\n [ /\\\\barwedge /g, '\\u2305' ],\n [ /\\\\perspcorrespond /g, '\\u2306' ],\n [ /\\\\lceil /g, '\\u2308' ],\n [ /\\\\rceil /g, '\\u2309' ],\n [ /\\\\lfloor /g, '\\u230A' ],\n [ /\\\\rfloor /g, '\\u230B' ],\n [ /\\\\recorder /g, '\\u2315' ],\n [ /\\\\mathchar\"2208/g, '\\u2316' ],\n [ /\\\\ulcorner /g, '\\u231C' ],\n [ /\\\\urcorner /g, '\\u231D' ],\n [ /\\\\llcorner /g, '\\u231E' ],\n [ /\\\\lrcorner /g, '\\u231F' ],\n [ /\\\\frown /g, '\\u2322' ],\n [ /\\\\smile /g, '\\u2323' ],\n [ /\\\\langle /g, '\\u2329' ],\n [ /\\\\rangle /g, '\\u232A' ],\n [ /\\\\ElsevierGlyph\\{E838\\}/g, '\\u233D' ],\n [ /\\\\Elzdlcorn /g, '\\u23A3' ],\n [ /\\\\lmoustache /g, '\\u23B0' ],\n [ /\\\\rmoustache /g, '\\u23B1' ],\n [ /\\\\textvisiblespace /g, '\\u2423' ],\n [ /\\\\ding\\{172\\}/g, '\\u2460' ],\n [ /\\\\ding\\{173\\}/g, '\\u2461' ],\n [ /\\\\ding\\{174\\}/g, '\\u2462' ],\n [ /\\\\ding\\{175\\}/g, '\\u2463' ],\n [ /\\\\ding\\{176\\}/g, '\\u2464' ],\n [ /\\\\ding\\{177\\}/g, '\\u2465' ],\n [ /\\\\ding\\{178\\}/g, '\\u2466' ],\n [ /\\\\ding\\{179\\}/g, '\\u2467' ],\n [ /\\\\ding\\{180\\}/g, '\\u2468' ],\n [ /\\\\ding\\{181\\}/g, '\\u2469' ],\n [ /\\\\circledS /g, '\\u24C8' ],\n [ /\\\\Elzdshfnc /g, '\\u2506' ],\n [ /\\\\Elzsqfnw /g, '\\u2519' ],\n [ /\\\\diagup /g, '\\u2571' ],\n [ /\\\\ding\\{110\\}/g, '\\u25A0' ],\n [ /\\\\square /g, '\\u25A1' ],\n [ /\\\\blacksquare /g, '\\u25AA' ],\n [ /\\\\fbox\\{~~\\}/g, '\\u25AD' ],\n [ /\\\\Elzvrecto /g, '\\u25AF' ],\n [ /\\\\ElsevierGlyph\\{E381\\}/g, '\\u25B1' ],\n [ /\\\\ding\\{115\\}/g, '\\u25B2' ],\n [ /\\\\bigtriangleup /g, '\\u25B3' ],\n [ /\\\\blacktriangle /g, '\\u25B4' ],\n [ /\\\\vartriangle /g, '\\u25B5' ],\n [ /\\\\blacktriangleright /g, '\\u25B8' ],\n [ /\\\\triangleright /g, '\\u25B9' ],\n [ /\\\\ding\\{116\\}/g, '\\u25BC' ],\n [ /\\\\bigtriangledown /g, '\\u25BD' ],\n [ /\\\\blacktriangledown /g, '\\u25BE' ],\n [ /\\\\triangledown /g, '\\u25BF' ],\n [ /\\\\blacktriangleleft /g, '\\u25C2' ],\n [ /\\\\triangleleft /g, '\\u25C3' ],\n [ /\\\\ding\\{117\\}/g, '\\u25C6' ],\n [ /\\\\lozenge /g, '\\u25CA' ],\n [ /\\\\bigcirc /g, '\\u25CB' ],\n [ /\\\\ding\\{108\\}/g, '\\u25CF' ],\n [ /\\\\Elzcirfl /g, '\\u25D0' ],\n [ /\\\\Elzcirfr /g, '\\u25D1' ],\n [ /\\\\Elzcirfb /g, '\\u25D2' ],\n [ /\\\\ding\\{119\\}/g, '\\u25D7' ],\n [ /\\\\Elzrvbull /g, '\\u25D8' ],\n [ /\\\\Elzsqfl /g, '\\u25E7' ],\n [ /\\\\Elzsqfr /g, '\\u25E8' ],\n [ /\\\\Elzsqfse /g, '\\u25EA' ],\n [ /\\\\bigcirc /g, '\\u25EF' ],\n [ /\\\\ding\\{72\\}/g, '\\u2605' ],\n [ /\\\\ding\\{73\\}/g, '\\u2606' ],\n [ /\\\\ding\\{37\\}/g, '\\u260E' ],\n [ /\\\\ding\\{42\\}/g, '\\u261B' ],\n [ /\\\\ding\\{43\\}/g, '\\u261E' ],\n [ /\\\\rightmoon /g, '\\u263E' ],\n [ /\\\\mercury /g, '\\u263F' ],\n [ /\\\\venus /g, '\\u2640' ],\n [ /\\\\male /g, '\\u2642' ],\n [ /\\\\jupiter /g, '\\u2643' ],\n [ /\\\\saturn /g, '\\u2644' ],\n [ /\\\\uranus /g, '\\u2645' ],\n [ /\\\\neptune /g, '\\u2646' ],\n [ /\\\\pluto /g, '\\u2647' ],\n [ /\\\\aries /g, '\\u2648' ],\n [ /\\\\taurus /g, '\\u2649' ],\n [ /\\\\gemini /g, '\\u264A' ],\n [ /\\\\cancer /g, '\\u264B' ],\n [ /\\\\leo /g, '\\u264C' ],\n [ /\\\\virgo /g, '\\u264D' ],\n [ /\\\\libra /g, '\\u264E' ],\n [ /\\\\scorpio /g, '\\u264F' ],\n [ /\\\\sagittarius /g, '\\u2650' ],\n [ /\\\\capricornus /g, '\\u2651' ],\n [ /\\\\aquarius /g, '\\u2652' ],\n [ /\\\\pisces /g, '\\u2653' ],\n [ /\\\\ding\\{171\\}/g, '\\u2660' ],\n [ /\\\\diamond /g, '\\u2662' ],\n [ /\\\\ding\\{168\\}/g, '\\u2663' ],\n [ /\\\\ding\\{170\\}/g, '\\u2665' ],\n [ /\\\\ding\\{169\\}/g, '\\u2666' ],\n [ /\\\\quarternote /g, '\\u2669' ],\n [ /\\\\eighthnote /g, '\\u266A' ],\n [ /\\\\flat /g, '\\u266D' ],\n [ /\\\\natural /g, '\\u266E' ],\n [ /\\\\sharp /g, '\\u266F' ],\n [ /\\\\ding\\{33\\}/g, '\\u2701' ],\n [ /\\\\ding\\{34\\}/g, '\\u2702' ],\n [ /\\\\ding\\{35\\}/g, '\\u2703' ],\n [ /\\\\ding\\{36\\}/g, '\\u2704' ],\n [ /\\\\ding\\{38\\}/g, '\\u2706' ],\n [ /\\\\ding\\{39\\}/g, '\\u2707' ],\n [ /\\\\ding\\{40\\}/g, '\\u2708' ],\n [ /\\\\ding\\{41\\}/g, '\\u2709' ],\n [ /\\\\ding\\{44\\}/g, '\\u270C' ],\n [ /\\\\ding\\{45\\}/g, '\\u270D' ],\n [ /\\\\ding\\{46\\}/g, '\\u270E' ],\n [ /\\\\ding\\{47\\}/g, '\\u270F' ],\n [ /\\\\ding\\{48\\}/g, '\\u2710' ],\n [ /\\\\ding\\{49\\}/g, '\\u2711' ],\n [ /\\\\ding\\{50\\}/g, '\\u2712' ],\n [ /\\\\ding\\{51\\}/g, '\\u2713' ],\n [ /\\\\ding\\{52\\}/g, '\\u2714' ],\n [ /\\\\ding\\{53\\}/g, '\\u2715' ],\n [ /\\\\ding\\{54\\}/g, '\\u2716' ],\n [ /\\\\ding\\{55\\}/g, '\\u2717' ],\n [ /\\\\ding\\{56\\}/g, '\\u2718' ],\n [ /\\\\ding\\{57\\}/g, '\\u2719' ],\n [ /\\\\ding\\{58\\}/g, '\\u271A' ],\n [ /\\\\ding\\{59\\}/g, '\\u271B' ],\n [ /\\\\ding\\{60\\}/g, '\\u271C' ],\n [ /\\\\ding\\{61\\}/g, '\\u271D' ],\n [ /\\\\ding\\{62\\}/g, '\\u271E' ],\n [ /\\\\ding\\{63\\}/g, '\\u271F' ],\n [ /\\\\ding\\{64\\}/g, '\\u2720' ],\n [ /\\\\ding\\{65\\}/g, '\\u2721' ],\n [ /\\\\ding\\{66\\}/g, '\\u2722' ],\n [ /\\\\ding\\{67\\}/g, '\\u2723' ],\n [ /\\\\ding\\{68\\}/g, '\\u2724' ],\n [ /\\\\ding\\{69\\}/g, '\\u2725' ],\n [ /\\\\ding\\{70\\}/g, '\\u2726' ],\n [ /\\\\ding\\{71\\}/g, '\\u2727' ],\n [ /\\\\ding\\{73\\}/g, '\\u2729' ],\n [ /\\\\ding\\{74\\}/g, '\\u272A' ],\n [ /\\\\ding\\{75\\}/g, '\\u272B' ],\n [ /\\\\ding\\{76\\}/g, '\\u272C' ],\n [ /\\\\ding\\{77\\}/g, '\\u272D' ],\n [ /\\\\ding\\{78\\}/g, '\\u272E' ],\n [ /\\\\ding\\{79\\}/g, '\\u272F' ],\n [ /\\\\ding\\{80\\}/g, '\\u2730' ],\n [ /\\\\ding\\{81\\}/g, '\\u2731' ],\n [ /\\\\ding\\{82\\}/g, '\\u2732' ],\n [ /\\\\ding\\{83\\}/g, '\\u2733' ],\n [ /\\\\ding\\{84\\}/g, '\\u2734' ],\n [ /\\\\ding\\{85\\}/g, '\\u2735' ],\n [ /\\\\ding\\{86\\}/g, '\\u2736' ],\n [ /\\\\ding\\{87\\}/g, '\\u2737' ],\n [ /\\\\ding\\{88\\}/g, '\\u2738' ],\n [ /\\\\ding\\{89\\}/g, '\\u2739' ],\n [ /\\\\ding\\{90\\}/g, '\\u273A' ],\n [ /\\\\ding\\{91\\}/g, '\\u273B' ],\n [ /\\\\ding\\{92\\}/g, '\\u273C' ],\n [ /\\\\ding\\{93\\}/g, '\\u273D' ],\n [ /\\\\ding\\{94\\}/g, '\\u273E' ],\n [ /\\\\ding\\{95\\}/g, '\\u273F' ],\n [ /\\\\ding\\{96\\}/g, '\\u2740' ],\n [ /\\\\ding\\{97\\}/g, '\\u2741' ],\n [ /\\\\ding\\{98\\}/g, '\\u2742' ],\n [ /\\\\ding\\{99\\}/g, '\\u2743' ],\n [ /\\\\ding\\{100\\}/g, '\\u2744' ],\n [ /\\\\ding\\{101\\}/g, '\\u2745' ],\n [ /\\\\ding\\{102\\}/g, '\\u2746' ],\n [ /\\\\ding\\{103\\}/g, '\\u2747' ],\n [ /\\\\ding\\{104\\}/g, '\\u2748' ],\n [ /\\\\ding\\{105\\}/g, '\\u2749' ],\n [ /\\\\ding\\{106\\}/g, '\\u274A' ],\n [ /\\\\ding\\{107\\}/g, '\\u274B' ],\n [ /\\\\ding\\{109\\}/g, '\\u274D' ],\n [ /\\\\ding\\{111\\}/g, '\\u274F' ],\n [ /\\\\ding\\{112\\}/g, '\\u2750' ],\n [ /\\\\ding\\{113\\}/g, '\\u2751' ],\n [ /\\\\ding\\{114\\}/g, '\\u2752' ],\n [ /\\\\ding\\{118\\}/g, '\\u2756' ],\n [ /\\\\ding\\{120\\}/g, '\\u2758' ],\n [ /\\\\ding\\{121\\}/g, '\\u2759' ],\n [ /\\\\ding\\{122\\}/g, '\\u275A' ],\n [ /\\\\ding\\{123\\}/g, '\\u275B' ],\n [ /\\\\ding\\{124\\}/g, '\\u275C' ],\n [ /\\\\ding\\{125\\}/g, '\\u275D' ],\n [ /\\\\ding\\{126\\}/g, '\\u275E' ],\n [ /\\\\ding\\{161\\}/g, '\\u2761' ],\n [ /\\\\ding\\{162\\}/g, '\\u2762' ],\n [ /\\\\ding\\{163\\}/g, '\\u2763' ],\n [ /\\\\ding\\{164\\}/g, '\\u2764' ],\n [ /\\\\ding\\{165\\}/g, '\\u2765' ],\n [ /\\\\ding\\{166\\}/g, '\\u2766' ],\n [ /\\\\ding\\{167\\}/g, '\\u2767' ],\n [ /\\\\ding\\{182\\}/g, '\\u2776' ],\n [ /\\\\ding\\{183\\}/g, '\\u2777' ],\n [ /\\\\ding\\{184\\}/g, '\\u2778' ],\n [ /\\\\ding\\{185\\}/g, '\\u2779' ],\n [ /\\\\ding\\{186\\}/g, '\\u277A' ],\n [ /\\\\ding\\{187\\}/g, '\\u277B' ],\n [ /\\\\ding\\{188\\}/g, '\\u277C' ],\n [ /\\\\ding\\{189\\}/g, '\\u277D' ],\n [ /\\\\ding\\{190\\}/g, '\\u277E' ],\n [ /\\\\ding\\{191\\}/g, '\\u277F' ],\n [ /\\\\ding\\{192\\}/g, '\\u2780' ],\n [ /\\\\ding\\{193\\}/g, '\\u2781' ],\n [ /\\\\ding\\{194\\}/g, '\\u2782' ],\n [ /\\\\ding\\{195\\}/g, '\\u2783' ],\n [ /\\\\ding\\{196\\}/g, '\\u2784' ],\n [ /\\\\ding\\{197\\}/g, '\\u2785' ],\n [ /\\\\ding\\{198\\}/g, '\\u2786' ],\n [ /\\\\ding\\{199\\}/g, '\\u2787' ],\n [ /\\\\ding\\{200\\}/g, '\\u2788' ],\n [ /\\\\ding\\{201\\}/g, '\\u2789' ],\n [ /\\\\ding\\{202\\}/g, '\\u278A' ],\n [ /\\\\ding\\{203\\}/g, '\\u278B' ],\n [ /\\\\ding\\{204\\}/g, '\\u278C' ],\n [ /\\\\ding\\{205\\}/g, '\\u278D' ],\n [ /\\\\ding\\{206\\}/g, '\\u278E' ],\n [ /\\\\ding\\{207\\}/g, '\\u278F' ],\n [ /\\\\ding\\{208\\}/g, '\\u2790' ],\n [ /\\\\ding\\{209\\}/g, '\\u2791' ],\n [ /\\\\ding\\{210\\}/g, '\\u2792' ],\n [ /\\\\ding\\{211\\}/g, '\\u2793' ],\n [ /\\\\ding\\{212\\}/g, '\\u2794' ],\n [ /\\\\ding\\{216\\}/g, '\\u2798' ],\n [ /\\\\ding\\{217\\}/g, '\\u2799' ],\n [ /\\\\ding\\{218\\}/g, '\\u279A' ],\n [ /\\\\ding\\{219\\}/g, '\\u279B' ],\n [ /\\\\ding\\{220\\}/g, '\\u279C' ],\n [ /\\\\ding\\{221\\}/g, '\\u279D' ],\n [ /\\\\ding\\{222\\}/g, '\\u279E' ],\n [ /\\\\ding\\{223\\}/g, '\\u279F' ],\n [ /\\\\ding\\{224\\}/g, '\\u27A0' ],\n [ /\\\\ding\\{225\\}/g, '\\u27A1' ],\n [ /\\\\ding\\{226\\}/g, '\\u27A2' ],\n [ /\\\\ding\\{227\\}/g, '\\u27A3' ],\n [ /\\\\ding\\{228\\}/g, '\\u27A4' ],\n [ /\\\\ding\\{229\\}/g, '\\u27A5' ],\n [ /\\\\ding\\{230\\}/g, '\\u27A6' ],\n [ /\\\\ding\\{231\\}/g, '\\u27A7' ],\n [ /\\\\ding\\{232\\}/g, '\\u27A8' ],\n [ /\\\\ding\\{233\\}/g, '\\u27A9' ],\n [ /\\\\ding\\{234\\}/g, '\\u27AA' ],\n [ /\\\\ding\\{235\\}/g, '\\u27AB' ],\n [ /\\\\ding\\{236\\}/g, '\\u27AC' ],\n [ /\\\\ding\\{237\\}/g, '\\u27AD' ],\n [ /\\\\ding\\{238\\}/g, '\\u27AE' ],\n [ /\\\\ding\\{239\\}/g, '\\u27AF' ],\n [ /\\\\ding\\{241\\}/g, '\\u27B1' ],\n [ /\\\\ding\\{242\\}/g, '\\u27B2' ],\n [ /\\\\ding\\{243\\}/g, '\\u27B3' ],\n [ /\\\\ding\\{244\\}/g, '\\u27B4' ],\n [ /\\\\ding\\{245\\}/g, '\\u27B5' ],\n [ /\\\\ding\\{246\\}/g, '\\u27B6' ],\n [ /\\\\ding\\{247\\}/g, '\\u27B7' ],\n [ /\\\\ding\\{248\\}/g, '\\u27B8' ],\n [ /\\\\ding\\{249\\}/g, '\\u27B9' ],\n [ /\\\\ding\\{250\\}/g, '\\u27BA' ],\n [ /\\\\ding\\{251\\}/g, '\\u27BB' ],\n [ /\\\\ding\\{252\\}/g, '\\u27BC' ],\n [ /\\\\ding\\{253\\}/g, '\\u27BD' ],\n [ /\\\\ding\\{254\\}/g, '\\u27BE' ],\n [ /\\\\longleftarrow /g, '\\u27F5' ],\n [ /\\\\longrightarrow /g, '\\u27F6' ],\n [ /\\\\longleftrightarrow /g, '\\u27F7' ],\n [ /\\\\Longleftarrow /g, '\\u27F8' ],\n [ /\\\\Longrightarrow /g, '\\u27F9' ],\n [ /\\\\Longleftrightarrow /g, '\\u27FA' ],\n [ /\\\\longmapsto /g, '\\u27FC' ],\n [ /\\\\sim\\\\joinrel\\\\leadsto/g, '\\u27FF' ],\n [ /\\\\ElsevierGlyph\\{E212\\}/g, '\\u2905' ],\n [ /\\\\UpArrowBar /g, '\\u2912' ],\n [ /\\\\DownArrowBar /g, '\\u2913' ],\n [ /\\\\ElsevierGlyph\\{E20C\\}/g, '\\u2923' ],\n [ /\\\\ElsevierGlyph\\{E20D\\}/g, '\\u2924' ],\n [ /\\\\ElsevierGlyph\\{E20B\\}/g, '\\u2925' ],\n [ /\\\\ElsevierGlyph\\{E20A\\}/g, '\\u2926' ],\n [ /\\\\ElsevierGlyph\\{E211\\}/g, '\\u2927' ],\n [ /\\\\ElsevierGlyph\\{E20E\\}/g, '\\u2928' ],\n [ /\\\\ElsevierGlyph\\{E20F\\}/g, '\\u2929' ],\n [ /\\\\ElsevierGlyph\\{E210\\}/g, '\\u292A' ],\n [ /\\\\ElsevierGlyph\\{E21C\\}/g, '\\u2933' ],\n [ /\\\\ElsevierGlyph\\{E21D\\}/g, '\\u2933-00338' ],\n [ /\\\\ElsevierGlyph\\{E21A\\}/g, '\\u2936' ],\n [ /\\\\ElsevierGlyph\\{E219\\}/g, '\\u2937' ],\n [ /\\\\Elolarr /g, '\\u2940' ],\n [ /\\\\Elorarr /g, '\\u2941' ],\n [ /\\\\ElzRlarr /g, '\\u2942' ],\n [ /\\\\ElzrLarr /g, '\\u2944' ],\n [ /\\\\Elzrarrx /g, '\\u2947' ],\n [ /\\\\LeftRightVector /g, '\\u294E' ],\n [ /\\\\RightUpDownVector /g, '\\u294F' ],\n [ /\\\\DownLeftRightVector /g, '\\u2950' ],\n [ /\\\\LeftUpDownVector /g, '\\u2951' ],\n [ /\\\\LeftVectorBar /g, '\\u2952' ],\n [ /\\\\RightVectorBar /g, '\\u2953' ],\n [ /\\\\RightUpVectorBar /g, '\\u2954' ],\n [ /\\\\RightDownVectorBar /g, '\\u2955' ],\n [ /\\\\DownLeftVectorBar /g, '\\u2956' ],\n [ /\\\\DownRightVectorBar /g, '\\u2957' ],\n [ /\\\\LeftUpVectorBar /g, '\\u2958' ],\n [ /\\\\LeftDownVectorBar /g, '\\u2959' ],\n [ /\\\\LeftTeeVector /g, '\\u295A' ],\n [ /\\\\RightTeeVector /g, '\\u295B' ],\n [ /\\\\RightUpTeeVector /g, '\\u295C' ],\n [ /\\\\RightDownTeeVector /g, '\\u295D' ],\n [ /\\\\DownLeftTeeVector /g, '\\u295E' ],\n [ /\\\\DownRightTeeVector /g, '\\u295F' ],\n [ /\\\\LeftUpTeeVector /g, '\\u2960' ],\n [ /\\\\LeftDownTeeVector /g, '\\u2961' ],\n [ /\\\\UpEquilibrium /g, '\\u296E' ],\n [ /\\\\ReverseUpEquilibrium /g, '\\u296F' ],\n [ /\\\\RoundImplies /g, '\\u2970' ],\n [ /\\\\ElsevierGlyph\\{E214\\}/g, '\\u297C' ],\n [ /\\\\ElsevierGlyph\\{E215\\}/g, '\\u297D' ],\n [ /\\\\Elztfnc /g, '\\u2980' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u2985' ],\n [ /\\\\Elroang /g, '\\u2986' ],\n [ /\\\\ElsevierGlyph\\{E291\\}/g, '\\u2994' ],\n [ /\\\\Elzddfnc /g, '\\u2999' ],\n [ /\\\\Angle /g, '\\u299C' ],\n [ /\\\\Elzlpargt /g, '\\u29A0' ],\n [ /\\\\ElsevierGlyph\\{E260\\}/g, '\\u29B5' ],\n [ /\\\\ElsevierGlyph\\{E61B\\}/g, '\\u29B6' ],\n [ /\\\\ElzLap /g, '\\u29CA' ],\n [ /\\\\Elzdefas /g, '\\u29CB' ],\n [ /\\\\LeftTriangleBar /g, '\\u29CF' ],\n [ /\\\\NotLeftTriangleBar /g, '\\u29CF-00338' ],\n [ /\\\\RightTriangleBar /g, '\\u29D0' ],\n [ /\\\\NotRightTriangleBar /g, '\\u29D0-00338' ],\n [ /\\\\ElsevierGlyph\\{E372\\}/g, '\\u29DC' ],\n [ /\\\\blacklozenge /g, '\\u29EB' ],\n [ /\\\\RuleDelayed /g, '\\u29F4' ],\n [ /\\\\Elxuplus /g, '\\u2A04' ],\n [ /\\\\ElzThr /g, '\\u2A05' ],\n [ /\\\\Elxsqcup /g, '\\u2A06' ],\n [ /\\\\ElzInf /g, '\\u2A07' ],\n [ /\\\\ElzSup /g, '\\u2A08' ],\n [ /\\\\ElzCint /g, '\\u2A0D' ],\n [ /\\\\clockoint /g, '\\u2A0F' ],\n [ /\\\\ElsevierGlyph\\{E395\\}/g, '\\u2A10' ],\n [ /\\\\sqrint /g, '\\u2A16' ],\n [ /\\\\ElsevierGlyph\\{E25A\\}/g, '\\u2A25' ],\n [ /\\\\ElsevierGlyph\\{E25B\\}/g, '\\u2A2A' ],\n [ /\\\\ElsevierGlyph\\{E25C\\}/g, '\\u2A2D' ],\n [ /\\\\ElsevierGlyph\\{E25D\\}/g, '\\u2A2E' ],\n [ /\\\\ElzTimes /g, '\\u2A2F' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A34' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A35' ],\n [ /\\\\ElsevierGlyph\\{E259\\}/g, '\\u2A3C' ],\n [ /\\\\amalg /g, '\\u2A3F' ],\n [ /\\\\ElzAnd /g, '\\u2A53' ],\n [ /\\\\ElzOr /g, '\\u2A54' ],\n [ /\\\\ElsevierGlyph\\{E36E\\}/g, '\\u2A55' ],\n [ /\\\\ElOr /g, '\\u2A56' ],\n [ /\\\\perspcorrespond /g, '\\u2A5E' ],\n [ /\\\\Elzminhat /g, '\\u2A5F' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u2A63' ],\n [ /\\\\stackrel\\{*\\}\\{=\\}/g, '\\u2A6E' ],\n [ /\\\\Equal /g, '\\u2A75' ],\n [ /\\\\leqslant /g, '\\u2A7D' ],\n [ /\\\\nleqslant /g, '\\u2A7D-00338' ],\n [ /\\\\geqslant /g, '\\u2A7E' ],\n [ /\\\\ngeqslant /g, '\\u2A7E-00338' ],\n [ /\\\\lessapprox /g, '\\u2A85' ],\n [ /\\\\gtrapprox /g, '\\u2A86' ],\n [ /\\\\lneq /g, '\\u2A87' ],\n [ /\\\\gneq /g, '\\u2A88' ],\n [ /\\\\lnapprox /g, '\\u2A89' ],\n [ /\\\\gnapprox /g, '\\u2A8A' ],\n [ /\\\\lesseqqgtr /g, '\\u2A8B' ],\n [ /\\\\gtreqqless /g, '\\u2A8C' ],\n [ /\\\\eqslantless /g, '\\u2A95' ],\n [ /\\\\eqslantgtr /g, '\\u2A96' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{117\\}/g, '\\u2A9D' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{105\\}/g, '\\u2A9E' ],\n [ /\\\\NestedLessLess /g, '\\u2AA1' ],\n [ /\\\\NotNestedLessLess /g, '\\u2AA1-00338' ],\n [ /\\\\NestedGreaterGreater /g, '\\u2AA2' ],\n [ /\\\\NotNestedGreaterGreater /g, '\\u2AA2-00338' ],\n [ /\\\\preceq /g, '\\u2AAF' ],\n [ /\\\\not\\\\preceq /g, '\\u2AAF-00338' ],\n [ /\\\\succeq /g, '\\u2AB0' ],\n [ /\\\\not\\\\succeq /g, '\\u2AB0-00338' ],\n [ /\\\\precneqq /g, '\\u2AB5' ],\n [ /\\\\succneqq /g, '\\u2AB6' ],\n [ /\\\\precapprox /g, '\\u2AB7' ],\n [ /\\\\succapprox /g, '\\u2AB8' ],\n [ /\\\\precnapprox /g, '\\u2AB9' ],\n [ /\\\\succnapprox /g, '\\u2ABA' ],\n [ /\\\\subseteqq /g, '\\u2AC5' ],\n [ /\\\\nsubseteqq /g, '\\u2AC5-00338' ],\n [ /\\\\supseteqq /g, '\\u2AC6' ],\n [ /\\\\nsupseteqq/g, '\\u2AC6-00338' ],\n [ /\\\\subsetneqq /g, '\\u2ACB' ],\n [ /\\\\supsetneqq /g, '\\u2ACC' ],\n [ /\\\\ElsevierGlyph\\{E30D\\}/g, '\\u2AEB' ],\n [ /\\\\Elztdcol /g, '\\u2AF6' ],\n [ /\\\\ElsevierGlyph\\{300A\\}/g, '\\u300A' ],\n [ /\\\\ElsevierGlyph\\{300B\\}/g, '\\u300B' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u3018' ],\n [ /\\\\ElsevierGlyph\\{3019\\}/g, '\\u3019' ],\n [ /\\\\openbracketleft /g, '\\u301A' ],\n [ /\\\\openbracketright /g, '\\u301B' ]\n ]\n\n return this;\n} // end function BibtexParser\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = BibtexParser;\n}\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseMvc = __webpack_require__(5);\n\nvar _baseMvc2 = _interopRequireDefault(_baseMvc);\n\nvar _citationModel = __webpack_require__(71);\n\nvar _citationModel2 = _interopRequireDefault(_citationModel);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CitationView = Backbone.View.extend({\n tagName: \"div\",\n className: \"citations\",\n render: function render() {\n this.$el.append(\"

\" + this.formattedReference() + \"

\");\n return this;\n },\n formattedReference: function formattedReference() {\n var model = this.model;\n var entryType = model.entryType();\n var fields = model.fields();\n\n var ref = \"\";\n // Code inspired by...\n // https://github.com/vkaravir/bib-publication-list/blob/master/src/bib-publication-list.js\n var authorsAndYear = this._asSentence((fields.author ? fields.author : \"\") + (fields.year ? \" (\" + fields.year + \")\" : \"\")) + \" \";\n var title = fields.title || \"\";\n var pages = fields.pages ? \"pp. \" + fields.pages : \"\";\n var address = fields.address;\n if (entryType == \"article\") {\n var volume = (fields.volume ? fields.volume : \"\") + (fields.number ? \" (\" + fields.number + \")\" : \"\") + (pages ? \", \" + pages : \"\");\n ref = authorsAndYear + this._asSentence(title) + (fields.journal ? \"In \" + fields.journal + \", \" : \"\") + this._asSentence(volume) + this._asSentence(fields.address) + \"\";\n } else if (entryType == \"inproceedings\" || entryType == \"proceedings\") {\n ref = authorsAndYear + this._asSentence(title) + (fields.booktitle ? \"In \" + fields.booktitle + \", \" : \"\") + (pages ? pages : \"\") + (address ? \", \" + address : \"\") + \".\";\n } else if (entryType == \"mastersthesis\" || entryType == \"phdthesis\") {\n ref = authorsAndYear + this._asSentence(title) + (fields.howpublished ? fields.howpublished + \". \" : \"\") + (fields.note ? fields.note + \".\" : \"\");\n } else if (entryType == \"techreport\") {\n ref = authorsAndYear + this._asSentence(title) + this._asSentence(fields.institution) + this._asSentence(fields.number) + this._asSentence(fields.type);\n } else if (entryType == \"book\" || entryType == \"inbook\" || entryType == \"incollection\") {\n ref = authorsAndYear + \" \" + this._formatBookInfo(fields);\n } else {\n ref = authorsAndYear + \" \" + this._asSentence(title) + this._asSentence(fields.howpublished) + this._asSentence(fields.note);\n }\n var doiUrl = \"\";\n if (fields.doi) {\n doiUrl = \"http://dx.doi.org/\" + fields.doi;\n ref += \"[doi:\" + fields.doi + \"]\";\n }\n var url = fields.url || doiUrl;\n if (url) {\n ref += \"[Link]\";\n }\n return ref;\n },\n _formatBookInfo: function _formatBookInfo(fields) {\n var info = \"\";\n if (fields.chapter) {\n info += fields.chapter + \" in \";\n }\n if (fields.title) {\n info += \"\" + fields.title + \"\";\n }\n if (fields.editor) {\n info += \", Edited by \" + fields.editor + \", \";\n }\n if (fields.publisher) {\n info += \", \" + fields.publisher;\n }\n if (fields.pages) {\n info += \", pp. \" + fields.pages;\n }\n if (fields.series) {\n info += \", \" + fields.series + \"\";\n }\n if (fields.volume) {\n info += \", Vol.\" + fields.volume;\n }\n if (fields.issn) {\n info += \", ISBN: \" + fields.issn;\n }\n return info + \".\";\n },\n _asSentence: function _asSentence(str) {\n return str && str.trim() ? str + \". \" : \"\";\n }\n});\n\nvar CitationListView = Backbone.View.extend({\n el: \"#citations\",\n /**\n * Set up view.\n */\n initialize: function initialize() {\n this.listenTo(this.collection, \"add\", this.renderCitation);\n },\n\n events: {\n \"click .citations-to-bibtex\": \"showBibtex\",\n \"click .citations-to-formatted\": \"showFormatted\"\n },\n\n renderCitation: function renderCitation(citation) {\n var citationView = new CitationView({ model: citation });\n this.$(\".citations-formatted\").append(citationView.render().el);\n var rawTextarea = this.$(\".citations-bibtex-text\");\n rawTextarea.val(rawTextarea.val() + \"\\n\\r\" + citation.attributes.content);\n },\n\n render: function render() {\n this.$el.html(this.citationsElement());\n this.collection.each(function (item) {\n this.renderCitation(item);\n }, this);\n this.showFormatted();\n },\n\n showBibtex: function showBibtex() {\n this.$(\".citations-to-formatted\").show();\n this.$(\".citations-to-bibtex\").hide();\n this.$(\".citations-bibtex\").show();\n this.$(\".citations-formatted\").hide();\n this.$(\".citations-bibtex-text\").select();\n },\n\n showFormatted: function showFormatted() {\n this.$(\".citations-to-formatted\").hide();\n this.$(\".citations-to-bibtex\").show();\n this.$(\".citations-bibtex\").hide();\n this.$(\".citations-formatted\").show();\n },\n\n partialWarningElement: function partialWarningElement() {\n if (this.collection.partial) {\n return ['
', \"Warning: This is a experimental feature. Most Galaxy tools will not annotate\", \" citations explicitly at this time. When writing up your analysis, please manually\", \" review your histories and find all references\", \" that should be cited in order to completely describe your work. Also, please remember to\", ' cite Galaxy.', \"
\"].join(\"\");\n } else {\n return \"\";\n }\n },\n\n citationsElement: function citationsElement() {\n return ['
', '
', (0, _localization2.default)(\"Citations\"), ' ', ' ', \"
\", '
', this.partialWarningElement(), '', \"
\", '
', '', \"
\", \"
\"].join(\"\");\n }\n});\n\n//==============================================================================\nexports.default = {\n CitationView: CitationView,\n CitationListView: CitationListView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _bigwig = __webpack_require__(132);\n\nvar bigwig = _interopRequireWildcard(_bigwig);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Data manager for BBI datasets/files, including BigWig and BigBed.\n */\nvar BBIDataManager = _visualization2.default.GenomeDataManager.extend({\n /**\n * Load data from server and manage data entries. Adds a Deferred to manager\n * for region; when data becomes available, replaces Deferred with data.\n * Returns the Deferred that resolves when data is available.\n */\n load_data: function load_data(region, mode, resolution, extra_params) {\n var deferred = $.Deferred();\n this.set_data(region, deferred);\n\n var url = Galaxy.root + \"datasets/\" + this.get(\"dataset\").id + \"/display\";\n\n var self = this;\n var promise = new $.Deferred();\n $.when(bigwig.makeBwg(url)).then(function (bb, err) {\n $.when(bb.readWigData(region.get(\"chrom\"), region.get(\"start\"), region.get(\"end\"))).then(function (data) {\n // Transform data into \"bigwig\" format for LinePainter. \"bigwig\" format is an array of 2-element arrays\n // where each element is [position, score]; unlike real bigwig format, no gaps are allowed.\n var result = [];\n\n var prev = { max: Number.MIN_VALUE };\n data.forEach(function (d) {\n // If there is a gap between prev and d, fill it with an interval with score 0.\n // This is necessary for LinePainter to draw correctly.\n if (prev.max !== d.min - 1) {\n // +1 to start after previous region.\n result.push([prev.max + 1, 0]);\n // -2 = -1 for converting from 1-based to 0-based coordinates,\n // -1 for ending before current region.\n result.push([d.min - 2, 0]);\n }\n\n // Add data point for entry start. -1 to convert from wiggle\n // 1-based coordinates to 0-based browser coordinates.\n result.push([d.min - 1, d.score]);\n\n // Add data point for entry end:\n result.push([d.max, d.score]);\n\n prev = d;\n });\n\n var entry = {\n data: result,\n region: region,\n dataset_type: \"bigwig\"\n };\n\n self.set_data(region, entry);\n deferred.resolve(entry);\n });\n });\n\n return deferred;\n }\n});\n\nexports.default = {\n BBIDataManager: BBIDataManager\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//\n// Author: Jeremy Goecks\n//\n// Modified from:\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// bigwig.js: indexed binary WIG (and BED) files\n//\n\n// Requirements:\n// * jquery and ajax-native plugin for reading binary data, jquery for promises\n// * spans for working working with genomic intervals\n// * jszlib for decompression.\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(133), __webpack_require__(134), __webpack_require__(135)], __WEBPACK_AMD_DEFINE_RESULT__ = function(spans, jszlib) {\n \"use strict\";\n\n // -- Copied from das.js --\n\n function DASFeature() {\n }\n\n function DASGroup(id) {\n if (id)\n this.id = id;\n }\n\n // -- End copy --\n\n // -- Copied from bin.js --\n\n function readInt(ba, offset) {\n return (ba[offset + 3] << 24) | (ba[offset + 2] << 16) | (ba[offset + 1] << 8) | (ba[offset]);\n }\n\n // -- End copy --\n\n // Some globals.\n var Range = spans.Range;\n var union = spans.union;\n var intersection = spans.intersection;\n\n var jszlib_inflate_buffer = jszlib.inflateBuffer;\n var arrayCopy = jszlib.arrayCopy;\n\n var BIG_WIG_MAGIC = 0x888FFC26;\n var BIG_WIG_MAGIC_BE = 0x26FC8F88;\n var BIG_BED_MAGIC = 0x8789F2EB;\n var BIG_BED_MAGIC_BE = 0xEBF28987;\n\n\n var BIG_WIG_TYPE_GRAPH = 1;\n var BIG_WIG_TYPE_VSTEP = 2;\n var BIG_WIG_TYPE_FSTEP = 3;\n\n var M1 = 256;\n var M2 = 256*256;\n var M3 = 256*256*256;\n var M4 = 256*256*256*256;\n\n var BED_COLOR_REGEXP = new RegExp(\"^[0-9]+,[0-9]+,[0-9]+\");\n\n /**\n * Read binary data from a URL using HTTP Range header. Requires jQuery and ajax-native plugin.\n */\n function read(url, start, size) {\n // Taken from bin.js:\n // This may be necessary for Safari:\n // if ((isSafari || this.opts.salt) && url.indexOf('?') < 0) {\n // url = url + '?salt=' + b64_sha1('' + Date.now() + ',' + (++seed));\n // }\n\n var chunkSizeLimit = Math.pow(10, 6); // 1 MB\n if(size > chunkSizeLimit) {\n // TODO: raise error.\n }\n\n // Read data from remote file.\n return $.ajax({\n type: 'GET',\n dataType: 'native',\n url: url,\n // Potential timeout on first request to catch mixed-content errors on Chromium.\n timeout: 5000,\n beforeSend: function(xhrObj) {\n // (size - 1) because range is inclusive.\n xhrObj.setRequestHeader(\"Range\", \"bytes=\" + start + \"-\" + (start + (size - 1)));\n },\n xhrFields: {\n responseType: 'arraybuffer'\n }\n });\n }\n\n function bwg_readOffset(ba, o) {\n var offset = ba[o] + ba[o+1]*M1 + ba[o+2]*M2 + ba[o+3]*M3 + ba[o+4]*M4;\n return offset;\n }\n\n function BigWig() {\n }\n\n /**\n * Read the chromosome B+ tree header.\n */\n BigWig.prototype.readChromTree = function() {\n var thisB = this;\n this.chromsToIDs = {};\n this.idsToChroms = {};\n this.maxID = 0;\n\n var udo = this.unzoomedDataOffset;\n var eb = (udo - this.chromTreeOffset) & 3;\n udo = udo + 4 - eb;\n\n // Read and parse the chrom tree, return the promise so that subsequent actions can be taken.\n return $.when(read(this.url, this.chromTreeOffset, udo - this.chromTreeOffset)).then(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n var bptReadNode = function(offset) {\n var nodeType = ba[offset];\n var cnt = sa[(offset/2) + 1];\n offset += 4;\n for (var n = 0; n < cnt; ++n) {\n if (nodeType === 0) {\n offset += keySize;\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n childOffset -= thisB.chromTreeOffset;\n bptReadNode(childOffset);\n } else {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode !== 0) {\n key += String.fromCharCode(charCode);\n }\n }\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var chromSize = (ba[offset + 7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n offset += 8;\n\n thisB.chromsToIDs[key] = chromId;\n if (key.indexOf('chr') === 0) {\n thisB.chromsToIDs[key.substr(3)] = chromId;\n }\n thisB.idsToChroms[chromId] = key;\n thisB.maxID = Math.max(thisB.maxID, chromId);\n }\n }\n };\n bptReadNode(rootNodeOffset);\n });\n }\n\n function BigWigView(bwg, cirTreeOffset, cirTreeLength, isSummary) {\n this.bwg = bwg;\n this.cirTreeOffset = cirTreeOffset;\n this.cirTreeLength = cirTreeLength;\n this.isSummary = isSummary;\n }\n\n\n\n BigWigView.prototype.readWigData = function(chrName, min, max) {\n var chr = this.bwg.chromsToIDs[chrName],\n rval;\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n rval = [];\n } else {\n rval = this.readWigDataById(chr, min, max);\n }\n\n return rval;\n };\n\n BigWigView.prototype.readWigDataById = function(chr, min, max) {\n var thisB = this,\n promise = $.Deferred();\n\n // Read the R-tree index header and then read data again.\n if (!this.cirHeader) {\n $.when(read(thisB.bwg.url, this.cirTreeOffset, 48)).then(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n $.when(thisB.readWigDataById(chr, min, max)).then(function(result) {\n promise.resolve(result);\n });\n });\n return promise;\n }\n\n var blocksToFetch = [];\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var filter = function(chromId, fmin, fmax, toks) {\n return ((chr < 0 || chromId == chr) && fmin <= max && fmax >= min);\n };\n\n var cirFobRecur = function(offset, level) {\n if (thisB.bwg.instrument)\n console.log('level=' + level + '; offset=' + offset + '; time=' + (Date.now()|0));\n\n outstanding += offset.length;\n\n if (offset.length == 1 && offset[0] - thisB.cirTreeOffset == 48 && thisB.cachedCirRoot) {\n cirFobRecur2(thisB.cachedCirRoot, 0, level);\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n return;\n }\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n };\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n $.when(read(thisB.bwg.url, fr.min(), fr.max() - fr.min())).then(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n\n if (offset[i] - thisB.cirTreeOffset == 48 && offset[i] - fr.min() === 0)\n thisB.cachedCirRoot = resultBuffer;\n\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n }\n }\n });\n };\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf !== 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if (((chr < 0 || startChrom < chr) || (startChrom == chr && startBase <= max)) &&\n ((chr < 0 || endChrom > chr) || (endChrom == chr && endBase >= min)))\n {\n blocksToFetch.push({offset: blockOffset, size: blockSize});\n }\n offset += 32;\n }\n } else {\n var recurOffsets = [];\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n if ((chr < 0 || startChrom < chr || (startChrom == chr && startBase <= max)) &&\n (chr < 0 || endChrom > chr || (endChrom == chr && endBase >= min)))\n {\n recurOffsets.push(blockOffset);\n }\n offset += 24;\n }\n if (recurOffsets.length > 0) {\n cirFobRecur(recurOffsets, level + 1);\n }\n }\n };\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n return promise;\n };\n\n /**\n * Fetch data for a set of blocks. Returns a promise that resolves to fetched data.\n */\n BigWigView.prototype.fetchFeatures = function(filter, blocksToFetch) {\n var thisB = this,\n promise = $.Deferred();\n\n blocksToFetch.sort(function(b0, b1) {\n return (b0.offset|0) - (b1.offset|0);\n });\n\n if (blocksToFetch.length === 0) {\n return [];\n } else {\n var features = [];\n var createFeature = function(chr, fmin, fmax, opts) {\n if (!opts) {\n opts = {};\n }\n\n var f = new DASFeature();\n f._chromId = chr;\n f.segment = thisB.bwg.idsToChroms[chr];\n f.min = fmin;\n f.max = fmax;\n f.type = thisB.bwg.type;\n\n for (var k in opts) {\n f[k] = opts[k];\n }\n\n features.push(f);\n };\n\n // Recursive function to read blocks of data.\n var tramp = function() {\n if (blocksToFetch.length === 0) {\n var afterBWG = Date.now();\n // dlog('BWG fetch took ' + (afterBWG - beforeBWG) + 'ms');\n return promise.resolve(features);\n }\n else {\n var block = blocksToFetch[0];\n if (block.data) {\n thisB.parseFeatures(block.data, createFeature, filter);\n blocksToFetch.splice(0, 1);\n tramp();\n }\n else {\n var fetchStart = block.offset;\n var fetchSize = block.size;\n var bi = 1;\n while (bi < blocksToFetch.length && blocksToFetch[bi].offset == (fetchStart + fetchSize)) {\n fetchSize += blocksToFetch[bi].size;\n ++bi;\n }\n\n $.when(read(thisB.bwg.url, fetchStart, fetchSize)).then(function(result) {\n var offset = 0;\n var bi = 0;\n while (offset < fetchSize) {\n var fb = blocksToFetch[bi];\n\n var data;\n if (thisB.bwg.uncompressBufSize > 0) {\n data = jszlib_inflate_buffer(result, offset + 2, fb.size - 2);\n } else {\n var tmp = new Uint8Array(fb.size); // FIXME is this really the best we can do?\n arrayCopy(new Uint8Array(result, offset, fb.size), 0, tmp, 0, fb.size);\n data = tmp.buffer;\n }\n fb.data = data;\n\n offset += fb.size;\n ++bi;\n }\n tramp();\n });\n }\n }\n };\n tramp();\n }\n\n return promise;\n };\n\n BigWigView.prototype.parseFeatures = function(data, createFeature, filter) {\n var ba = new Uint8Array(data);\n\n if (this.isSummary) {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var itemCount = data.byteLength/32;\n for (var i = 0; i < itemCount; ++i) {\n var chromId = la[(i*8)];\n var start = la[(i*8)+1];\n var end = la[(i*8)+2];\n var validCnt = la[(i*8)+3];\n var minVal = fa[(i*8)+4];\n var maxVal = fa[(i*8)+5];\n var sumData = fa[(i*8)+6];\n var sumSqData = fa[(i*8)+7];\n\n if (filter(chromId, start + 1, end)) {\n var summaryOpts = {type: 'bigwig', score: sumData/validCnt, maxScore: maxVal};\n if (this.bwg.type == 'bigbed') {\n summaryOpts.type = 'density';\n }\n createFeature(chromId, start + 1, end, summaryOpts);\n }\n }\n }\n else if (this.bwg.type == 'bigwig') {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var chromId = la[0];\n var blockStart = la[1];\n var blockEnd = la[2];\n var itemStep = la[3];\n var itemSpan = la[4];\n var blockType = ba[20];\n var itemCount = sa[11];\n\n if (blockType == BIG_WIG_TYPE_FSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var score = fa[i + 6];\n var fmin = blockStart + (i*itemStep) + 1, fmax = blockStart + (i*itemStep) + itemSpan;\n if (filter(chromId, fmin, fmax))\n createFeature(chromId, fmin, fmax, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_VSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*2) + 6] + 1;\n var end = start + itemSpan - 1;\n var score = fa[(i*2) + 7];\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_GRAPH) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*3) + 6] + 1;\n var end = la[(i*3) + 7];\n var score = fa[(i*3) + 8];\n if (start > end) {\n start = end;\n }\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else {\n console.log('Currently not handling bwgType=' + blockType);\n }\n } else if (this.bwg.type == 'bigbed') {\n var offset = 0;\n var dfc = this.bwg.definedFieldCount;\n var schema = this.bwg.schema;\n\n while (offset < ba.length) {\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var start = (ba[offset+7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n var end = (ba[offset+11]<<24) | (ba[offset+10]<<16) | (ba[offset+9]<<8) | (ba[offset+8]);\n offset += 12;\n var rest = '';\n while (true) {\n var ch = ba[offset++];\n if (ch != 0) {\n rest += String.fromCharCode(ch);\n } else {\n break;\n }\n }\n\n var featureOpts = {};\n\n var bedColumns;\n if (rest.length > 0) {\n bedColumns = rest.split('\\t');\n } else {\n bedColumns = [];\n }\n if (bedColumns.length > 0 && dfc > 3) {\n featureOpts.label = bedColumns[0];\n }\n if (bedColumns.length > 1 && dfc > 4) {\n var score = parseInt(bedColumns[1]);\n if (!isNaN(score))\n featureOpts.score = score;\n }\n if (bedColumns.length > 2 && dfc > 5) {\n featureOpts.orientation = bedColumns[2];\n }\n if (bedColumns.length > 5 && dfc > 8) {\n var color = bedColumns[5];\n if (BED_COLOR_REGEXP.test(color)) {\n featureOpts.itemRgb = 'rgb(' + color + ')';\n }\n }\n\n if (bedColumns.length > dfc-3 && schema) {\n for (var col = dfc - 3; col < bedColumns.length; ++col) {\n featureOpts[schema.fields[col+3].name] = bedColumns[col];\n }\n }\n\n if (filter(chromId, start + 1, end, bedColumns)) {\n if (dfc < 12) {\n createFeature(chromId, start + 1, end, featureOpts);\n } else {\n // TODO: add block starts, sizes, thick start, thick end to feature.\n var thickStart = bedColumns[3]|0;\n var thickEnd = bedColumns[4]|0;\n var blockCount = bedColumns[6]|0;\n var blockSizes = bedColumns[7].split(',');\n var blockStarts = bedColumns[8].split(',');\n\n if (featureOpts.exonFrames) {\n var exonFrames = featureOpts.exonFrames.split(',');\n featureOpts.exonFrames = undefined;\n }\n\n featureOpts.type = 'transcript'\n var grp = new DASGroup();\n for (var k in featureOpts) {\n grp[k] = featureOpts[k];\n }\n grp.id = bedColumns[0];\n grp.segment = this.bwg.idsToChroms[chromId];\n grp.min = start + 1;\n grp.max = end;\n grp.notes = [];\n featureOpts.groups = [grp];\n\n // Moving towards using bigGenePred model, but will\n // still support old Dalliance-style BED12+gene-name for the\n // foreseeable future.\n if (bedColumns.length > 9) {\n var geneId = featureOpts.geneName || bedColumns[9];\n var geneName = geneId;\n if (bedColumns.length > 10) {\n geneName = bedColumns[10];\n }\n if (featureOpts.geneName2)\n geneName = featureOpts.geneName2;\n\n var gg = $.extend({}, grp);\n gg.id = geneId;\n gg.label = geneName;\n gg.type = 'gene';\n featureOpts.groups.push(gg);\n }\n\n var spanList = [];\n for (var b = 0; b < blockCount; ++b) {\n var bmin = (blockStarts[b]|0) + start;\n var bmax = bmin + (blockSizes[b]|0);\n var span = new Range(bmin, bmax);\n spanList.push(span);\n }\n var spans = union(spanList);\n\n var tsList = spans.ranges();\n for (var s = 0; s < tsList.length; ++s) {\n var ts = tsList[s];\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n\n if (thickEnd > thickStart) {\n var codingRegion = (featureOpts.orientation == '+') ?\n new Range(thickStart, thickEnd + 3) :\n new Range(thickStart - 3, thickEnd);\n // +/- 3 to account for stop codon\n\n var tl = intersection(spans, codingRegion);\n if (tl) {\n featureOpts.type = 'translation';\n var tlList = tl.ranges();\n var readingFrame = 0;\n\n var tlOffset = 0;\n while (tlList[0].min() > tsList[tlOffset].max())\n tlOffset++;\n\n for (var s = 0; s < tlList.length; ++s) {\n // Record reading frame for every exon\n var index = s;\n if (featureOpts.orientation == '-')\n index = tlList.length - s - 1;\n var ts = tlList[index];\n featureOpts.readframe = readingFrame;\n if (exonFrames) {\n var brf = parseInt(exonFrames[index + tlOffset]);\n if (typeof(brf) === 'number' && brf >= 0 && brf <= 2) {\n featureOpts.readframe = brf;\n featureOpts.readframeExplicit = true;\n }\n }\n var length = ts.max() - ts.min();\n readingFrame = (readingFrame + length) % 3;\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n }\n }\n }\n }\n }\n } else {\n throw Error(\"Don't know what to do with \" + this.bwg.type);\n }\n }\n\n //\n // nasty cut/paste, should roll back in!\n //\n\n BigWigView.prototype.getFirstAdjacent = function(chrName, pos, dir, callback) {\n var chr = this.bwg.chromsToIDs[chrName];\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n return callback([]);\n } else {\n this.getFirstAdjacentById(chr, pos, dir, callback);\n }\n }\n\n BigWigView.prototype.getFirstAdjacentById = function(chr, pos, dir, callback) {\n var thisB = this;\n if (!this.cirHeader) {\n this.bwg.data.slice(this.cirTreeOffset, 48).fetch(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n thisB.getFirstAdjacentById(chr, pos, dir, callback);\n });\n return;\n }\n\n var blockToFetch = null;\n var bestBlockChr = -1;\n var bestBlockOffset = -1;\n\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var cirFobRecur = function(offset, level) {\n outstanding += offset.length;\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n }\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n thisB.bwg.data.slice(fr.min(), fr.max() - fr.min()).fetch(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n --outstanding;\n if (outstanding == 0) {\n if (!blockToFetch) {\n if (dir > 0 && (chr != 0 || pos > 0)) {\n return thisB.getFirstAdjacentById(0, 0, dir, callback);\n } else if (dir < 0 && (chr != thisB.bwg.maxID || pos < 1000000000)) {\n return thisB.getFirstAdjacentById(thisB.bwg.maxID, 1000000000, dir, callback);\n }\n return callback([]);\n }\n\n thisB.fetchFeatures(function(chrx, fmin, fmax, toks) {\n return (dir < 0 && (chrx < chr || fmax < pos)) || (dir > 0 && (chrx > chr || fmin > pos));\n }, [blockToFetch], function(features) {\n var bestFeature = null;\n var bestChr = -1;\n var bestPos = -1;\n for (var fi = 0; fi < features.length; ++fi) {\n var f = features[fi];\n var chrx = f._chromId, fmin = f.min, fmax = f.max;\n if (bestFeature == null || ((dir < 0) && (chrx > bestChr || fmax > bestPos)) || ((dir > 0) && (chrx < bestChr || fmin < bestPos))) {\n bestFeature = f;\n bestPos = (dir < 0) ? fmax : fmin;\n bestChr = chrx;\n }\n }\n\n if (bestFeature != null)\n return callback([bestFeature]);\n else\n return callback([]);\n });\n }\n }\n }\n });\n }\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf != 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)))))\n {\n // console.log('Got an interesting block: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n if (/_random/.exec(thisB.bwg.idsToChroms[startChrom])) {\n // dlog('skipping random: ' + thisB.bwg.idsToChroms[startChrom]);\n } else if (blockToFetch == null || ((dir < 0) && (endChrom > bestBlockChr || (endChrom == bestBlockChr && endBase > bestBlockOffset)) ||\n (dir > 0) && (startChrom < bestBlockChr || (startChrom == bestBlockChr && startBase < bestBlockOffset))))\n {\n // dlog('best is: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n blockToFetch = {offset: blockOffset, size: blockSize};\n bestBlockOffset = (dir < 0) ? endBase : startBase;\n bestBlockChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 32;\n }\n } else {\n var bestRecur = -1;\n var bestPos = -1;\n var bestChr = -1;\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = (la[lo + 4]<<32) | (la[lo + 5]);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)) &&\n (endChrom >= chr))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)) &&\n (startChrom <= chr))))\n {\n if (bestRecur < 0 || endBase > bestPos) {\n bestRecur = blockOffset;\n bestPos = (dir < 0) ? endBase : startBase;\n bestChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 24;\n }\n if (bestRecur >= 0) {\n cirFobRecur([bestRecur], level + 1);\n }\n }\n };\n\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n }\n\n /**\n * Automatically choose a zoom level and return data from that level.\n */\n BigWig.prototype.readWigData = function(chrName, min, max) {\n // Maximum number of data points to return when reading a bigwig. This is used\n // to choose the appropriate level. One data point ~= 25-65 bytes.\n // FIXME: For targeted sequencing, data points returned is going to be much lower,\n // so this will need to be tuned appropriately.\n var MAX_DATA_POINTS = 25000;\n\n var range = max - min,\n view;\n // If no zooming needed or available (common in bigbed), use unzoomed view.\n if (range <= MAX_DATA_POINTS || this.zoomLevels.length === 0) {\n view = this.getUnzoomedView();\n }\n else {\n // Find reasonable zoom level. Reduction is the # of bases represented\n // by each data point at that level.\n for (var i = 0; i < this.zoomLevels.length; i++) {\n if (range/this.zoomLevels[i].reduction < MAX_DATA_POINTS) {\n view = this.getZoomedView(i);\n break;\n }\n }\n }\n\n return view.readWigData(chrName, min, max);\n }\n\n BigWig.prototype.getUnzoomedView = function() {\n if (!this.unzoomedView) {\n var cirLen = 4000;\n var nzl = this.zoomLevels[0];\n if (nzl) {\n cirLen = this.zoomLevels[0].dataOffset - this.unzoomedIndexOffset;\n }\n this.unzoomedView = new BigWigView(this, this.unzoomedIndexOffset, cirLen, false);\n }\n return this.unzoomedView;\n }\n\n BigWig.prototype.getZoomedView = function(z) {\n var zh = this.zoomLevels[z];\n if (!zh.view) {\n zh.view = new BigWigView(this, zh.indexOffset, /* this.zoomLevels[z + 1].dataOffset - zh.indexOffset */ 4000, true);\n }\n return zh.view;\n }\n\n /**\n * Create a BigWig object using a URL to a bigwig/bigbed file. Returns a promise\n * that resolves to the object when it's available.\n */\n function makeBwg(url) {\n var promise = $.Deferred(),\n bwg = new BigWig();\n bwg.url = url;\n\n // Read and parse bigwig header, including chrom tree.\n $.when(read(bwg.url, 0, 512)).then(function(result) {\n if (!result) {\n return promise.resolve(null, \"Couldn't fetch file\");\n }\n\n var header = result;\n var ba = new Uint8Array(header);\n var sa = new Int16Array(header);\n var la = new Int32Array(header);\n var magic = ba[0] + (M1 * ba[1]) + (M2 * ba[2]) + (M3 * ba[3]);\n if (magic == BIG_WIG_MAGIC) {\n bwg.type = 'bigwig';\n } else if (magic == BIG_BED_MAGIC) {\n bwg.type = 'bigbed';\n } else if (magic == BIG_WIG_MAGIC_BE || magic == BIG_BED_MAGIC_BE) {\n return promise.resolve(null, \"Currently don't support big-endian BBI files\");\n\n } else {\n return promise.resolve(null, \"Not a supported format, magic=0x\" + magic.toString(16));\n\n }\n\n bwg.version = sa[2]; // 4\n bwg.numZoomLevels = sa[3]; // 6\n bwg.chromTreeOffset = bwg_readOffset(ba, 8);\n bwg.unzoomedDataOffset = bwg_readOffset(ba, 16);\n bwg.unzoomedIndexOffset = bwg_readOffset(ba, 24);\n bwg.fieldCount = sa[16]; // 32\n bwg.definedFieldCount = sa[17]; // 34\n bwg.asOffset = bwg_readOffset(ba, 36);\n bwg.totalSummaryOffset = bwg_readOffset(ba, 44);\n bwg.uncompressBufSize = la[13]; // 52\n bwg.extHeaderOffset = bwg_readOffset(ba, 56);\n\n bwg.zoomLevels = [];\n for (var zl = 0; zl < bwg.numZoomLevels; ++zl) {\n var zlReduction = la[zl*6 + 16]\n var zlData = bwg_readOffset(ba, zl*24 + 72);\n var zlIndex = bwg_readOffset(ba, zl*24 + 80);\n bwg.zoomLevels.push({reduction: zlReduction, dataOffset: zlData, indexOffset: zlIndex});\n }\n\n $.when(bwg.readChromTree()).then(function() {\n bwg.getAutoSQL(function(as) {\n bwg.schema = as;\n return promise.resolve(bwg);\n });\n });\n });\n\n return promise;\n }\n\n\n BigWig.prototype._tsFetch = function(zoom, chr, min, max, callback) {\n var bwg = this;\n if (zoom >= this.zoomLevels.length - 1) {\n if (!this.topLevelReductionCache) {\n this.getZoomedView(this.zoomLevels.length - 1).readWigDataById(-1, 0, 300000000, function(feats) {\n bwg.topLevelReductionCache = feats;\n return bwg._tsFetch(zoom, chr, min, max, callback);\n });\n } else {\n var f = [];\n var c = this.topLevelReductionCache;\n for (var fi = 0; fi < c.length; ++fi) {\n if (c[fi]._chromId == chr) {\n f.push(c[fi]);\n }\n }\n return callback(f);\n }\n } else {\n var view;\n if (zoom < 0) {\n view = this.getUnzoomedView();\n } else {\n view = this.getZoomedView(zoom);\n }\n return view.readWigDataById(chr, min, max, callback);\n }\n }\n\n BigWig.prototype.thresholdSearch = function(chrName, referencePoint, dir, threshold, callback) {\n dir = (dir<0) ? -1 : 1;\n var bwg = this;\n var initialChr = this.chromsToIDs[chrName];\n var candidates = [{chrOrd: 0, chr: initialChr, zoom: bwg.zoomLevels.length - 4, min: 0, max: 300000000, fromRef: true}]\n for (var i = 1; i <= this.maxID + 1; ++i) {\n var chrId = (initialChr + (dir*i)) % (this.maxID + 1);\n if (chrId < 0)\n chrId += (this.maxID + 1);\n candidates.push({chrOrd: i, chr: chrId, zoom: bwg.zoomLevels.length - 1, min: 0, max: 300000000})\n }\n\n function fbThresholdSearchRecur() {\n if (candidates.length == 0) {\n return callback(null);\n }\n candidates.sort(function(c1, c2) {\n var d = c1.zoom - c2.zoom;\n if (d != 0)\n return d;\n\n d = c1.chrOrd - c2.chrOrd;\n if (d != 0)\n return d;\n else\n return c1.min - c2.min * dir;\n });\n\n var candidate = candidates.splice(0, 1)[0];\n bwg._tsFetch(candidate.zoom, candidate.chr, candidate.min, candidate.max, function(feats) {\n var rp = dir > 0 ? 0 : 300000000;\n if (candidate.fromRef)\n rp = referencePoint;\n\n for (var fi = 0; fi < feats.length; ++fi) {\n var f = feats[fi];\n var score;\n if (f.maxScore != undefined)\n score = f.maxScore;\n else\n score = f.score;\n\n if (dir > 0) {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.min > rp)\n return callback(f);\n } else if (f.max > rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n } else {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.max < rp)\n return callback(f);\n } else if (f.min < rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n }\n }\n fbThresholdSearchRecur();\n });\n }\n\n fbThresholdSearchRecur();\n }\n\n BigWig.prototype.getAutoSQL = function(callback) {\n var thisB = this;\n if (!this.asOffset)\n return callback(null);\n\n $.when(read(this.url, this.asOffset, 2048)).then(function(result) {\n var ba = new Uint8Array(result);\n var s = '';\n for (var i = 0; i < ba.length; ++i) {\n if (ba[i] == 0)\n break;\n s += String.fromCharCode(ba[i]);\n }\n\n /*\n * Quick'n'dirty attempt to parse autoSql format.\n * See: http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/059/5949/5949l2.html\n */\n\n var header_re = /(\\w+)\\s+(\\w+)\\s+(\"([^\"]+)\")?\\s+\\(\\s*/;\n var field_re = /([\\w\\[\\]]+)\\s+(\\w+)\\s*;\\s*(\"([^\"]+)\")?\\s*/g;\n\n var headerMatch = header_re.exec(s);\n if (headerMatch) {\n var as = {\n declType: headerMatch[1],\n name: headerMatch[2],\n comment: headerMatch[4],\n\n fields: []\n };\n\n s = s.substring(headerMatch[0]);\n for (var m = field_re.exec(s); m != null; m = field_re.exec(s)) {\n as.fields.push({type: m[1],\n name: m[2],\n comment: m[4]});\n }\n\n return callback(as);\n }\n });\n };\n\n BigWig.prototype.getExtraIndices = function(callback) {\n var thisB = this;\n if (this.version < 4 || this.extHeaderOffset == 0 || this.type != 'bigbed') {\n return callback(null);\n } else {\n this.data.slice(this.extHeaderOffset, 64).fetch(function(result) {\n if (!result) {\n return callback(null, \"Couldn't fetch extension header\");\n }\n\n var ba = new Uint8Array(result);\n var sa = new Int16Array(result);\n var la = new Int32Array(result);\n\n var extHeaderSize = sa[0];\n var extraIndexCount = sa[1];\n var extraIndexListOffset = bwg_readOffset(ba, 4);\n\n if (extraIndexCount == 0) {\n return callback(null);\n }\n\n // FIXME 20byte records only make sense for single-field indices.\n // Right now, these seem to be the only things around, but the format\n // is actually more general.\n thisB.data.slice(extraIndexListOffset, extraIndexCount * 20).fetch(function(eil) {\n if (!eil) {\n return callback(null, \"Couldn't fetch index info\");\n }\n\n var ba = new Uint8Array(eil);\n var sa = new Int16Array(eil);\n var la = new Int32Array(eil);\n\n var indices = [];\n for (var ii = 0; ii < extraIndexCount; ++ii) {\n var eiType = sa[ii*10];\n var eiFieldCount = sa[ii*10 + 1];\n var eiOffset = bwg_readOffset(ba, ii*20 + 4);\n var eiField = sa[ii*10 + 8]\n var index = new BBIExtraIndex(thisB, eiType, eiFieldCount, eiOffset, eiField);\n indices.push(index);\n }\n callback(indices);\n });\n });\n }\n }\n\n function BBIExtraIndex(bbi, type, fieldCount, offset, field) {\n this.bbi = bbi;\n this.type = type;\n this.fieldCount = fieldCount;\n this.offset = offset;\n this.field = field;\n }\n\n BBIExtraIndex.prototype.lookup = function(name, callback) {\n var thisB = this;\n\n this.bbi.data.slice(this.offset, 32).fetch(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n function bptReadNode(nodeOffset) {\n thisB.bbi.data.slice(nodeOffset, 4 + (blockSize * (keySize + valSize))).fetch(function(node) {\n var ba = new Uint8Array(node);\n var sa = new Uint16Array(node);\n var la = new Uint32Array(node);\n\n var nodeType = ba[0];\n var cnt = sa[1];\n\n var offset = 4;\n if (nodeType == 0) {\n var lastChildOffset = null;\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n\n if (name.localeCompare(key) < 0 && lastChildOffset) {\n bptReadNode(lastChildOffset);\n return;\n }\n lastChildOffset = childOffset;\n }\n bptReadNode(lastChildOffset);\n } else {\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n // Specific for EI case.\n if (key == name) {\n var start = bwg_readOffset(ba, offset);\n var length = readInt(ba, offset + 8);\n\n return thisB.bbi.getUnzoomedView().fetchFeatures(\n function(chr, min, max, toks) {\n if (toks && toks.length > thisB.field - 3)\n return toks[thisB.field - 3] == name;\n },\n [{offset: start, size: length}],\n callback);\n }\n offset += valSize;\n }\n return callback([]);\n }\n });\n }\n\n bptReadNode(thisB.offset + rootNodeOffset);\n });\n }\n\n return {\n makeBwg: makeBwg\n };\n}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// spans.js: JavaScript Intset/Location port.\n//\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\n\"use strict\";\n\n\nfunction Range(min, max)\n{\n if (typeof(min) != 'number' || typeof(max) != 'number')\n throw 'Bad range ' + min + ',' + max;\n this._min = min;\n this._max = max;\n}\n\nRange.prototype.min = function() {\n return this._min;\n}\n\nRange.prototype.max = function() {\n return this._max;\n}\n\nRange.prototype.contains = function(pos) {\n return pos >= this._min && pos <= this._max;\n}\n\nRange.prototype.isContiguous = function() {\n return true;\n}\n\nRange.prototype.ranges = function() {\n return [this];\n}\n\nRange.prototype._pushRanges = function(ranges) {\n ranges.push(this);\n}\n\nRange.prototype.toString = function() {\n return '[' + this._min + '-' + this._max + ']';\n}\n\nfunction _Compound(ranges) {\n // given: a set of unsorted possibly overlapping ranges\n // sort the input ranges\n var sorted = ranges.sort(_rangeOrder);\n // merge overlaps between adjacent ranges\n var merged = [];\n var current = sorted.shift();\n sorted.forEach(function(range) {\n if (range._min <= current._max) {\n if (range._max > current._max) {\n current._max = range._max;\n }\n }\n else {\n merged.push(current);\n current = range;\n }\n });\n merged.push(current);\n this._ranges = merged;\n}\n\n_Compound.prototype.min = function() {\n return this._ranges[0].min();\n}\n\n_Compound.prototype.max = function() {\n return this._ranges[this._ranges.length - 1].max();\n}\n\n// returns the index of the first range that is not less than pos\n_Compound.prototype.lower_bound = function(pos) {\n // first check if pos is out of range\n var r = this.ranges();\n if (pos > this.max()) return r.length;\n if (pos < this.min()) return 0;\n // do a binary search\n var a=0, b=r.length - 1;\n while (a <= b) {\n var m = Math.floor((a+b)/2);\n if (pos > r[m]._max) {\n a = m+1;\n }\n else if (pos < r[m]._min) {\n b = m-1;\n }\n else {\n return m;\n }\n }\n return a;\n}\n\n_Compound.prototype.contains = function(pos) {\n var lb = this.lower_bound(pos);\n if (lb < this._ranges.length && this._ranges[lb].contains(pos)) {\n return true;\n }\n return false;\n}\n\n_Compound.prototype.insertRange = function(range) {\n var lb = this.lower_bound(range._min);\n if (lb === this._ranges.length) { // range follows this\n this._ranges.push(range);\n return;\n }\n\n var r = this.ranges();\n if (range._max < r[lb]._min) { // range preceeds lb\n this._ranges.splice(lb,0,range);\n return;\n }\n\n // range overlaps lb (at least)\n if (r[lb]._min < range._min) range._min = r[lb]._min;\n var ub = lb+1;\n while (ub < r.length && r[ub]._min <= range._max) {\n ub++;\n }\n ub--;\n // ub is the upper bound of the new range\n if (r[ub]._max > range._max) range._max = r[ub]._max;\n\n // splice range into this._ranges\n this._ranges.splice(lb,ub-lb+1,range);\n return;\n}\n\n_Compound.prototype.isContiguous = function() {\n return this._ranges.length > 1;\n}\n\n_Compound.prototype.ranges = function() {\n return this._ranges;\n}\n\n_Compound.prototype._pushRanges = function(ranges) {\n for (var ri = 0; ri < this._ranges.length; ++ri)\n ranges.push(this._ranges[ri]);\n}\n\n_Compound.prototype.toString = function() {\n var s = '';\n for (var r = 0; r < this._ranges.length; ++r) {\n if (r>0) {\n s = s + ',';\n }\n s = s + this._ranges[r].toString();\n }\n return s;\n}\n\nfunction union(s0, s1) {\n if (! (s0 instanceof _Compound)) {\n if (! (s0 instanceof Array))\n s0 = [s0];\n s0 = new _Compound(s0);\n }\n\n if (s1)\n s0.insertRange(s1);\n\n return s0;\n}\n\nfunction intersection(s0, s1) {\n var r0 = s0.ranges();\n var r1 = s1.ranges();\n var l0 = r0.length, l1 = r1.length;\n var i0 = 0, i1 = 0;\n var or = [];\n\n while (i0 < l0 && i1 < l1) {\n var s0 = r0[i0], s1 = r1[i1];\n var lapMin = Math.max(s0.min(), s1.min());\n var lapMax = Math.min(s0.max(), s1.max());\n if (lapMax >= lapMin) {\n or.push(new Range(lapMin, lapMax));\n }\n if (s0.max() > s1.max()) {\n ++i1;\n } else {\n ++i0;\n }\n }\n\n if (or.length == 0) {\n return null; // FIXME\n } else if (or.length == 1) {\n return or[0];\n } else {\n return new _Compound(or);\n }\n}\n\nfunction coverage(s) {\n var tot = 0;\n var rl = s.ranges();\n for (var ri = 0; ri < rl.length; ++ri) {\n var r = rl[ri];\n tot += (r.max() - r.min() + 1);\n }\n return tot;\n}\n\n\n\nfunction rangeOrder(a, b)\n{\n if (a.min() < b.min()) {\n return -1;\n } else if (a.min() > b.min()) {\n return 1;\n } else if (a.max() < b.max()) {\n return -1;\n } else if (b.max() > a.max()) {\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction _rangeOrder(a, b)\n{\n if (a._min < b._min) {\n return -1;\n } else if (a._min > b._min) {\n return 1;\n } else if (a._max < b._max) {\n return -1;\n } else if (b._max > a._max) {\n return 1;\n } else {\n return 0;\n }\n}\n\nreturn {\n Range: Range,\n union: union,\n intersection: intersection,\n coverage: coverage,\n rangeOver: rangeOrder,\n _rangeOrder: _rangeOrder\n};\n}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Javascript ZLib\n// By Thomas Down 2010-2011\n//\n// Based very heavily on portions of jzlib (by ymnk@jcraft.com), who in\n// turn credits Jean-loup Gailly and Mark Adler for the original zlib code.\n//\n// inflate.js: ZLib inflate code\n//\n\n//\n// Shared constants\n//\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\nvar MAX_WBITS=15; // 32K LZ77 window\nvar DEF_WBITS=MAX_WBITS;\nvar MAX_MEM_LEVEL=9;\nvar MANY=1440;\nvar BMAX = 15;\n\n// preset dictionary flag in zlib header\nvar PRESET_DICT=0x20;\n\nvar Z_NO_FLUSH=0;\nvar Z_PARTIAL_FLUSH=1;\nvar Z_SYNC_FLUSH=2;\nvar Z_FULL_FLUSH=3;\nvar Z_FINISH=4;\n\nvar Z_DEFLATED=8;\n\nvar Z_OK=0;\nvar Z_STREAM_END=1;\nvar Z_NEED_DICT=2;\nvar Z_ERRNO=-1;\nvar Z_STREAM_ERROR=-2;\nvar Z_DATA_ERROR=-3;\nvar Z_MEM_ERROR=-4;\nvar Z_BUF_ERROR=-5;\nvar Z_VERSION_ERROR=-6;\n\nvar METHOD=0; // waiting for method byte\nvar FLAG=1; // waiting for flag byte\nvar DICT4=2; // four dictionary check bytes to go\nvar DICT3=3; // three dictionary check bytes to go\nvar DICT2=4; // two dictionary check bytes to go\nvar DICT1=5; // one dictionary check byte to go\nvar DICT0=6; // waiting for inflateSetDictionary\nvar BLOCKS=7; // decompressing blocks\nvar CHECK4=8; // four check bytes to go\nvar CHECK3=9; // three check bytes to go\nvar CHECK2=10; // two check bytes to go\nvar CHECK1=11; // one check byte to go\nvar DONE=12; // finished check, done\nvar BAD=13; // got an error--stay here\n\nvar inflate_mask = [0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff];\n\nvar IB_TYPE=0; // get type bits (3, including end bit)\nvar IB_LENS=1; // get lengths for stored\nvar IB_STORED=2;// processing stored block\nvar IB_TABLE=3; // get table lengths\nvar IB_BTREE=4; // get bit lengths tree for a dynamic block\nvar IB_DTREE=5; // get length, distance trees for a dynamic block\nvar IB_CODES=6; // processing fixed or dynamic block\nvar IB_DRY=7; // output remaining window bytes\nvar IB_DONE=8; // finished last block, done\nvar IB_BAD=9; // ot a data error--stuck here\n\nvar fixed_bl = 9;\nvar fixed_bd = 5;\n\nvar fixed_tl = [\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,192,\n 80,7,10, 0,8,96, 0,8,32, 0,9,160,\n 0,8,0, 0,8,128, 0,8,64, 0,9,224,\n 80,7,6, 0,8,88, 0,8,24, 0,9,144,\n 83,7,59, 0,8,120, 0,8,56, 0,9,208,\n 81,7,17, 0,8,104, 0,8,40, 0,9,176,\n 0,8,8, 0,8,136, 0,8,72, 0,9,240,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,200,\n 81,7,13, 0,8,100, 0,8,36, 0,9,168,\n 0,8,4, 0,8,132, 0,8,68, 0,9,232,\n 80,7,8, 0,8,92, 0,8,28, 0,9,152,\n 84,7,83, 0,8,124, 0,8,60, 0,9,216,\n 82,7,23, 0,8,108, 0,8,44, 0,9,184,\n 0,8,12, 0,8,140, 0,8,76, 0,9,248,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,196,\n 81,7,11, 0,8,98, 0,8,34, 0,9,164,\n 0,8,2, 0,8,130, 0,8,66, 0,9,228,\n 80,7,7, 0,8,90, 0,8,26, 0,9,148,\n 84,7,67, 0,8,122, 0,8,58, 0,9,212,\n 82,7,19, 0,8,106, 0,8,42, 0,9,180,\n 0,8,10, 0,8,138, 0,8,74, 0,9,244,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,204,\n 81,7,15, 0,8,102, 0,8,38, 0,9,172,\n 0,8,6, 0,8,134, 0,8,70, 0,9,236,\n 80,7,9, 0,8,94, 0,8,30, 0,9,156,\n 84,7,99, 0,8,126, 0,8,62, 0,9,220,\n 82,7,27, 0,8,110, 0,8,46, 0,9,188,\n 0,8,14, 0,8,142, 0,8,78, 0,9,252,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,194,\n 80,7,10, 0,8,97, 0,8,33, 0,9,162,\n 0,8,1, 0,8,129, 0,8,65, 0,9,226,\n 80,7,6, 0,8,89, 0,8,25, 0,9,146,\n 83,7,59, 0,8,121, 0,8,57, 0,9,210,\n 81,7,17, 0,8,105, 0,8,41, 0,9,178,\n 0,8,9, 0,8,137, 0,8,73, 0,9,242,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,202,\n 81,7,13, 0,8,101, 0,8,37, 0,9,170,\n 0,8,5, 0,8,133, 0,8,69, 0,9,234,\n 80,7,8, 0,8,93, 0,8,29, 0,9,154,\n 84,7,83, 0,8,125, 0,8,61, 0,9,218,\n 82,7,23, 0,8,109, 0,8,45, 0,9,186,\n 0,8,13, 0,8,141, 0,8,77, 0,9,250,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,198,\n 81,7,11, 0,8,99, 0,8,35, 0,9,166,\n 0,8,3, 0,8,131, 0,8,67, 0,9,230,\n 80,7,7, 0,8,91, 0,8,27, 0,9,150,\n 84,7,67, 0,8,123, 0,8,59, 0,9,214,\n 82,7,19, 0,8,107, 0,8,43, 0,9,182,\n 0,8,11, 0,8,139, 0,8,75, 0,9,246,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,206,\n 81,7,15, 0,8,103, 0,8,39, 0,9,174,\n 0,8,7, 0,8,135, 0,8,71, 0,9,238,\n 80,7,9, 0,8,95, 0,8,31, 0,9,158,\n 84,7,99, 0,8,127, 0,8,63, 0,9,222,\n 82,7,27, 0,8,111, 0,8,47, 0,9,190,\n 0,8,15, 0,8,143, 0,8,79, 0,9,254,\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,193,\n\n 80,7,10, 0,8,96, 0,8,32, 0,9,161,\n 0,8,0, 0,8,128, 0,8,64, 0,9,225,\n 80,7,6, 0,8,88, 0,8,24, 0,9,145,\n 83,7,59, 0,8,120, 0,8,56, 0,9,209,\n 81,7,17, 0,8,104, 0,8,40, 0,9,177,\n 0,8,8, 0,8,136, 0,8,72, 0,9,241,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,201,\n 81,7,13, 0,8,100, 0,8,36, 0,9,169,\n 0,8,4, 0,8,132, 0,8,68, 0,9,233,\n 80,7,8, 0,8,92, 0,8,28, 0,9,153,\n 84,7,83, 0,8,124, 0,8,60, 0,9,217,\n 82,7,23, 0,8,108, 0,8,44, 0,9,185,\n 0,8,12, 0,8,140, 0,8,76, 0,9,249,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,197,\n 81,7,11, 0,8,98, 0,8,34, 0,9,165,\n 0,8,2, 0,8,130, 0,8,66, 0,9,229,\n 80,7,7, 0,8,90, 0,8,26, 0,9,149,\n 84,7,67, 0,8,122, 0,8,58, 0,9,213,\n 82,7,19, 0,8,106, 0,8,42, 0,9,181,\n 0,8,10, 0,8,138, 0,8,74, 0,9,245,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,205,\n 81,7,15, 0,8,102, 0,8,38, 0,9,173,\n 0,8,6, 0,8,134, 0,8,70, 0,9,237,\n 80,7,9, 0,8,94, 0,8,30, 0,9,157,\n 84,7,99, 0,8,126, 0,8,62, 0,9,221,\n 82,7,27, 0,8,110, 0,8,46, 0,9,189,\n 0,8,14, 0,8,142, 0,8,78, 0,9,253,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,195,\n 80,7,10, 0,8,97, 0,8,33, 0,9,163,\n 0,8,1, 0,8,129, 0,8,65, 0,9,227,\n 80,7,6, 0,8,89, 0,8,25, 0,9,147,\n 83,7,59, 0,8,121, 0,8,57, 0,9,211,\n 81,7,17, 0,8,105, 0,8,41, 0,9,179,\n 0,8,9, 0,8,137, 0,8,73, 0,9,243,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,203,\n 81,7,13, 0,8,101, 0,8,37, 0,9,171,\n 0,8,5, 0,8,133, 0,8,69, 0,9,235,\n 80,7,8, 0,8,93, 0,8,29, 0,9,155,\n 84,7,83, 0,8,125, 0,8,61, 0,9,219,\n 82,7,23, 0,8,109, 0,8,45, 0,9,187,\n 0,8,13, 0,8,141, 0,8,77, 0,9,251,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,199,\n 81,7,11, 0,8,99, 0,8,35, 0,9,167,\n 0,8,3, 0,8,131, 0,8,67, 0,9,231,\n 80,7,7, 0,8,91, 0,8,27, 0,9,151,\n 84,7,67, 0,8,123, 0,8,59, 0,9,215,\n 82,7,19, 0,8,107, 0,8,43, 0,9,183,\n 0,8,11, 0,8,139, 0,8,75, 0,9,247,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,207,\n 81,7,15, 0,8,103, 0,8,39, 0,9,175,\n 0,8,7, 0,8,135, 0,8,71, 0,9,239,\n 80,7,9, 0,8,95, 0,8,31, 0,9,159,\n 84,7,99, 0,8,127, 0,8,63, 0,9,223,\n 82,7,27, 0,8,111, 0,8,47, 0,9,191,\n 0,8,15, 0,8,143, 0,8,79, 0,9,255\n];\nvar fixed_td = [\n 80,5,1, 87,5,257, 83,5,17, 91,5,4097,\n 81,5,5, 89,5,1025, 85,5,65, 93,5,16385,\n 80,5,3, 88,5,513, 84,5,33, 92,5,8193,\n 82,5,9, 90,5,2049, 86,5,129, 192,5,24577,\n 80,5,2, 87,5,385, 83,5,25, 91,5,6145,\n 81,5,7, 89,5,1537, 85,5,97, 93,5,24577,\n 80,5,4, 88,5,769, 84,5,49, 92,5,12289,\n 82,5,13, 90,5,3073, 86,5,193, 192,5,24577\n];\n\n // Tables for deflate from PKZIP's appnote.txt.\n var cplens = [ // Copy lengths for literal codes 257..285\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n ];\n\n // see note #13 above about 258\n var cplext = [ // Extra bits for literal codes 257..285\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid\n ];\n\n var cpdist = [ // Copy offsets for distance codes 0..29\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577\n ];\n\n var cpdext = [ // Extra bits for distance codes\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13];\n\n//\n// ZStream.java\n//\n\nfunction ZStream() {\n}\n\n\nZStream.prototype.inflateInit = function(w, nowrap) {\n if (!w) {\n\tw = DEF_WBITS;\n }\n if (nowrap) {\n\tnowrap = false;\n }\n this.istate = new Inflate();\n return this.istate.inflateInit(this, nowrap?-w:w);\n}\n\nZStream.prototype.inflate = function(f) {\n if(this.istate==null) return Z_STREAM_ERROR;\n return this.istate.inflate(this, f);\n}\n\nZStream.prototype.inflateEnd = function(){\n if(this.istate==null) return Z_STREAM_ERROR;\n var ret=istate.inflateEnd(this);\n this.istate = null;\n return ret;\n}\nZStream.prototype.inflateSync = function(){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSync(this);\n}\nZStream.prototype.inflateSetDictionary = function(dictionary, dictLength){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSetDictionary(this, dictionary, dictLength);\n}\n\n/*\n\n public int deflateInit(int level){\n return deflateInit(level, MAX_WBITS);\n }\n public int deflateInit(int level, boolean nowrap){\n return deflateInit(level, MAX_WBITS, nowrap);\n }\n public int deflateInit(int level, int bits){\n return deflateInit(level, bits, false);\n }\n public int deflateInit(int level, int bits, boolean nowrap){\n dstate=new Deflate();\n return dstate.deflateInit(this, level, nowrap?-bits:bits);\n }\n public int deflate(int flush){\n if(dstate==null){\n return Z_STREAM_ERROR;\n }\n return dstate.deflate(this, flush);\n }\n public int deflateEnd(){\n if(dstate==null) return Z_STREAM_ERROR;\n int ret=dstate.deflateEnd();\n dstate=null;\n return ret;\n }\n public int deflateParams(int level, int strategy){\n if(dstate==null) return Z_STREAM_ERROR;\n return dstate.deflateParams(this, level, strategy);\n }\n public int deflateSetDictionary (byte[] dictionary, int dictLength){\n if(dstate == null)\n return Z_STREAM_ERROR;\n return dstate.deflateSetDictionary(this, dictionary, dictLength);\n }\n\n*/\n\n/*\n // Flush as much pending output as possible. All deflate() output goes\n // through this function so some applications may wish to modify it\n // to avoid allocating a large strm->next_out buffer and copying into it.\n // (See also read_buf()).\n void flush_pending(){\n int len=dstate.pending;\n\n if(len>avail_out) len=avail_out;\n if(len==0) return;\n\n if(dstate.pending_buf.length<=dstate.pending_out ||\n next_out.length<=next_out_index ||\n dstate.pending_buf.length<(dstate.pending_out+len) ||\n next_out.length<(next_out_index+len)){\n System.out.println(dstate.pending_buf.length+\", \"+dstate.pending_out+\n\t\t\t \", \"+next_out.length+\", \"+next_out_index+\", \"+len);\n System.out.println(\"avail_out=\"+avail_out);\n }\n\n System.arraycopy(dstate.pending_buf, dstate.pending_out,\n\t\t next_out, next_out_index, len);\n\n next_out_index+=len;\n dstate.pending_out+=len;\n total_out+=len;\n avail_out-=len;\n dstate.pending-=len;\n if(dstate.pending==0){\n dstate.pending_out=0;\n }\n }\n\n // Read a new buffer from the current input stream, update the adler32\n // and total number of bytes read. All deflate() input goes through\n // this function so some applications may wish to modify it to avoid\n // allocating a large strm->next_in buffer and copying from it.\n // (See also flush_pending()).\n int read_buf(byte[] buf, int start, int size) {\n int len=avail_in;\n\n if(len>size) len=size;\n if(len==0) return 0;\n\n avail_in-=len;\n\n if(dstate.noheader==0) {\n adler=_adler.adler32(adler, next_in, next_in_index, len);\n }\n System.arraycopy(next_in, next_in_index, buf, start, len);\n next_in_index += len;\n total_in += len;\n return len;\n }\n\n public void free(){\n next_in=null;\n next_out=null;\n msg=null;\n _adler=null;\n }\n}\n*/\n\n\n//\n// Inflate.java\n//\n\nfunction Inflate() {\n this.was = [0];\n}\n\nInflate.prototype.inflateReset = function(z) {\n if(z == null || z.istate == null) return Z_STREAM_ERROR;\n\n z.total_in = z.total_out = 0;\n z.msg = null;\n z.istate.mode = z.istate.nowrap!=0 ? BLOCKS : METHOD;\n z.istate.blocks.reset(z, null);\n return Z_OK;\n}\n\nInflate.prototype.inflateEnd = function(z){\n if(this.blocks != null)\n this.blocks.free(z);\n this.blocks=null;\n return Z_OK;\n}\n\nInflate.prototype.inflateInit = function(z, w){\n z.msg = null;\n this.blocks = null;\n\n // handle undocumented nowrap option (no zlib header or check)\n nowrap = 0;\n if(w < 0){\n w = - w;\n nowrap = 1;\n }\n\n // set window size\n if(w<8 ||w>15){\n this.inflateEnd(z);\n return Z_STREAM_ERROR;\n }\n this.wbits=w;\n\n z.istate.blocks=new InfBlocks(z,\n\t\t\t\t z.istate.nowrap!=0 ? null : this,\n\t\t\t\t 1<>4)+8>z.istate.wbits){\n z.istate.mode = BAD;\n z.msg=\"invalid window size\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n z.istate.mode=FLAG;\n case FLAG:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n b = (z.next_in[z.next_in_index++])&0xff;\n\n if((((z.istate.method << 8)+b) % 31)!=0){\n z.istate.mode = BAD;\n z.msg = \"incorrect header check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n if((b&PRESET_DICT)==0){\n z.istate.mode = BLOCKS;\n break;\n }\n z.istate.mode = DICT4;\n case DICT4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=DICT3;\n case DICT3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode=DICT2;\n case DICT2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode=DICT1;\n case DICT1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need += (z.next_in[z.next_in_index++]&0xff);\n z.adler = z.istate.need;\n z.istate.mode = DICT0;\n return Z_NEED_DICT;\n case DICT0:\n z.istate.mode = BAD;\n z.msg = \"need dictionary\";\n z.istate.marker = 0; // can try inflateSync\n return Z_STREAM_ERROR;\n case BLOCKS:\n\n r = z.istate.blocks.proc(z, r);\n if(r == Z_DATA_ERROR){\n z.istate.mode = BAD;\n z.istate.marker = 0; // can try inflateSync\n break;\n }\n if(r == Z_OK){\n r = f;\n }\n if(r != Z_STREAM_END){\n return r;\n }\n r = f;\n z.istate.blocks.reset(z, z.istate.was);\n if(z.istate.nowrap!=0){\n z.istate.mode=DONE;\n break;\n }\n z.istate.mode=CHECK4;\n case CHECK4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=CHECK3;\n case CHECK3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode = CHECK2;\n case CHECK2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode = CHECK1;\n case CHECK1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=(z.next_in[z.next_in_index++]&0xff);\n\n if(((z.istate.was[0])) != ((z.istate.need))){\n z.istate.mode = BAD;\n z.msg = \"incorrect data check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n z.istate.mode = DONE;\n case DONE:\n return Z_STREAM_END;\n case BAD:\n return Z_DATA_ERROR;\n default:\n return Z_STREAM_ERROR;\n }\n }\n }\n\n\nInflate.prototype.inflateSetDictionary = function(z, dictionary, dictLength) {\n var index=0;\n var length = dictLength;\n if(z==null || z.istate == null|| z.istate.mode != DICT0)\n return Z_STREAM_ERROR;\n\n if(z._adler.adler32(1, dictionary, 0, dictLength)!=z.adler){\n return Z_DATA_ERROR;\n }\n\n z.adler = z._adler.adler32(0, null, 0, 0);\n\n if(length >= (1<>> 1){\n case 0: // stored\n {b>>>=(3);k-=(3);}\n t = k & 7; // go to byte boundary\n\n {b>>>=(t);k-=(t);}\n this.mode = IB_LENS; // get length of stored block\n break;\n case 1: // fixed\n {\n var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n var tl=[];\n\t var td=[];\n\n\t inflate_trees_fixed(bl, bd, tl, td, z);\n this.codes.init(bl[0], bd[0], tl[0], 0, td[0], 0, z);\n }\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_CODES;\n break;\n case 2: // dynamic\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_TABLE;\n break;\n case 3: // illegal\n\n {b>>>=(3);k-=(3);}\n this.mode = BAD;\n z.msg = \"invalid block type\";\n r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tbreak;\n case IB_LENS:\n\twhile(k<(32)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>> 16) & 0xffff) != (b & 0xffff)){\n\t this.mode = BAD;\n\t z.msg = \"invalid stored block lengths\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tthis.left = (b & 0xffff);\n\tb = k = 0; // dump bits\n\tthis.mode = this.left!=0 ? IB_STORED : (this.last!=0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_STORED:\n\tif (n == 0){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tif(m==0){\n\t if(q==end&&read!=0){\n\t q=0; m=(qn) t = n;\n\tif(t>m) t = m;\n\tarrayCopy(z.next_in, p, this.window, q, t);\n\tp += t; n -= t;\n\tq += t; m -= t;\n\tif ((this.left -= t) != 0)\n\t break;\n\tthis.mode = (this.last != 0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_TABLE:\n\n\twhile(k<(14)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)< 29 || ((t >> 5) & 0x1f) > 29)\n\t {\n\t this.mode = IB_BAD;\n\t z.msg = \"too many length or distance symbols\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\tt = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);\n\tif(this.blens==null || this.blens.length>>=(14);k-=(14);}\n\n\tthis.index = 0;\n\tmode = IB_BTREE;\n case IB_BTREE:\n\twhile (this.index < 4 + (this.table >>> 10)){\n\t while(k<(3)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(3);k-=(3);}\n\t}\n\n\twhile(this.index < 19){\n\t this.blens[INFBLOCKS_BORDER[this.index++]] = 0;\n\t}\n\n\tthis.bb[0] = 7;\n\tt = this.inftree.inflate_trees_bits(this.blens, this.bb, this.tb, this.hufts, z);\n\tif (t != Z_OK){\n\t r = t;\n\t if (r == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t }\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tthis.index = 0;\n\tthis.mode = IB_DTREE;\n case IB_DTREE:\n\twhile (true){\n\t t = this.table;\n\t if(!(this.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))){\n\t break;\n\t }\n\n\t var h; //int[]\n\t var i, j, c;\n\n\t t = this.bb[0];\n\n\t while(k<(t)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\t this.blens[this.index++] = c;\n\t }\n\t else { // c == 16..18\n\t i = c == 18 ? 7 : c - 14;\n\t j = c == 18 ? 11 : 3;\n\n\t while(k<(t+i)){\n\t if(n!=0){\n\t\tr=Z_OK;\n\t }\n\t else{\n\t\tthis.bitb=b; this.bitk=k;\n\t\tz.avail_in=n;\n\t\tz.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t\tthis.write=q;\n\t\treturn this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\n\t j += (b & inflate_mask[i]);\n\n\t b>>>=(i);k-=(i);\n\n\t i = this.index;\n\t t = this.table;\n\t if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||\n\t\t(c == 16 && i < 1)){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t z.msg = \"invalid bit length repeat\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\n\t c = c == 16 ? this.blens[i-1] : 0;\n\t do{\n\t this.blens[i++] = c;\n\t }\n\t while (--j!=0);\n\t this.index = i;\n\t }\n\t}\n\n\tthis.tb[0]=-1;\n\t{\n\t var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n\t var tl=new Int32Array(1);\n\t var td=new Int32Array(1);\n\t bl[0] = 9; // must be <= 9 for lookahead assumptions\n\t bd[0] = 6; // must be <= 9 for lookahead assumptions\n\n\t t = this.table;\n\t t = this.inftree.inflate_trees_dynamic(257 + (t & 0x1f),\n\t\t\t\t\t 1 + ((t >> 5) & 0x1f),\n\t\t\t\t\t this.blens, bl, bd, tl, td, this.hufts, z);\n\n\t if (t != Z_OK){\n\t if (t == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = BAD;\n\t }\n\t r = t;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\t this.codes.init(bl[0], bd[0], this.hufts, tl[0], this.hufts, td[0], z);\n\t}\n\tthis.mode = IB_CODES;\n case IB_CODES:\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n; z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\n\tif ((r = this.codes.proc(this, z, r)) != Z_STREAM_END){\n\t return this.inflate_flush(z, r);\n\t}\n\tr = Z_OK;\n\tthis.codes.free(z);\n\n\tp=z.next_in_index; n=z.avail_in;b=this.bitb;k=this.bitk;\n\tq=this.write;m = (q < this.read ? this.read-q-1 : this.end-q);\n\n\tif (this.last==0){\n\t this.mode = IB_TYPE;\n\t break;\n\t}\n\tthis.mode = IB_DRY;\n case IB_DRY:\n\tthis.write=q;\n\tr = this.inflate_flush(z, r);\n\tq=this.write; m = (q < this.read ? this.read-q-1 : this.end-q);\n\tif (this.read != this.write){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z, r);\n\t}\n\tmode = DONE;\n case IB_DONE:\n\tr = Z_STREAM_END;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n case IB_BAD:\n\tr = Z_DATA_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n\n default:\n\tr = Z_STREAM_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n }\n }\n }\n\nInfBlocks.prototype.free = function(z){\n this.reset(z, null);\n this.window=null;\n this.hufts=null;\n}\n\nInfBlocks.prototype.set_dictionary = function(d, start, n){\n arrayCopy(d, start, window, 0, n);\n this.read = this.write = n;\n}\n\n // Returns true if inflate is currently at the end of a block generated\n // by Z_SYNC_FLUSH or Z_FULL_FLUSH.\nInfBlocks.prototype.sync_point = function(){\n return this.mode == IB_LENS;\n}\n\n // copy as much as possible from the sliding window to the output area\nInfBlocks.prototype.inflate_flush = function(z, r){\n var n;\n var p;\n var q;\n\n // local copies of source and destination pointers\n p = z.next_out_index;\n q = this.read;\n\n // compute number of bytes to copy as far as end of window\n n = ((q <= this.write ? this.write : this.end) - q);\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n z.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy as far as end of window\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n\n // see if more to copy at beginning of window\n if (q == this.end){\n // wrap pointers\n q = 0;\n if (this.write == this.end)\n this.write = 0;\n\n // compute bytes to copy\n n = this.write - q;\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n\tz.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n }\n\n // update pointers\n z.next_out_index = p;\n this.read = q;\n\n // done\n return r;\n }\n\n//\n// InfCodes.java\n//\n\nvar IC_START=0; // x: set up for LEN\nvar IC_LEN=1; // i: get length/literal/eob next\nvar IC_LENEXT=2; // i: getting length extra (have base)\nvar IC_DIST=3; // i: get distance next\nvar IC_DISTEXT=4;// i: getting distance extra\nvar IC_COPY=5; // o: copying bytes in window, waiting for space\nvar IC_LIT=6; // o: got literal, waiting for output space\nvar IC_WASH=7; // o: got eob, possibly still output waiting\nvar IC_END=8; // x: got eob and all data flushed\nvar IC_BADCODE=9;// x: got error\n\nfunction InfCodes() {\n}\n\nInfCodes.prototype.init = function(bl, bd, tl, tl_index, td, td_index, z) {\n this.mode=IC_START;\n this.lbits=bl;\n this.dbits=bd;\n this.ltree=tl;\n this.ltree_index=tl_index;\n this.dtree = td;\n this.dtree_index=td_index;\n this.tree=null;\n}\n\nInfCodes.prototype.proc = function(s, z, r){\n var j; // temporary storage\n var t; // temporary pointer (int[])\n var tindex; // temporary pointer\n var e; // extra bits or operation\n var b=0; // bit buffer\n var k=0; // bits in bit buffer\n var p=0; // input data pointer\n var n; // bytes available there\n var q; // output window write pointer\n var m; // bytes to end of window or read pointer\n var f; // pointer to copy strings from\n\n // copy input/output information to locals (UPDATE macro restores)\n p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n q=s.write;m=q= 258 && n >= 10){\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t r = this.inflate_fast(this.lbits, this.dbits,\n\t\t\t this.ltree, this.ltree_index,\n\t\t\t this.dtree, this.dtree_index,\n\t\t\t s, z);\n\n\t p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n\t q=s.write;m=q>>=(this.tree[tindex+1]);\n\tk-=(this.tree[tindex+1]);\n\n\te=this.tree[tindex];\n\n\tif(e == 0){ // literal\n\t this.lit = this.tree[tindex+2];\n\t this.mode = IC_LIT;\n\t break;\n\t}\n\tif((e & 16)!=0 ){ // length\n\t this.get = e & 15;\n\t this.len = this.tree[tindex+2];\n\t this.mode = IC_LENEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tif ((e & 32)!=0){ // end of block\n\t this.mode = IC_WASH;\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid literal/length code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_LENEXT: // i: getting length extra (have base)\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.need = this.dbits;\n\tthis.tree = this.dtree;\n\tthis.tree_index = this.dtree_index;\n\tthis.mode = IC_DIST;\n case IC_DIST: // i: get distance next\n\tj = this.need;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=this.tree[tindex+1];\n\tk-=this.tree[tindex+1];\n\n\te = (this.tree[tindex]);\n\tif((e & 16)!=0){ // distance\n\t this.get = e & 15;\n\t this.dist = this.tree[tindex+2];\n\t this.mode = IC_DISTEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid distance code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_DISTEXT: // i: getting distance extra\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.mode = IC_COPY;\n case IC_COPY: // o: copying bytes in window, waiting for space\n f = q - this.dist;\n while(f < 0){ // modulo window size-\"while\" instead\n f += s.end; // of \"if\" handles invalid distances\n\t}\n\twhile (this.len!=0){\n\n\t if(m==0){\n\t if(q==s.end&&s.read!=0){q=0;m=q 7){ // return unused byte, if any\n\t k -= 8;\n\t n++;\n\t p--; // can always return one\n\t}\n\n\ts.write=q; r=s.inflate_flush(z,r);\n\tq=s.write;m=q= 258 && n >= 10\n // get literal/length code\n while(k<(20)){ // max bits for literal/length code\n\tn--;\n\tb|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\ts.window[q++] = tp[tp_index_t_3+2];\n\tm--;\n\tcontinue;\n }\n do {\n\n\tb>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\tif((e&16)!=0){\n\t e &= 15;\n\t c = tp[tp_index_t_3+2] + (b & inflate_mask[e]);\n\n\t b>>=e; k-=e;\n\n\t // decode distance base of block to copy\n\t while(k<(15)){ // max bits for distance code\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t if((e&16)!=0){\n\t // get extra bits to add to distance base\n\t e &= 15;\n\t while(k<(e)){ // get extra bits (up to 13)\n\t\tn--;\n\t\tb|=(z.next_in[p++]&0xff)<>=(e); k-=(e);\n\n\t // do the copy\n\t m -= c;\n\t if (q >= d){ // offset before dest\n\t\t// just copy\n\t\tr=q-d;\n\t\tif(q-r>0 && 2>(q-r)){\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t\telse{\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t }\n\t else{ // else offset after destination\n r=q-d;\n do{\n r+=s.end; // force pointer in window\n }while(r<0); // covers invalid distances\n\t\te=s.end-r;\n\t\tif(c>e){ // if source crosses,\n\t\t c-=e; // wrapped copy\n\t\t if(q-r>0 && e>(q-r)){\n\t\t do{s.window[q++] = s.window[r++];}\n\t\t while(--e!=0);\n\t\t }\n\t\t else{\n\t\t arrayCopy(s.window, r, s.window, q, e);\n\t\t q+=e; r+=e; e=0;\n\t\t }\n\t\t r = 0; // copy rest from start of window\n\t\t}\n\n\t }\n\n\t // copy all or what's left\n do{s.window[q++] = s.window[r++];}\n\t\twhile(--c!=0);\n\t break;\n\t }\n\t else if((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t e=tp[tp_index_t_3];\n\t }\n\t else{\n\t z.msg = \"invalid distance code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t }\n\t }\n\t while(true);\n\t break;\n\t}\n\n\tif((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t if((e=tp[tp_index_t_3])==0){\n\n\t b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t s.window[q++]=tp[tp_index_t_3+2];\n\t m--;\n\t break;\n\t }\n\t}\n\telse if((e&32)!=0){\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_STREAM_END;\n\t}\n\telse{\n\t z.msg=\"invalid literal/length code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t}\n }\n while(true);\n }\n while(m>=258 && n>= 10);\n\n // not enough input or output--restore pointers and return\n c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n s.bitb=b;s.bitk=k;\n z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n s.write=q;\n\n return Z_OK;\n}\n\n//\n// InfTree.java\n//\n\nfunction InfTree() {\n}\n\nInfTree.prototype.huft_build = function(b, bindex, n, s, d, e, t, m, hp, hn, v) {\n\n // Given a list of code lengths and a maximum table size, make a set of\n // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR\n // if the given code set is incomplete (the tables are still built in this\n // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of\n // lengths), or Z_MEM_ERROR if not enough memory.\n\n var a; // counter for codes of length k\n var f; // i repeats in table every f entries\n var g; // maximum code length\n var h; // table level\n var i; // counter, current code\n var j; // counter\n var k; // number of bits in current code\n var l; // bits per table (returned in m)\n var mask; // (1 << w) - 1, to avoid cc -O bug on HP\n var p; // pointer into c[], b[], or v[]\n var q; // points to current table\n var w; // bits before this table == (l * h)\n var xp; // pointer into x\n var y; // number of dummy codes added\n var z; // number of entries in current table\n\n // Generate counts for each bit length\n\n p = 0; i = n;\n do {\n this.c[b[bindex+p]]++; p++; i--; // assume all entries <= BMAX\n }while(i!=0);\n\n if(this.c[0] == n){ // null input--all zero length codes\n t[0] = -1;\n m[0] = 0;\n return Z_OK;\n }\n\n // Find minimum and maximum length, bound *m by those\n l = m[0];\n for (j = 1; j <= BMAX; j++)\n if(this.c[j]!=0) break;\n k = j; // minimum code length\n if(l < j){\n l = j;\n }\n for (i = BMAX; i!=0; i--){\n if(this.c[i]!=0) break;\n }\n g = i; // maximum code length\n if(l > i){\n l = i;\n }\n m[0] = l;\n\n // Adjust last length count to fill out codes, if needed\n for (y = 1 << j; j < i; j++, y <<= 1){\n if ((y -= this.c[j]) < 0){\n return Z_DATA_ERROR;\n }\n }\n if ((y -= this.c[i]) < 0){\n return Z_DATA_ERROR;\n }\n this.c[i] += y;\n\n // Generate starting offsets into the value table for each length\n this.x[1] = j = 0;\n p = 1; xp = 2;\n while (--i!=0) { // note that i == g from above\n this.x[xp] = (j += this.c[p]);\n xp++;\n p++;\n }\n\n // Make a table of values in order of bit lengths\n i = 0; p = 0;\n do {\n if ((j = b[bindex+p]) != 0){\n this.v[this.x[j]++] = i;\n }\n p++;\n }\n while (++i < n);\n n = this.x[g]; // set n to length of v\n\n // Generate the Huffman codes and for each, make the table entries\n this.x[0] = i = 0; // first Huffman code is zero\n p = 0; // grab values in bit order\n h = -1; // no tables yet--level -1\n w = -l; // bits decoded == (l * h)\n this.u[0] = 0; // just to keep compilers happy\n q = 0; // ditto\n z = 0; // ditto\n\n // go through the bit lengths (k already is bits in shortest code)\n for (; k <= g; k++){\n a = this.c[k];\n while (a--!=0){\n\t// here i is the Huffman code of length k bits for value *p\n\t// make tables up to required level\n while (k > w + l){\n h++;\n w += l; // previous table always l bits\n\t // compute minimum size table less than or equal to l bits\n z = g - w;\n z = (z > l) ? l : z; // table size upper limit\n if((f=1<<(j=k-w))>a+1){ // try a k-w bit table\n // too few codes for k-w bit table\n f -= a + 1; // deduct codes from patterns left\n xp = k;\n if(j < z){\n while (++j < z){ // try smaller tables up to z bits\n if((f <<= 1) <= this.c[++xp])\n break; // enough codes to use up j bits\n f -= this.c[xp]; // else deduct codes from patterns\n }\n\t }\n }\n z = 1 << j; // table entries for j-bit table\n\n\t // allocate new table\n if (this.hn[0] + z > MANY){ // (note: doesn't matter for fixed)\n return Z_DATA_ERROR; // overflow of MANY\n }\n this.u[h] = q = /*hp+*/ this.hn[0]; // DEBUG\n this.hn[0] += z;\n\n\t // connect to last table, if there is one\n\t if(h!=0){\n this.x[h]=i; // save pattern for backing up\n this.r[0]=j; // bits in this table\n this.r[1]=l; // bits to dump before this table\n j=i>>>(w - l);\n this.r[2] = (q - this.u[h-1] - j); // offset to this table\n arrayCopy(this.r, 0, hp, (this.u[h-1]+j)*3, 3); // connect to last table\n }\n else{\n t[0] = q; // first table is returned result\n\t }\n }\n\n\t// set up table entry in r\n this.r[1] = (k - w);\n if (p >= n){\n this.r[0] = 128 + 64; // out of values--invalid code\n\t}\n else if (v[p] < s){\n this.r[0] = (this.v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block\n this.r[2] = this.v[p++]; // simple code is just the value\n }\n else{\n this.r[0]=(e[this.v[p]-s]+16+64); // non-simple--look up in lists\n this.r[2]=d[this.v[p++] - s];\n }\n\n // fill code-like entries with r\n f=1<<(k-w);\n for (j=i>>>w;j>>= 1){\n i ^= j;\n\t}\n i ^= j;\n\n\t// backup over finished tables\n mask = (1 << w) - 1; // needed on HP, cc -O bug\n while ((i & mask) != this.x[h]){\n h--; // don't need to update q\n w -= l;\n mask = (1 << w) - 1;\n }\n }\n }\n // Return Z_BUF_ERROR if we were given an incomplete table\n return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;\n}\n\nInfTree.prototype.inflate_trees_bits = function(c, bb, tb, hp, z) {\n var result;\n this.initWorkArea(19);\n this.hn[0]=0;\n result = this.huft_build(c, 0, 19, 19, null, null, tb, bb, hp, this.hn, this.v);\n\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed dynamic bit lengths tree\";\n }\n else if(result == Z_BUF_ERROR || bb[0] == 0){\n z.msg = \"incomplete dynamic bit lengths tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n}\n\nInfTree.prototype.inflate_trees_dynamic = function(nl, nd, c, bl, bd, tl, td, hp, z) {\n var result;\n\n // build literal/length tree\n this.initWorkArea(288);\n this.hn[0]=0;\n result = this.huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, this.hn, this.v);\n if (result != Z_OK || bl[0] == 0){\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed literal/length tree\";\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"incomplete literal/length tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n // build distance tree\n this.initWorkArea(288);\n result = this.huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, this.hn, this.v);\n\n if (result != Z_OK || (bd[0] == 0 && nl > 257)){\n if (result == Z_DATA_ERROR){\n z.msg = \"oversubscribed distance tree\";\n }\n else if (result == Z_BUF_ERROR) {\n z.msg = \"incomplete distance tree\";\n result = Z_DATA_ERROR;\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"empty distance tree with lengths\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n return Z_OK;\n}\n/*\n static int inflate_trees_fixed(int[] bl, //literal desired/actual bit depth\n int[] bd, //distance desired/actual bit depth\n int[][] tl,//literal/length tree result\n int[][] td,//distance tree result\n ZStream z //for memory allocation\n\t\t\t\t ){\n\n*/\n\nfunction inflate_trees_fixed(bl, bd, tl, td, z) {\n bl[0]=fixed_bl;\n bd[0]=fixed_bd;\n tl[0]=fixed_tl;\n td[0]=fixed_td;\n return Z_OK;\n}\n\nInfTree.prototype.initWorkArea = function(vsize){\n if(this.hn==null){\n this.hn=new Int32Array(1);\n this.v=new Int32Array(vsize);\n this.c=new Int32Array(BMAX+1);\n this.r=new Int32Array(3);\n this.u=new Int32Array(BMAX);\n this.x=new Int32Array(BMAX+1);\n }\n if(this.v.length 100) {\n arrayCopy_fast(new Uint8Array(src.buffer, src.byteOffset + srcOffset, count), dest, destOffset);\n } else {\n arrayCopy_slow(src, srcOffset, dest, destOffset, count);\n }\n\n}\n\nfunction arrayCopy_slow(src, srcOffset, dest, destOffset, count) {\n\n // dlog('_slow call: srcOffset=' + srcOffset + '; destOffset=' + destOffset + '; count=' + count);\n\n for (var i = 0; i < count; ++i) {\n dest[destOffset + i] = src[srcOffset + i];\n }\n}\n\nfunction arrayCopy_fast(src, dest, destOffset) {\n dest.set(src, destOffset);\n}\n\n\n // largest prime smaller than 65536\nvar ADLER_BASE=65521;\n // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1\nvar ADLER_NMAX=5552;\n\nfunction adler32(adler, /* byte[] */ buf, index, len){\n if(buf == null){ return 1; }\n\n var s1=adler&0xffff;\n var s2=(adler>>16)&0xffff;\n var k;\n\n while(len > 0) {\n k=len=16){\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n k-=16;\n }\n if(k!=0){\n do{\n s1+=buf[index++]&0xff; s2+=s1;\n }\n while(--k!=0);\n }\n s1%=ADLER_BASE;\n s2%=ADLER_BASE;\n }\n return (s2<<16)|s1;\n}\n\n\n\nfunction jszlib_inflate_buffer(buffer, start, length, afterUncOffset) {\n if (!start) {\n buffer = new Uint8Array(buffer);\n } else if (!length) {\n buffer = new Uint8Array(buffer, start, buffer.byteLength - start);\n } else {\n buffer = new Uint8Array(buffer, start, length);\n }\n\n var z = new ZStream();\n z.inflateInit(DEF_WBITS, true);\n z.next_in = buffer;\n z.next_in_index = 0;\n z.avail_in = buffer.length;\n\n var oBlockList = [];\n var totalSize = 0;\n while (true) {\n var obuf = new Uint8Array(32000);\n z.next_out = obuf;\n z.next_out_index = 0;\n z.avail_out = obuf.length;\n var status = z.inflate(Z_NO_FLUSH);\n if (status != Z_OK && status != Z_STREAM_END && status != Z_BUF_ERROR) {\n throw z.msg;\n }\n if (z.avail_out != 0) {\n var newob = new Uint8Array(obuf.length - z.avail_out);\n arrayCopy(obuf, 0, newob, 0, (obuf.length - z.avail_out));\n obuf = newob;\n }\n oBlockList.push(obuf);\n totalSize += obuf.length;\n if (status == Z_STREAM_END || status == Z_BUF_ERROR) {\n break;\n }\n }\n\n if (afterUncOffset) {\n afterUncOffset[0] = (start || 0) + z.next_in_index;\n }\n\n if (oBlockList.length == 1) {\n return oBlockList[0].buffer;\n } else {\n var out = new Uint8Array(totalSize);\n var cursor = 0;\n for (var i = 0; i < oBlockList.length; ++i) {\n var b = oBlockList[i];\n arrayCopy(b, 0, out, cursor, b.length);\n cursor += b.length;\n }\n return out.buffer;\n }\n}\n\nreturn {\n inflateBuffer: jszlib_inflate_buffer,\n arrayCopy: arrayCopy\n };\n}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(jQuery) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// jQuery Ajax Native Plugin\n\n// (c) 2015 Tarik Zakaria Benmerar, Acigna Inc.\n// jQuery Ajax Native Plugin may be freely distributed under the MIT license.\n(function (root, factory) {\n if (true) {\n // AMD. Register as an anonymous module.\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals (root is window)\n factory(root.jQuery);\n }\n}(this, function ( $ ) {\n var ajaxSettings = $.ajaxSettings;\n ajaxSettings.responseFields.native = 'responseNative';\n ajaxSettings.converters[ '* native' ] = true;\n var support = {},\n xhrId = 0,\n xhrSuccessStatus = {\n // file protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE9\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrCallbacks = {},\n xhrSupported = jQuery.ajaxSettings.xhr();\n // Support: IE9\n // Open requests must be manually aborted on unload (#5280)\n if ( window.ActiveXObject ) {\n $( window ).on( \"unload\", function() {\n for ( var key in xhrCallbacks ) {\n xhrCallbacks[ key ]();\n }\n });\n }\n support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\n support.ajax = xhrSupported = !!xhrSupported;\n\n //Native Data Type Ajax Transport\n $.ajaxTransport('native', function ( options ) {\n var callback;\n // Cross domain only allowed if supported through XMLHttpRequest\n if ( support.cors || xhrSupported && !options.crossDomain ) {\n return {\n send: function( headers, complete ) {\n var i,\n xhr = options.xhr(),\n id = ++xhrId,\n responses = {};\n\n xhr.open( options.type, options.url, options.async, options.username, options.password );\n\n // Apply custom fields if provided\n if ( options.xhrFields ) {\n for ( i in options.xhrFields ) {\n xhr[ i ] = options.xhrFields[ i ];\n }\n }\n\n // Override mime type if needed\n if ( options.mimeType && xhr.overrideMimeType ) {\n xhr.overrideMimeType( options.mimeType );\n }\n\n // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n if ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n }\n\n // Set headers\n for ( i in headers ) {\n xhr.setRequestHeader( i, headers[ i ] );\n }\n\n // Callback\n callback = function( type ) {\n return function() {\n if ( callback ) {\n delete xhrCallbacks[ id ];\n callback = xhr.onload = xhr.onerror = null;\n\n if ( type === \"abort\" ) {\n xhr.abort();\n } else if ( type === \"error\" ) {\n complete(\n // file: protocol always yields status 0; see #8605, #14207\n xhr.status,\n xhr.statusText\n );\n } else {\n // The native response associated with the responseType\n // Stored in the xhr.response attribute (XHR2 Spec)\n if ( xhr.response ) {\n responses.native = xhr.response;\n }\n\n complete(\n xhrSuccessStatus[ xhr.status ] || xhr.status,\n xhr.statusText,\n responses,\n xhr.getAllResponseHeaders()\n );\n }\n }\n };\n };\n\n // Listen to events\n xhr.onload = callback();\n xhr.onerror = callback(\"error\");\n\n // Create the abort callback\n callback = xhrCallbacks[ id ] = callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send( options.hasContent && options.data || null );\n } catch ( e ) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if ( callback ) {\n throw e;\n }\n }\n },\n\n abort: function() {\n if ( callback ) {\n callback();\n }\n }\n };\n }\n });\n\n\n //$.getNative wrapper\n $.getNative = function ( url, callback ) {\n return $.ajax({\n dataType: 'native',\n url: url,\n xhrFields: {\n responseType: 'arraybuffer'\n },\n success: callback\n });\n }\n}));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseMvc = __webpack_require__(5);\n\nvar _baseMvc2 = _interopRequireDefault(_baseMvc);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class View to display a user's disk/storage usage\n * either as a progress bar representing the percentage of a quota used\n * or a simple text element displaying the human readable size used.\n * @name UserQuotaMeter\n * @augments Backbone.View\n */\nvar UserQuotaMeter = Backbone.View.extend(_baseMvc2.default.LoggableMixin).extend(\n/** @lends UserQuotaMeter.prototype */{\n _logNamespace: logNamespace,\n\n /** Defaults for optional settings passed to initialize */\n options: {\n warnAtPercent: 85,\n errorAtPercent: 100\n },\n\n /** Set up, accept options, and bind events */\n initialize: function initialize(options) {\n this.log(this + \".initialize:\", options);\n _.extend(this.options, options);\n\n //this.bind( 'all', function( event, data ){ this.log( this + ' event:', event, data ); }, this );\n this.listenTo(this.model, \"change:quota_percent change:total_disk_usage\", this.render);\n },\n\n /** Re-load user model data from the api */\n update: function update(options) {\n this.log(this + \" updating user data...\", options);\n this.model.loadFromApi(this.model.get(\"id\"), options);\n return this;\n },\n\n /** Is the user over their quota (if there is one)?\n * @returns {Boolean} true if over quota, false if no quota or under quota\n */\n isOverQuota: function isOverQuota() {\n return this.model.get(\"quota_percent\") !== null && this.model.get(\"quota_percent\") >= this.options.errorAtPercent;\n },\n\n /** Render the meter when they have an applicable quota. Will render as a progress bar\n * with their percentage of that quota in text over the bar.\n * @fires quota:over when user is over quota (>= this.errorAtPercent)\n * @fires quota:under when user is under quota\n * @fires quota:under:approaching when user is >= this.warnAtPercent of their quota\n * @fires quota:under:ok when user is below this.warnAtPercent\n * @returns {jQuery} the rendered meter\n */\n _render_quota: function _render_quota() {\n var modelJson = this.model.toJSON();\n\n var //prevPercent = this.model.previous( 'quota_percent' ),\n percent = modelJson.quota_percent;\n\n var //meter = $( UserQuotaMeter.templates.quota( modelJson ) );\n $meter = $(this._templateQuotaMeter(modelJson));\n\n var $bar = $meter.find(\".progress-bar\");\n //this.log( this + '.rendering quota, percent:', percent, 'meter:', meter );\n\n // OVER QUOTA: color the quota bar and show the quota error message\n if (this.isOverQuota()) {\n //this.log( '\\t over quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-danger\");\n $meter.find(\".quota-meter-text\").css(\"color\", \"white\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:over\", modelJson);\n\n // APPROACHING QUOTA: color the quota bar\n } else if (percent >= this.options.warnAtPercent) {\n //this.log( '\\t approaching quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-warning\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:approaching\", modelJson);\n\n // otherwise, hide/don't use the msg box\n } else {\n $bar.attr(\"class\", \"progress-bar progress-bar-success\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:ok\", modelJson);\n }\n return $meter;\n },\n\n /** Render the meter when the user has NO applicable quota. Will render as text\n * showing the human readable sum storage their data is using.\n * @returns {jQuery} the rendered text\n */\n _render_usage: function _render_usage() {\n //var usage = $( UserQuotaMeter.templates.usage( this.model.toJSON() ) );\n var usage = $(this._templateUsage(this.model.toJSON()));\n this.log(this + \".rendering usage:\", usage);\n return usage;\n },\n\n /** Render either the quota percentage meter or the human readable disk usage\n * depending on whether the user model has quota info (quota_percent === null -> no quota)\n * @returns {Object} this UserQuotaMeter\n */\n render: function render() {\n //this.log( this + '.rendering' );\n var meterHtml = null;\n\n // no quota on server ('quota_percent' === null (can be valid at 0)), show usage instead\n this.log(this + \".model.quota_percent:\", this.model.get(\"quota_percent\"));\n if (this.model.get(\"quota_percent\") === null || this.model.get(\"quota_percent\") === undefined) {\n meterHtml = this._render_usage();\n\n // otherwise, render percent of quota (and warning, error)\n } else {\n meterHtml = this._render_quota();\n //TODO: add the original text for unregistered quotas\n //tooltip = \"Your disk quota is %s. You can increase your quota by registering a Galaxy account.\"\n }\n\n this.$el.html(meterHtml);\n this.$el.find(\".quota-meter-text\").tooltip();\n return this;\n },\n\n _templateQuotaMeter: function _templateQuotaMeter(data) {\n return ['
', '
', '
\" : \">\", (0, _localization2.default)(\"Using\"), \" \", data.quota_percent, \"%\", \"
\", \"
\"].join(\"\");\n },\n\n _templateUsage: function _templateUsage(data) {\n return ['
', '
', data.nice_total_disk_usage ? (0, _localization2.default)(\"Using \") + data.nice_total_disk_usage : \"\", \"
\", \"
\"].join(\"\");\n },\n\n toString: function toString() {\n return \"UserQuotaMeter(\" + this.model + \")\";\n }\n});\n\n//==============================================================================\nexports.default = {\n UserQuotaMeter: UserQuotaMeter\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// libs.bundled.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".bundled.js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 89);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 9e33f3005600f7d7eb1e","/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"
\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting
\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"
`\n )\n });\n modal.show({ backdrop: true });\n}\n\n// ============================================================================\nexport default {\n Modal: Modal,\n hide_modal: hide_modal,\n show_modal: show_modal,\n show_message: show_message,\n show_in_overlay: show_in_overlay\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/modal.js","/**\n * This is the primary galaxy tours definition, currently only used for\n * rendering a tour menu.\n */\n\nimport * as BootstrapTour from \"libs/bootstrap-tour\";\nvar gxy_root = typeof Galaxy === \"undefined\" ? \"/\" : Galaxy.root;\n\nvar tourpage_template = `

Galaxy Tours

\n

This page presents a list of interactive tours available on this Galaxy server.\nSelect any tour to get started (and remember, you can click 'End Tour' at any time).

\n\n
\n <% _.each(tourtagorder, function(tag) { %>\n \n <% }); %>\n
\n\n<% _.each(tourtagorder, function(tourtagkey) { %>\n
\" style=\"display: block;\">\n <% var tourtag = tourtags[tourtagkey]; %>\n

\n <%- tourtag.name %>\n

\n
\n
\n<% }); %>`;\n\nvar tour_opts = {\n storage: window.sessionStorage,\n onEnd: function() {\n sessionStorage.removeItem(\"activeGalaxyTour\");\n },\n delay: 150, // Attempts to make it look natural\n orphan: true\n};\n\nvar hooked_tour_from_data = data => {\n _.each(data.steps, step => {\n if (step.preclick) {\n step.onShow = () => {\n _.each(step.preclick, preclick => {\n // TODO: click delay between clicks\n $(preclick).click();\n });\n };\n }\n if (step.postclick) {\n step.onHide = () => {\n _.each(step.postclick, postclick => {\n // TODO: click delay between clicks\n $(postclick).click();\n });\n };\n }\n if (step.textinsert) {\n // Have to manually trigger a change here, for some\n // elements which have additional logic, like the\n // upload input box\n step.onShown = () => {\n $(step.element)\n .val(step.textinsert)\n .trigger(\"change\");\n };\n }\n });\n return data;\n};\n\nvar TourItem = Backbone.Model.extend({\n urlRoot: `${gxy_root}api/tours`\n});\n\nvar Tours = Backbone.Collection.extend({\n url: `${gxy_root}api/tours`,\n model: TourItem\n});\n\nvar giveTour = tour_id => {\n var url = `${gxy_root}api/tours/${tour_id}`;\n $.getJSON(url, data => {\n // Set hooks for additional click and data entry actions.\n var tourdata = hooked_tour_from_data(data);\n sessionStorage.setItem(\"activeGalaxyTour\", JSON.stringify(data));\n // Store tour steps in sessionStorage to easily persist w/o hackery.\n var tour = new Tour(\n _.extend(\n {\n steps: tourdata.steps\n },\n tour_opts\n )\n );\n // Always clean restart, since this is a new, explicit giveTour execution.\n tour.init();\n tour.goTo(0);\n tour.restart();\n });\n};\n\nvar ToursView = Backbone.View.extend({\n title: \"Tours\",\n // initialize\n initialize: function() {\n var self = this;\n this.setElement(\"
\");\n this.model = new Tours();\n this.model.fetch({\n success: function() {\n self.render();\n },\n error: function() {\n // Do something.\n console.error(\"Failed to fetch tours.\");\n }\n });\n },\n\n render: function() {\n var tpl = _.template(tourpage_template);\n\n var tourtags = {};\n _.each(this.model.models, tour => {\n if (tour.attributes.tags === null) {\n if (tourtags.Untagged === undefined) {\n tourtags.Untagged = { name: \"Untagged\", tours: [] };\n }\n tourtags.Untagged.tours.push(tour);\n } else {\n _.each(tour.attributes.tags, tag => {\n tag = tag.charAt(0).toUpperCase() + tag.slice(1);\n if (tourtags[tag] === undefined) {\n tourtags[tag] = { name: tag, tours: [] };\n }\n tourtags[tag].tours.push(tour);\n });\n }\n });\n var tourtagorder = Object.keys(tourtags).sort();\n\n this.$el\n .html(\n tpl({\n tours: this.model.models,\n tourtags: tourtags,\n tourtagorder: tourtagorder\n })\n )\n .on(\"click\", \".tourItem\", function(e) {\n e.preventDefault();\n giveTour($(this).data(\"tour.id\"));\n })\n .on(\"click\", \".tag-selector-button\", e => {\n var elem = $(e.target);\n var display = \"block\";\n var tag = elem.attr(\"tag-selector-button\");\n\n elem.toggleClass(\"btn-primary\");\n elem.toggleClass(\"btn-secondary\");\n\n if (elem.hasClass(\"btn-secondary\")) {\n display = \"none\";\n }\n $(`div[tag='${tag}']`).css({ display: display });\n });\n }\n});\n\nexport default {\n ToursView: ToursView,\n hooked_tour_from_data: hooked_tour_from_data,\n tour_opts: tour_opts,\n giveTour: giveTour\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/tours.js","//==============================================================================\nvar LOGGING_FNS = [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"metric\"];\n/** adds logging functions to an obj.prototype (or obj directly) adding a namespace for filtering\n * @param {Object} obj\n * @param {String} namespace\n */\nfunction addLogging(obj, namespace) {\n var addTo = obj.prototype !== undefined ? obj.prototype : obj;\n if (namespace !== undefined) {\n addTo._logNamespace = namespace;\n }\n //yagni?: without this, may not capture Galaxy.config.debug and add Galaxy.logger properly\n // if( window.Galaxy && window.Galaxy.config && window.Galaxy.config.debug ){\n // addTo.logger = window.Galaxy.logger;\n // }\n\n // give the object each\n LOGGING_FNS.forEach(logFn => {\n addTo[logFn] = function() {\n if (!this.logger) {\n return undefined;\n }\n if (this.logger.emit) {\n return this.logger.emit(logFn, this._logNamespace, arguments);\n }\n if (this.logger[logFn]) {\n //TODO:! there has to be a way to get the lineno/file into this\n // http://stackoverflow.com/questions/13815640/a-proper-wrapper-for-console-log-with-correct-line-number\n // http://www.paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\n return this.logger[logFn].apply(this.logger, arguments);\n }\n return undefined;\n };\n });\n return obj;\n}\n\n//==============================================================================\nexport default addLogging;\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/utils/add-logging.js","import * as _ from \"libs/underscore\";\nimport * as Backbone from \"libs/backbone\";\nimport baseMVC from \"mvc/base-mvc\";\nimport _l from \"utils/localization\";\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class Model for a Galaxy user (including anonymous users).\n * @name User\n */\nvar User = Backbone.Model.extend(baseMVC.LoggableMixin).extend(\n /** @lends User.prototype */ {\n _logNamespace: logNamespace,\n\n /** API location for this resource */\n urlRoot: function() {\n return `${Galaxy.root}api/users`;\n },\n\n /** Model defaults\n * Note: don't check for anon-users with the username as the default is '(anonymous user)'\n * a safer method is if( !user.get( 'email' ) ) -> anon user\n */\n defaults: /** @lends User.prototype */ {\n id: null,\n username: `(${_l(\"anonymous user\")})`,\n email: \"\",\n total_disk_usage: 0,\n nice_total_disk_usage: \"\",\n quota_percent: null,\n is_admin: false\n },\n\n /** Set up and bind events\n * @param {Object} data Initial model data.\n */\n initialize: function(data) {\n this.log(\"User.initialize:\", data);\n\n this.on(\"loaded\", function(model, resp) {\n this.log(`${this} has loaded:`, model, resp);\n });\n this.on(\"change\", function(model, data) {\n this.log(`${this} has changed:`, model, data.changes);\n });\n },\n\n isAnonymous: function() {\n return !this.get(\"email\");\n },\n\n isAdmin: function() {\n return this.get(\"is_admin\");\n },\n\n /** Load a user with the API using an id.\n * If getting an anonymous user or no access to a user id, pass the User.CURRENT_ID_STR\n * (e.g. 'current') and the API will return the current transaction's user data.\n * @param {String} idOrCurrent encoded user id or the User.CURRENT_ID_STR\n * @param {Object} options hash to pass to Backbone.Model.fetch. Can contain success, error fns.\n * @fires loaded when the model has been loaded from the API, passing the newModel and AJAX response.\n */\n loadFromApi: function(idOrCurrent, options) {\n idOrCurrent = idOrCurrent || User.CURRENT_ID_STR;\n\n options = options || {};\n var model = this;\n var userFn = options.success;\n\n /** @ignore */\n options.success = (newModel, response) => {\n model.trigger(\"loaded\", newModel, response);\n if (userFn) {\n userFn(newModel, response);\n }\n };\n\n // requests for the current user must have a sep. constructed url (fetch don't work, ma)\n if (idOrCurrent === User.CURRENT_ID_STR) {\n options.url = `${this.urlRoot}/${User.CURRENT_ID_STR}`;\n }\n return Backbone.Model.prototype.fetch.call(this, options);\n },\n\n /** Clears all data from the sessionStorage.\n */\n clearSessionStorage: function() {\n for (var key in sessionStorage) {\n //TODO: store these under the user key so we don't have to do this\n // currently only history\n if (key.indexOf(\"history:\") === 0) {\n sessionStorage.removeItem(key);\n } else if (key === \"history-panel\") {\n sessionStorage.removeItem(key);\n }\n }\n },\n\n /** string representation */\n toString: function() {\n var userInfo = [this.get(\"username\")];\n if (this.get(\"id\")) {\n userInfo.unshift(this.get(\"id\"));\n userInfo.push(this.get(\"email\"));\n }\n return `User(${userInfo.join(\":\")})`;\n }\n }\n);\n\n// string to send to tell server to return this transaction's user (see api/users.py)\nUser.CURRENT_ID_STR = \"current\";\n\n// class method to load the current user via the api and return that model\nUser.getCurrentUserFromApi = options => {\n var currentUser = new User();\n currentUser.loadFromApi(User.CURRENT_ID_STR, options);\n return currentUser;\n};\n\n// (stub) collection for users (shouldn't be common unless admin UI)\nvar UserCollection = Backbone.Collection.extend(baseMVC.LoggableMixin).extend({\n model: User,\n urlRoot: function() {\n return `${Galaxy.root}api/users`;\n }\n //logger : console,\n});\n\n//==============================================================================\nexport default {\n User: User\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/user/user-model.js","/** Frame view */\nvar FrameView = Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n this.model = (options && options.model) || new Backbone.Model(options);\n this.setElement($(\"
\").addClass(\"corner frame\"));\n this.$el\n .append(\n $(\"
\")\n .addClass(\"f-header corner\")\n .append($(\"
\").addClass(\"f-title\"))\n .append(\n $(\"
\")\n .addClass(\"f-icon f-close fa fa-close\")\n .tooltip({\n title: \"Close\",\n placement: \"bottom\"\n })\n )\n )\n .append($(\"
\").addClass(\"f-content\"))\n .append(\n $(\"
\")\n .addClass(\"f-resize f-icon corner fa fa-expand\")\n .tooltip({ title: \"Resize\" })\n )\n .append($(\"
\").addClass(\"f-cover\"));\n this.$header = this.$(\".f-header\");\n this.$title = this.$(\".f-title\");\n this.$content = this.$(\".f-content\");\n this.render();\n this.listenTo(this.model, \"change\", this.render, this);\n },\n\n render: function() {\n var self = this;\n var options = this.model.attributes;\n this.$title.html(options.title || \"\");\n this.$header.find(\".f-icon-left\").remove();\n _.each(options.menu, option => {\n var $option = $(\"
\")\n .addClass(\"f-icon-left\")\n .addClass(option.icon);\n if (_.isFunction(option.disabled) && option.disabled()) {\n $option.attr(\"disabled\", true);\n } else {\n $option\n .on(\"click\", () => {\n option.onclick(self);\n })\n .tooltip({\n title: option.tooltip,\n placement: \"bottom\"\n });\n }\n self.$header.append($option);\n });\n if (options.url) {\n this.$content.html(\n $(\"`;\n\n var header_template =\n '' +\n '' +\n '';\n\n var frame_height = 350;\n var frame_width = 600;\n var class_names = \"ui-modal chat-modal\";\n\n // deletes the chat modal if already present and create one\n if ($(\".chat-modal\").length > 0) {\n $(\".chat-modal\").remove();\n }\n // creates a modal\n GenericNavView.modal = new Modal.View({\n body: iframe_template,\n height: frame_height,\n width: frame_width,\n closing_events: true,\n title_separator: false,\n cls: class_names\n });\n\n // shows modal\n GenericNavView.modal.show();\n $el_chat_modal_header = $(\".chat-modal .modal-header\");\n $el_chat_modal_body = $(\".chat-modal .modal-body\");\n // adjusts the css of bootstrap modal for chat\n $el_chat_modal_header.addClass(\"modal-header-body\");\n $el_chat_modal_body.addClass(\"modal-header-body\");\n $el_chat_modal_header.find(\"h4\").remove();\n $el_chat_modal_header.removeAttr(\"min-height padding border\");\n $el_chat_modal_header.append(header_template);\n // click event of the close button for chat\n $(\".close-modal\").click(e => {\n $(\".chat-modal\").css(\"display\", \"none\");\n });\n // click event of expand and compress icon\n $(\".expand-compress-modal\").click(e => {\n if ($(\".expand-compress-modal\").hasClass(\"fa-expand\")) {\n $(\".chat-modal .modal-dialog\").width(\"1000px\");\n $(\".chat-modal .modal-body\").height(\"575px\");\n $(\".expand-compress-modal\")\n .removeClass(\"fa-expand\")\n .addClass(\"fa-compress\");\n $(\".expand-compress-modal\").attr(\"title\", \"Minimize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"96.2%\");\n } else {\n $(\".chat-modal .modal-dialog\").width(`${frame_width}px`);\n $(\".chat-modal .modal-body\").height(`${frame_height}px`);\n $(\".expand-compress-modal\")\n .removeClass(\"fa-compress\")\n .addClass(\"fa-expand\");\n $(\".expand-compress-modal\").attr(\"title\", \"Maximize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"93.2%\");\n }\n });\n return this;\n },\n\n /**renders the chat icon as a nav item*/\n render: function() {\n var self = this;\n var navItem = {};\n navItem = {\n id: \"show-chat-online\",\n icon: \"fa-comment-o\",\n tooltip: \"Chat online\",\n visible: false,\n onclick: self.makeModalIframe\n };\n return navItem;\n }\n});\n\nexport default {\n GenericNavView: GenericNavView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/generic-nav-view.js","/** Frame manager uses the ui-frames to create the scratch book masthead icon and functionality **/\nimport Frames from \"mvc/ui/ui-frames\";\nimport DATA from \"mvc/dataset/data\";\nimport visualization from \"viz/visualization\";\nimport trackster from \"viz/trackster\";\nimport _l from \"utils/localization\";\nexport default Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n options = options || {};\n this.frames = new Frames.View({ visible: false });\n this.setElement(this.frames.$el);\n this.buttonActive = options.collection.add({\n id: \"enable-scratchbook\",\n icon: \"fa-th\",\n tooltip: _l(\"Enable/Disable Scratchbook\"),\n onclick: function() {\n self.active = !self.active;\n self.buttonActive.set({\n toggle: self.active,\n show_note: self.active,\n note_cls: self.active && \"fa fa-check\"\n });\n !self.active && self.frames.hide();\n },\n onbeforeunload: function() {\n if (self.frames.length() > 0) {\n return `You opened ${self.frames.length()} frame(s) which will be lost.`;\n }\n }\n });\n this.buttonLoad = options.collection.add({\n id: \"show-scratchbook\",\n icon: \"fa-eye\",\n tooltip: _l(\"Show/Hide Scratchbook\"),\n show_note: true,\n visible: false,\n onclick: function(e) {\n self.frames.visible ? self.frames.hide() : self.frames.show();\n }\n });\n this.frames\n .on(\"add remove\", function() {\n this.visible && this.length() == 0 && this.hide();\n self.buttonLoad.set({\n note: this.length(),\n visible: this.length() > 0\n });\n })\n .on(\"show hide \", function() {\n self.buttonLoad.set({\n toggle: this.visible,\n icon: (this.visible && \"fa-eye\") || \"fa-eye-slash\"\n });\n });\n this.history_cache = {};\n },\n\n /** Add a dataset to the frames */\n addDataset: function(dataset_id) {\n var self = this;\n var current_dataset = null;\n if (Galaxy && Galaxy.currHistoryPanel) {\n var history_id = Galaxy.currHistoryPanel.collection.historyId;\n this.history_cache[history_id] = {\n name: Galaxy.currHistoryPanel.model.get(\"name\"),\n dataset_ids: []\n };\n Galaxy.currHistoryPanel.collection.each(model => {\n !model.get(\"deleted\") &&\n model.get(\"visible\") &&\n self.history_cache[history_id].dataset_ids.push(model.get(\"id\"));\n });\n }\n var _findDataset = (dataset, offset) => {\n if (dataset) {\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details && history_details.dataset_ids) {\n var dataset_list = history_details.dataset_ids;\n var pos = dataset_list.indexOf(dataset.get(\"id\"));\n if (pos !== -1 && pos + offset >= 0 && pos + offset < dataset_list.length) {\n return dataset_list[pos + offset];\n }\n }\n }\n };\n var _loadDatasetOffset = (dataset, offset, frame) => {\n var new_dataset_id = _findDataset(dataset, offset);\n if (new_dataset_id) {\n self._loadDataset(new_dataset_id, (new_dataset, config) => {\n current_dataset = new_dataset;\n frame.model.set(config);\n });\n } else {\n frame.model.trigger(\"change\");\n }\n };\n this._loadDataset(dataset_id, (dataset, config) => {\n current_dataset = dataset;\n self.add(\n _.extend(\n {\n menu: [\n {\n icon: \"fa fa-chevron-circle-left\",\n tooltip: \"Previous in History\",\n onclick: function(frame) {\n _loadDatasetOffset(current_dataset, -1, frame);\n },\n disabled: function() {\n return !_findDataset(current_dataset, -1);\n }\n },\n {\n icon: \"fa fa-chevron-circle-right\",\n tooltip: \"Next in History\",\n onclick: function(frame) {\n _loadDatasetOffset(current_dataset, 1, frame);\n },\n disabled: function() {\n return !_findDataset(current_dataset, 1);\n }\n }\n ]\n },\n config\n )\n );\n });\n },\n\n _loadDataset: function(dataset_id, callback) {\n var self = this;\n var dataset = new DATA.Dataset({ id: dataset_id });\n $.when(dataset.fetch()).then(() => {\n var is_tabular = _.find(\n [\"tabular\", \"interval\"],\n data_type => dataset.get(\"data_type\").indexOf(data_type) !== -1\n );\n var title = dataset.get(\"name\");\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details) {\n title = `${history_details.name}: ${title}`;\n }\n callback(\n dataset,\n is_tabular\n ? {\n title: title,\n url: null,\n content: DATA.createTabularDatasetChunkedView({\n model: new DATA.TabularDataset(dataset.toJSON()),\n embedded: true,\n height: \"100%\"\n }).$el\n }\n : {\n title: title,\n url: `${Galaxy.root}datasets/${dataset_id}/display/?preview=True`,\n content: null\n }\n );\n });\n },\n\n /** Add a trackster visualization to the frames. */\n addTrackster: function(viz_id) {\n var self = this;\n var viz = new visualization.Visualization({ id: viz_id });\n $.when(viz.fetch()).then(() => {\n var ui = new trackster.TracksterUI(Galaxy.root);\n\n // Construct frame config based on dataset's type.\n var frame_config = {\n title: viz.get(\"name\"),\n type: \"other\",\n content: function(parent_elt) {\n // Create view config.\n var view_config = {\n container: parent_elt,\n name: viz.get(\"title\"),\n id: viz.id,\n // FIXME: this will not work with custom builds b/c the dbkey needed to be encoded.\n dbkey: viz.get(\"dbkey\"),\n stand_alone: false\n };\n\n var latest_revision = viz.get(\"latest_revision\");\n var drawables = latest_revision.config.view.drawables;\n\n // Set up datasets in drawables.\n _.each(drawables, d => {\n d.dataset = {\n hda_ldda: d.hda_ldda,\n id: d.dataset_id\n };\n });\n view = ui.create_visualization(\n view_config,\n latest_revision.config.viewport,\n latest_revision.config.view.drawables,\n latest_revision.config.bookmarks,\n false\n );\n }\n };\n self.add(frame_config);\n });\n },\n\n /** Add and display a new frame/window based on options. */\n add: function(options) {\n if (options.target == \"_blank\") {\n window.open(options.url);\n } else if (options.target == \"_top\" || options.target == \"_parent\" || options.target == \"_self\") {\n window.location = options.url;\n } else if (!this.active || options.noscratchbook) {\n var $galaxy_main = $(window.parent.document).find(\"#galaxy_main\");\n if (options.target == \"galaxy_main\" || options.target == \"center\") {\n if ($galaxy_main.length === 0) {\n window.location = `${options.url + (options.url.indexOf(\"?\") == -1 ? \"?\" : \"&\")}use_panels=True`;\n } else {\n $galaxy_main.attr(\"src\", options.url);\n }\n } else window.location = options.url;\n } else {\n this.frames.add(options);\n }\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/scratchbook.js","// dependencies\n\n// grid model\nexport default Backbone.Model.extend({\n defaults: {\n url_base: \"\",\n async: false,\n async_ops: [],\n categorical_filters: [],\n filters: {},\n sort_key: null,\n show_item_checkboxes: false,\n advanced_search: false,\n cur_page: 1,\n num_pages: 1,\n operation: undefined,\n item_ids: undefined\n },\n\n /**\n * Return true if operation can be done asynchronously.\n */\n can_async_op: function(op) {\n return _.indexOf(this.attributes.async_ops, op) !== -1;\n },\n\n /**\n * Add filtering criterion.\n */\n add_filter: function(key, value, append) {\n // Update URL arg with new condition.\n if (append) {\n // Update or append value.\n var cur_val = this.attributes.filters[key];\n\n var new_val;\n if (cur_val === null || cur_val === undefined) {\n new_val = value;\n } else if (typeof cur_val == \"string\") {\n if (cur_val == \"All\" || cur_val == value) {\n new_val = value;\n } else {\n // Replace string with array.\n var values = [];\n values[0] = cur_val;\n values[1] = value;\n new_val = values;\n }\n } else {\n // Current value is an array.\n new_val = cur_val;\n if (new_val.indexOf(value) === -1) {\n new_val.push(value);\n }\n }\n this.attributes.filters[key] = new_val;\n } else {\n // Replace value.\n this.attributes.filters[key] = value;\n }\n },\n\n /**\n * Remove filtering criterion.\n */\n remove_filter: function(key, condition) {\n var cur_val = this.attributes.filters[key];\n if (cur_val === null || cur_val === undefined) {\n return false;\n }\n\n if (typeof cur_val === \"string\") {\n // overwrite/remove condition.\n this.attributes.filters[key] = \"\";\n } else {\n // filter contains an array of conditions.\n var condition_index = _.indexOf(cur_val, condition);\n if (condition_index !== -1) {\n cur_val[condition_index] = \"\";\n }\n }\n },\n\n /**\n * Returns URL data for obtaining a new grid.\n */\n get_url_data: function() {\n var url_data = {\n async: this.attributes.async,\n sort: this.attributes.sort_key,\n page: this.attributes.cur_page,\n show_item_checkboxes: this.attributes.show_item_checkboxes,\n advanced_search: this.attributes.advanced_search\n };\n\n // Add operation, item_ids only if they have values.\n if (this.attributes.operation) {\n url_data.operation = this.attributes.operation;\n }\n if (this.attributes.item_ids) {\n url_data.id = this.attributes.item_ids;\n }\n\n // Add filter arguments to data, placing \"f-\" in front of all arguments.\n var self = this;\n _.each(_.pairs(self.attributes.filters), k => {\n url_data[`f-${k[0]}`] = k[1];\n });\n return url_data;\n },\n\n // Return URL for obtaining a new grid\n get_url: function(args) {\n return `${this.get(\"url_base\")}?${$.param(this.get_url_data())}&${$.param(args)}`;\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/grid/grid-model.js","// dependencies\nimport Utils from \"utils/utils\";\n// grid view templates\nexport default {\n // template\n grid: function(options) {\n var tmpl = \"\";\n if (options.embedded) {\n tmpl = this.grid_header(options) + this.grid_table(options);\n } else {\n tmpl = `
${this.grid_header(\n options\n )}
${this.grid_table(\n options\n )}`;\n }\n\n // add info text\n if (options.info_text) {\n tmpl += `
${options.info_text}
`;\n }\n\n // return\n return tmpl;\n },\n\n // template\n grid_table: function(options) {\n return (\n '
' +\n '' +\n '' +\n '' +\n '' +\n \"
\" +\n \"
\"\n );\n },\n\n // template\n grid_header: function(options) {\n var tmpl = '
\";\n\n // return template\n return tmpl;\n },\n\n // template\n header: function(options) {\n // start\n var tmpl = \"\";\n\n // add checkbox\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n if (options.items.length > 0) {\n tmpl +=\n '' +\n '';\n }\n tmpl += \"\";\n }\n\n // create header elements\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.visible) {\n tmpl += ``;\n if (column.href) {\n tmpl += `${column.label}`;\n } else {\n tmpl += column.label;\n }\n tmpl += `${column.extra}`;\n }\n }\n\n // finalize\n tmpl += \"\";\n\n // return template\n return tmpl;\n },\n\n // template\n body: function(options) {\n // initialize\n var tmpl = \"\";\n var num_rows_rendered = 0;\n var items_length = options.items.length;\n\n // empty grid?\n if (items_length == 0) {\n // No results.\n tmpl += 'No Items';\n num_rows_rendered = 1;\n }\n\n // create rows\n for (var i in options.items) {\n // encode ids\n var item = options.items[i];\n var encoded_id = item.encode_id;\n var popupmenu_id = `grid-${i}-popup`;\n\n // Tag current\n tmpl += \"\";\n\n // Item selection column\n if (options.show_item_checkboxes) {\n tmpl += ``;\n }\n\n // Data columns\n for (var j in options.columns) {\n var column = options.columns[j];\n if (column.visible) {\n // Nowrap\n var nowrap = \"\";\n if (column.nowrap) {\n nowrap = 'style=\"white-space:nowrap;\"';\n }\n\n // get column settings\n var column_settings = item.column_config[column.label];\n\n // load attributes\n var link = column_settings.link;\n var value = column_settings.value;\n var target = column_settings.target;\n\n // unescape value\n if (jQuery.type(value) === \"string\") {\n value = value.replace(/\\/\\//g, \"/\");\n }\n\n // Attach popup menu?\n var id = \"\";\n var cls = \"\";\n if (column.attach_popup) {\n id = `grid-${i}-popup`;\n cls = \"menubutton\";\n if (link != \"\") {\n cls += \" split\";\n }\n cls += \" popup\";\n }\n\n // Check for row wrapping\n tmpl += ``;\n\n // Link\n if (link) {\n if (options.operations.length != 0) {\n tmpl += `
`;\n }\n tmpl += `${value}`;\n if (options.operations.length != 0) {\n tmpl += \"
\";\n }\n } else {\n tmpl += `
`;\n }\n tmpl += \"\";\n }\n }\n tmpl += \"\";\n num_rows_rendered++;\n }\n return tmpl;\n },\n\n // template\n footer: function(options) {\n // create template string\n var tmpl = \"\";\n\n // paging\n if (options.use_paging && options.num_pages > 1) {\n // get configuration\n var num_page_links = options.num_page_links;\n var cur_page_num = options.cur_page_num;\n var num_pages = options.num_pages;\n\n // First pass on min page.\n var page_link_range = num_page_links / 2;\n var min_page = cur_page_num - page_link_range;\n var min_offset = 0;\n if (min_page <= 0) {\n // Min page is too low.\n min_page = 1;\n min_offset = page_link_range - (cur_page_num - min_page);\n }\n\n // Set max page.\n var max_range = page_link_range + min_offset;\n var max_page = cur_page_num + max_range;\n var max_offset;\n if (max_page <= num_pages) {\n // Max page is fine.\n max_offset = 0;\n } else {\n // Max page is too high.\n max_page = num_pages;\n // +1 to account for the +1 in the loop below.\n max_offset = max_range - (max_page + 1 - cur_page_num);\n }\n\n // Second and final pass on min page to add any unused\n // offset from max to min.\n if (max_offset != 0) {\n min_page -= max_offset;\n if (min_page < 1) {\n min_page = 1;\n }\n }\n\n // template header\n tmpl += '';\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n }\n tmpl += '' + '' + \"Page:\";\n\n if (min_page > 1) {\n tmpl +=\n '1 ...';\n }\n\n // create page urls\n for (var page_index = min_page; page_index < max_page + 1; page_index++) {\n if (page_index == options.cur_page_num) {\n tmpl += `${page_index}`;\n } else {\n tmpl += `${\n page_index\n }`;\n }\n }\n\n // show last page\n if (max_page < num_pages) {\n tmpl += `...${\n num_pages\n }`;\n }\n tmpl += \"\";\n\n // Show all link\n tmpl +=\n ' | Show All' +\n \"\" +\n \"\";\n }\n\n // Grid operations for multiple items.\n if (options.show_item_checkboxes) {\n // start template\n tmpl +=\n \"\" +\n '' +\n \"\" +\n '' +\n 'For selected items: ';\n\n // configure buttons for operations\n for (var i in options.operations) {\n var operation = options.operations[i];\n if (operation.allow_multiple) {\n tmpl += ` `;\n }\n }\n\n // finalize template\n tmpl += \"\" + \"\";\n }\n\n // count global operations\n var found_global = false;\n for (i in options.operations) {\n if (options.operations[i].global_operation) {\n found_global = true;\n break;\n }\n }\n\n // add global operations\n if (found_global) {\n tmpl += \"\" + '';\n for (i in options.operations) {\n var operation = options.operations[i];\n if (operation.global_operation) {\n tmpl += `${operation.label}`;\n }\n }\n tmpl += \"\" + \"\";\n }\n\n // add legend\n if (options.legend) {\n tmpl += `${options.legend}`;\n }\n\n // return\n return tmpl;\n },\n\n // template\n message: function(options) {\n var status = options.status;\n if ([\"success\", \"ok\"].indexOf(status) != -1) {\n status = \"done\";\n }\n return `

${_.escape(\n options.message\n )}

`;\n },\n\n // template\n grid_filters: function(options) {\n // get filters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n\n // show advanced search if flag set or if there are filters for advanced search fields\n var advanced_search_display = \"none\";\n if (options.advanced_search) {\n advanced_search_display = \"block\";\n }\n\n // identify columns with advanced filtering\n var show_advanced_search_link = false;\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n var column_key = column.key;\n var f_key = filters[column_key];\n var d_key = default_filter_dict[column_key];\n if (f_key && d_key && f_key != d_key) {\n advanced_search_display = \"block\";\n }\n show_advanced_search_link = true;\n }\n }\n\n // hide standard search if advanced is shown\n var standard_search_display = \"block\";\n if (advanced_search_display == \"block\") {\n standard_search_display = \"none\";\n }\n\n //\n // standard search\n //\n var tmpl = `
\" + \"\" + \"\" + \"\" + \"\" + \"
`;\n\n // add standard filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"standard\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize standard search\n tmpl += \"
\" + \"
\";\n\n // show advanced search link in standard display\n if (show_advanced_search_link) {\n tmpl += 'Advanced Search';\n }\n\n // finalize standard search display\n tmpl += \"
\" + \"
\";\n\n //\n // advanced search\n //\n tmpl += `
`;\n\n // add advanced filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize advanced search template\n tmpl += \"
Close Advanced Search
\" + \"
\";\n\n // return template\n return tmpl;\n },\n\n // template\n grid_column_filter: function(options, column) {\n // collect parameters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n var column_label = column.label;\n var column_key = column.key;\n if (column.filterable == \"advanced\") {\n column_label = column_label.toLowerCase();\n }\n\n // start\n var tmpl = \"\";\n\n if (column.filterable == \"advanced\") {\n tmpl += `${column_label}:`;\n }\n tmpl += '';\n if (column.is_text) {\n tmpl += `
`;\n // Carry forward filtering criteria with hidden inputs.\n for (i in options.columns) {\n var temp_column = options.columns[i];\n var filter_value = filters[temp_column.key];\n if (filter_value) {\n if (filter_value != \"All\") {\n if (temp_column.is_text) {\n filter_value = JSON.stringify(filter_value);\n }\n tmpl += ``;\n }\n }\n }\n // Print current filtering criteria and links to delete.\n tmpl += ``;\n\n // add filters\n var column_filter = filters[column_key];\n if (column_filter) {\n // identify type\n var type = jQuery.type(column_filter);\n\n // single filter value\n if (type == \"string\") {\n if (column_filter != \"All\") {\n // append template\n tmpl += this.filter_element(column_key, column_filter);\n }\n }\n\n // multiple filter values\n if (type == \"array\") {\n for (var i in column_filter) {\n // get filter\n var filter = column_filter[i];\n\n // copy filters and remove entry\n var params = column_filter;\n params = params.slice(i);\n\n // append template\n tmpl += this.filter_element(column_key, filter);\n }\n }\n }\n\n // close span\n tmpl += \"\";\n\n // Set value, size of search input field. Minimum size is 20 characters.\n var value = \"\";\n if (column.filterable == \"standard\") {\n value = column.label.toLowerCase();\n var size = value.length;\n if (size < 20) {\n size = 20;\n }\n // +4 to account for space after placeholder\n size = size + 4;\n }\n\n // print input field for column\n tmpl += `
`;\n } else {\n // filter criteria\n tmpl += ``;\n\n // add category filters\n var seperator = false;\n for (var cf_label in options.categorical_filters[column_key]) {\n // get category filter\n var cf = options.categorical_filters[column_key][cf_label];\n\n // each filter will have only a single argument, so get that single argument\n var cf_key = \"\";\n var cf_arg = \"\";\n for (var key in cf) {\n cf_key = key;\n cf_arg = cf[key];\n }\n\n // add seperator\n if (seperator) {\n tmpl += \" | \";\n }\n seperator = true;\n\n // add category\n var filter = filters[column_key];\n if (filter && cf[column_key] && filter == cf_arg) {\n tmpl += `${cf_label}`;\n } else {\n tmpl += `${\n cf_label\n }`;\n }\n }\n tmpl += \"\";\n }\n tmpl += \"\" + \"\";\n\n // return template\n return tmpl;\n },\n\n // template for filter items\n filter_element: function(filter_key, filter_value) {\n filter_value = Utils.sanitize(filter_value);\n return `${filter_value}`;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/grid/grid-template.js","import Utils from \"utils/utils\";\nvar View = Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n this.model =\n (options && options.model) ||\n new Backbone.Model({\n id: Utils.uid(),\n min: null,\n max: null,\n step: null,\n precise: false,\n split: 10000,\n value: null,\n onchange: function() {}\n }).set(options);\n\n // create new element\n this.setElement(this._template());\n this.$el.attr(\"id\", this.model.id);\n this.$text = this.$(\".ui-form-slider-text\");\n this.$slider = this.$(\".ui-form-slider-element\");\n\n // add text field event\n var pressed = [];\n this.$text\n .on(\"change\", function() {\n self.value($(this).val());\n })\n .on(\"keyup\", e => {\n pressed[e.which] = false;\n })\n .on(\"keydown\", function(e) {\n var v = e.which;\n pressed[v] = true;\n if (self.model.get(\"is_workflow\") && pressed[16] && v == 52) {\n self.value(\"$\");\n event.preventDefault();\n } else if (\n !(\n v == 8 ||\n v == 9 ||\n v == 13 ||\n v == 37 ||\n v == 39 ||\n (v >= 48 && v <= 57 && !pressed[16]) ||\n (v >= 96 && v <= 105) ||\n ((v == 190 || v == 110) &&\n $(this)\n .val()\n .indexOf(\".\") == -1 &&\n self.model.get(\"precise\")) ||\n ((v == 189 || v == 109) &&\n $(this)\n .val()\n .indexOf(\"-\") == -1) ||\n self._isParameter($(this).val()) ||\n pressed[91] ||\n pressed[17]\n )\n ) {\n event.preventDefault();\n }\n });\n\n // build slider, cannot be rebuild in render\n var opts = this.model.attributes;\n this.has_slider = opts.max !== null && opts.min !== null && opts.max > opts.min;\n var step = opts.step;\n if (!step) {\n if (opts.precise && this.has_slider) {\n step = (opts.max - opts.min) / opts.split;\n } else {\n step = 1.0;\n }\n }\n if (this.has_slider) {\n this.$text.addClass(\"ui-form-slider-left\");\n this.$slider.slider({ min: opts.min, max: opts.max, step: step }).on(\"slide\", (event, ui) => {\n self.value(ui.value);\n });\n } else {\n this.$slider.hide();\n }\n\n // add listeners\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n },\n\n render: function() {\n var value = this.model.get(\"value\");\n this.has_slider && this.$slider.slider(\"value\", value);\n value !== this.$text.val() && this.$text.val(value);\n },\n\n /** Set and return the current value */\n value: function(new_val) {\n var options = this.model.attributes;\n if (new_val !== undefined) {\n if (new_val !== null && new_val !== \"\" && !this._isParameter(new_val)) {\n isNaN(new_val) && (new_val = 0);\n !options.precise && (new_val = Math.round(new_val));\n options.max !== null && (new_val = Math.min(new_val, options.max));\n options.min !== null && (new_val = Math.max(new_val, options.min));\n }\n this.model.set(\"value\", new_val);\n this.model.trigger(\"change\");\n options.onchange(new_val);\n }\n return this.model.get(\"value\");\n },\n\n /** Return true if the field contains a workflow parameter i.e. $('name') */\n _isParameter: function(value) {\n return this.model.get(\"is_workflow\") && String(value).substring(0, 1) === \"$\";\n },\n\n /** Slider template */\n _template: function() {\n return (\n '
' +\n '' +\n '
' +\n \"
\"\n );\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-slider.js","/** This class creates/wraps a drill down element. */\nimport Utils from \"utils/utils\";\nimport Options from \"mvc/ui/ui-options\";\nvar View = Options.BaseIcons.extend({\n initialize: function(options) {\n options.type = options.display || \"checkbox\";\n options.multiple = options.type == \"checkbox\";\n Options.BaseIcons.prototype.initialize.call(this, options);\n },\n\n /** Set states for selected values */\n _setValue: function(new_value) {\n Options.BaseIcons.prototype._setValue.call(this, new_value);\n if (new_value !== undefined && new_value !== null && this.header_index) {\n var self = this;\n var values = $.isArray(new_value) ? new_value : [new_value];\n _.each(values, v => {\n var list = self.header_index[v];\n _.each(list, element => {\n self._setState(element, true);\n });\n });\n }\n },\n\n /** Expand/collapse a sub group */\n _setState: function(header_id, is_expanded) {\n var $button = this.$(`.button-${header_id}`);\n var $subgroup = this.$(`.subgroup-${header_id}`);\n $button.data(\"is_expanded\", is_expanded);\n if (is_expanded) {\n $subgroup.show();\n $button.removeClass(\"fa-plus-square\").addClass(\"fa-minus-square\");\n } else {\n $subgroup.hide();\n $button.removeClass(\"fa-minus-square\").addClass(\"fa-plus-square\");\n }\n },\n\n /** Template to create options tree */\n _templateOptions: function() {\n var self = this;\n this.header_index = {};\n\n // attach event handler\n function attach($el, header_id) {\n var $button = $el.find(`.button-${header_id}`);\n $button.on(\"click\", () => {\n self._setState(header_id, !$button.data(\"is_expanded\"));\n });\n }\n\n // recursive function which iterates through options\n function iterate($tmpl, options, header) {\n header = header || [];\n for (var i in options) {\n var level = options[i];\n var has_options = level.options && level.options.length > 0;\n var new_header = header.slice(0);\n self.header_index[level.value] = new_header.slice(0);\n var $group = $(\"
\");\n if (has_options) {\n var header_id = Utils.uid();\n var $button = $(\"\")\n .addClass(`button-${header_id}`)\n .addClass(\"ui-drilldown-button fa fa-plus-square\");\n var $subgroup = $(\"
\")\n .addClass(`subgroup-${header_id}`)\n .addClass(\"ui-drilldown-subgroup\");\n $group.append(\n $(\"
\")\n .append($button)\n .append(\n self._templateOption({\n label: level.name,\n value: level.value\n })\n )\n );\n new_header.push(header_id);\n iterate($subgroup, level.options, new_header);\n $group.append($subgroup);\n attach($group, header_id);\n } else {\n $group.append(\n self._templateOption({\n label: level.name,\n value: level.value\n })\n );\n }\n $tmpl.append($group);\n }\n }\n\n // iterate through options and create dom\n var $tmpl = $(\"
\");\n iterate($tmpl, this.model.get(\"data\"));\n return $tmpl;\n },\n\n /** Template for drill down view */\n _template: function() {\n return $(\"
\")\n .addClass(\"ui-options-list drilldown-container\")\n .attr(\"id\", this.model.id);\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-drilldown.js","/**\n * Top-level trackster code, used for creating/loading visualizations and user interface elements.\n */\n\n// global variables\nvar ui = null;\nvar view = null;\nvar browser_router = null;\n\n// trackster viewer\nimport * as _ from \"libs/underscore\";\nimport tracks from \"viz/trackster/tracks\";\nimport visualization from \"viz/visualization\";\nimport mod_icon_btn from \"mvc/ui/icon-button\";\nimport query_string from \"utils/query-string-parsing\";\nimport GridView from \"mvc/grid/grid-view\";\nimport mod_utils from \"utils/utils\";\nimport \"libs/jquery/jquery.event.drag\";\nimport \"libs/jquery/jquery.event.hover\";\nimport \"libs/jquery/jquery.mousewheel\";\nimport \"libs/jquery/jquery-ui\";\nimport \"libs/jquery/select2\";\nimport \"libs/farbtastic\";\nimport \"libs/jquery/jquery.form\";\nimport \"libs/jquery/jquery.rating\";\nimport \"ui/editable-text\";\n/**\n * Base Object/Model for inhertiance.\n */\nvar Base = function() {\n if (this.initialize) {\n this.initialize.apply(this, arguments);\n }\n};\nBase.extend = Backbone.Model.extend;\n\n/**\n * User interface controls for trackster\n */\nvar TracksterUI = Base.extend({\n initialize: function(baseURL) {\n mod_utils.cssLoadFile(\"static/style/jquery.rating.css\");\n mod_utils.cssLoadFile(\"static/style/autocomplete_tagging.css\");\n mod_utils.cssLoadFile(\"static/style/jquery-ui/smoothness/jquery-ui.css\");\n mod_utils.cssLoadFile(\"static/style/library.css\");\n mod_utils.cssLoadFile(\"static/style/trackster.css\");\n this.baseURL = baseURL;\n },\n\n /**\n * Save visualization, returning a Deferred object for the remote call to save.\n */\n save_viz: function() {\n // show dialog\n Galaxy.modal.show({ title: \"Saving...\", body: \"progress\" });\n\n // Save bookmarks.\n var bookmarks = [];\n $(\".bookmark\").each(function() {\n bookmarks.push({\n position: $(this)\n .children(\".position\")\n .text(),\n annotation: $(this)\n .children(\".annotation\")\n .text()\n });\n });\n\n // FIXME: give unique IDs to Drawables and save overview as ID.\n var overview_track_name = view.overview_drawable ? view.overview_drawable.config.get_value(\"name\") : null;\n\n var viz_config = {\n view: view.to_dict(),\n viewport: {\n chrom: view.chrom,\n start: view.low,\n end: view.high,\n overview: overview_track_name\n },\n bookmarks: bookmarks\n };\n\n // Make call to save visualization.\n return $.ajax({\n url: `${Galaxy.root}visualization/save`,\n type: \"POST\",\n dataType: \"json\",\n data: {\n id: view.vis_id,\n title: view.config.get_value(\"name\"),\n dbkey: view.dbkey,\n type: \"trackster\",\n vis_json: JSON.stringify(viz_config)\n }\n })\n .success(vis_info => {\n Galaxy.modal.hide();\n view.vis_id = vis_info.vis_id;\n view.has_changes = false;\n\n // Needed to set URL when first saving a visualization.\n window.history.pushState({}, \"\", vis_info.url + window.location.hash);\n })\n .error(() => {\n // show dialog\n Galaxy.modal.show({\n title: \"Could Not Save\",\n body: \"Could not save visualization. Please try again later.\",\n buttons: {\n Cancel: function() {\n Galaxy.modal.hide();\n }\n }\n });\n });\n },\n\n /**\n * Create button menu\n */\n createButtonMenu: function() {\n var self = this;\n\n var menu = mod_icon_btn.create_icon_buttons_menu(\n [\n {\n icon_class: \"plus-button\",\n title: \"Add tracks\",\n on_click: function() {\n visualization.select_datasets({ dbkey: view.dbkey }, new_tracks => {\n _.each(new_tracks, track => {\n view.add_drawable(tracks.object_from_template(track, view, view));\n });\n });\n }\n },\n {\n icon_class: \"block--plus\",\n title: \"Add group\",\n on_click: function() {\n view.add_drawable(\n new tracks.DrawableGroup(view, view, {\n name: \"New Group\"\n })\n );\n }\n },\n {\n icon_class: \"bookmarks\",\n title: \"Bookmarks\",\n on_click: function() {\n // HACK -- use style to determine if panel is hidden and hide/show accordingly.\n force_right_panel($(\"div#right\").css(\"right\") == \"0px\" ? \"hide\" : \"show\");\n }\n },\n {\n icon_class: \"globe\",\n title: \"Circster\",\n on_click: function() {\n window.location = `${self.baseURL}visualization/circster?id=${view.vis_id}`;\n }\n },\n {\n icon_class: \"disk--arrow\",\n title: \"Save\",\n on_click: function() {\n self.save_viz();\n }\n },\n {\n icon_class: \"cross-circle\",\n title: \"Close\",\n on_click: function() {\n self.handle_unsaved_changes(view);\n }\n }\n ],\n {\n tooltip_config: { placement: \"bottom\" }\n }\n );\n\n this.buttonMenu = menu;\n return menu;\n },\n\n /**\n * Add bookmark.\n */\n add_bookmark: function(position, annotation, editable) {\n // Create HTML.\n var bookmarks_container = $(\"#right .unified-panel-body\");\n\n var new_bookmark = $(\"
\")\n .addClass(\"bookmark\")\n .appendTo(bookmarks_container);\n\n var position_div = $(\"
\")\n .addClass(\"position\")\n .appendTo(new_bookmark);\n\n var position_link = $(\"\")\n .text(position)\n .appendTo(position_div)\n .click(() => {\n view.go_to(position);\n return false;\n });\n\n var annotation_div = $(\"
\")\n .text(annotation)\n .appendTo(new_bookmark);\n\n // If editable, enable bookmark deletion and annotation editing.\n if (editable) {\n var delete_icon_container = $(\"
\")\n .addClass(\"delete-icon-container\")\n .prependTo(new_bookmark)\n .click(() => {\n // Remove bookmark.\n new_bookmark.slideUp(\"fast\");\n new_bookmark.remove();\n view.has_changes = true;\n return false;\n });\n\n var delete_icon = $(\"\")\n .addClass(\"icon-button delete\")\n .appendTo(delete_icon_container);\n\n annotation_div\n .make_text_editable({\n num_rows: 3,\n use_textarea: true,\n help_text: \"Edit bookmark note\"\n })\n .addClass(\"annotation\");\n }\n\n view.has_changes = true;\n return new_bookmark;\n },\n\n /**\n * Create a complete Trackster visualization. Returns view.\n */\n create_visualization: function(view_config, viewport_config, drawables_config, bookmarks_config, editable) {\n // Create view.\n var self = this;\n\n var view = new tracks.TracksterView(_.extend(view_config, { header: false }));\n\n view.editor = true;\n $.when(view.load_chroms_deferred).then(chrom_info => {\n // Viewport config.\n if (viewport_config) {\n var chrom = viewport_config.chrom;\n var start = viewport_config.start;\n var end = viewport_config.end;\n var overview_drawable_name = viewport_config.overview;\n\n if (chrom && start !== undefined && end) {\n view.change_chrom(chrom, start, end);\n } else {\n // No valid viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n } else {\n // No viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n\n // Add drawables to view.\n if (drawables_config) {\n // FIXME: can from_dict() be used to create view and add drawables?\n var drawable_config;\n\n var drawable_type;\n var drawable;\n for (var i = 0; i < drawables_config.length; i++) {\n view.add_drawable(tracks.object_from_template(drawables_config[i], view, view));\n }\n }\n\n // Set overview.\n var overview_drawable;\n for (var i = 0; i < view.drawables.length; i++) {\n if (view.drawables[i].config.get_value(\"name\") === overview_drawable_name) {\n view.set_overview(view.drawables[i]);\n break;\n }\n }\n\n // Load bookmarks.\n if (bookmarks_config) {\n var bookmark;\n for (var i = 0; i < bookmarks_config.length; i++) {\n bookmark = bookmarks_config[i];\n self.add_bookmark(bookmark[\"position\"], bookmark[\"annotation\"], editable);\n }\n }\n\n // View has no changes as of yet.\n view.has_changes = false;\n });\n\n // Final initialization.\n this.set_up_router({ view: view });\n\n return view;\n },\n\n /**\n * Set up location router to use hashes as track browser locations.\n */\n set_up_router: function(options) {\n new visualization.TrackBrowserRouter(options);\n Backbone.history.start();\n },\n\n /**\n * Set up keyboard navigation for a visualization.\n */\n init_keyboard_nav: function(view) {\n // Keyboard navigation. Scroll ~7% of height when scrolling up/down.\n $(document).keyup(e => {\n // Do not navigate if arrow keys used in input element.\n if ($(e.srcElement).is(\":input\")) {\n return;\n }\n\n // Key codes: left == 37, up == 38, right == 39, down == 40\n switch (e.which) {\n case 37:\n view.move_fraction(0.25);\n break;\n case 38:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() - 20);\n break;\n case 39:\n view.move_fraction(-0.25);\n break;\n case 40:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() + 20);\n break;\n }\n });\n },\n\n /**\n * Handle unsaved changes in visualization.\n */\n handle_unsaved_changes: function(view) {\n if (view.has_changes) {\n var self = this;\n Galaxy.modal.show({\n title: \"Close visualization\",\n body: \"There are unsaved changes to your visualization which will be lost if you do not save them.\",\n buttons: {\n Cancel: function() {\n Galaxy.modal.hide();\n },\n \"Leave without Saving\": function() {\n $(window).off(\"beforeunload\");\n window.location = `${Galaxy.root}visualization`;\n },\n Save: function() {\n $.when(self.save_viz()).then(() => {\n window.location = `${Galaxy.root}visualization`;\n });\n }\n }\n });\n } else {\n window.location = `${Galaxy.root}visualization`;\n }\n }\n});\n\nvar TracksterView = Backbone.View.extend({\n // initalize trackster\n initialize: function() {\n // load ui\n ui = new TracksterUI(Galaxy.root);\n\n // create button menu\n ui.createButtonMenu();\n\n // attach the button menu to the panel header and float it left\n ui.buttonMenu.$el.attr(\"style\", \"float: right\");\n\n // add to center panel\n $(\"#center .unified-panel-header-inner\").append(ui.buttonMenu.$el);\n\n // configure right panel\n $(\"#right .unified-panel-title\").append(\"Bookmarks\");\n $(\"#right .unified-panel-icons\").append(\n \"\"\n );\n\n // resize view when showing/hiding right panel (bookmarks for now).\n $(\"#right-border\").click(() => {\n view.resize_window();\n });\n\n // hide right panel\n force_right_panel(\"hide\");\n\n // check if id is available\n if (galaxy_config.app.id) {\n this.view_existing();\n } else if (query_string.get(\"dataset_id\")) {\n this.choose_existing_or_new();\n } else {\n this.view_new();\n }\n },\n\n choose_existing_or_new: function() {\n var self = this;\n var dbkey = query_string.get(\"dbkey\");\n var listTracksParams = {};\n\n var dataset_params = {\n dbkey: dbkey,\n dataset_id: query_string.get(\"dataset_id\"),\n hda_ldda: query_string.get(\"hda_ldda\"),\n gene_region: query_string.get(\"gene_region\")\n };\n\n if (dbkey) {\n listTracksParams[\"f-dbkey\"] = dbkey;\n }\n\n Galaxy.modal.show({\n title: \"View Data in a New or Saved Visualization?\",\n // either have text in here or have to remove body and the header/footer margins\n body: `

    You can add this dataset as:
  • a new track to one of your existing, saved Trackster sessions if they share the genome build: ${dbkey ||\n \"Not available.\"}
  • or create a new session with this dataset as the only track

`,\n buttons: {\n Cancel: function() {\n window.location = `${Galaxy.root}visualizations/list`;\n },\n \"View in saved visualization\": function() {\n self.view_in_saved(dataset_params);\n },\n \"View in new visualization\": function() {\n self.view_new();\n }\n }\n });\n },\n\n // view\n view_in_saved: function(dataset_params) {\n var tracks_grid = new GridView({\n url_base: `${Galaxy.root}visualization/list_tracks`,\n dict_format: true,\n embedded: true\n });\n Galaxy.modal.show({\n title: \"Add Data to Saved Visualization\",\n body: tracks_grid.$el,\n buttons: {\n Cancel: function() {\n window.location = `${Galaxy.root}visualizations/list`;\n },\n \"Add to visualization\": function() {\n $(parent.document)\n .find(\"input[name=id]:checked\")\n .each(function() {\n dataset_params.id = $(this).val();\n window.location = `${Galaxy.root}visualization/trackster?${$.param(dataset_params)}`;\n });\n }\n }\n });\n },\n\n // view\n view_existing: function() {\n // get config\n var viz_config = galaxy_config.app.viz_config;\n\n // view\n view = ui.create_visualization(\n {\n container: $(\"#center .unified-panel-body\"),\n name: viz_config.title,\n vis_id: viz_config.vis_id,\n dbkey: viz_config.dbkey\n },\n viz_config.viewport,\n viz_config.tracks,\n viz_config.bookmarks,\n true\n );\n\n // initialize editor\n this.init_editor();\n },\n\n // view\n view_new: function() {\n // reference this\n var self = this;\n\n // ajax\n $.ajax({\n url: `${Galaxy.root}api/genomes?chrom_info=True`,\n data: {},\n error: function() {\n alert(\"Couldn't create new browser.\");\n },\n success: function(response) {\n // show dialog\n Galaxy.modal.show({\n title: \"New Visualization\",\n body: self.template_view_new(response),\n buttons: {\n Cancel: function() {\n window.location = `${Galaxy.root}visualizations/list`;\n },\n Create: function() {\n self.create_browser($(\"#new-title\").val(), $(\"#new-dbkey\").val());\n Galaxy.modal.hide();\n }\n }\n });\n\n // select default\n var dbkeys_in_genomes = response.map(r => r[1]);\n if (galaxy_config.app.default_dbkey && _.contains(dbkeys_in_genomes, galaxy_config.app.default_dbkey)) {\n $(\"#new-dbkey\").val(galaxy_config.app.default_dbkey);\n }\n\n // change focus\n $(\"#new-title\").focus();\n $(\"select[name='dbkey']\").select2();\n\n // to support the large number of options for dbkey, enable scrolling in overlay.\n $(\"#overlay\").css(\"overflow\", \"auto\");\n }\n });\n },\n\n // new browser form\n template_view_new: function(response) {\n // start template\n var html =\n '
' +\n '
' +\n '' +\n '
' +\n '' +\n \"
\" +\n '
' +\n \"
\" +\n '
' +\n '' +\n '
' +\n '
Is the build not listed here? Add a Custom Build
`;\n\n // return\n return html;\n },\n\n // create\n create_browser: function(name, dbkey) {\n $(document).trigger(\"convert_to_values\");\n\n view = ui.create_visualization(\n {\n container: $(\"#center .unified-panel-body\"),\n name: name,\n dbkey: dbkey\n },\n galaxy_config.app.gene_region\n );\n\n // initialize editor\n this.init_editor();\n\n // modify view setting\n view.editor = true;\n },\n\n // initialization for editor-specific functions.\n init_editor: function() {\n // set title\n $(\"#center .unified-panel-title\").text(`${view.config.get_value(\"name\")} (${view.dbkey})`);\n\n // add dataset\n if (galaxy_config.app.add_dataset)\n $.ajax({\n url: `${Galaxy.root}api/datasets/${galaxy_config.app.add_dataset}`,\n data: { hda_ldda: \"hda\", data_type: \"track_config\" },\n dataType: \"json\",\n success: function(track_data) {\n view.add_drawable(tracks.object_from_template(track_data, view, view));\n }\n });\n\n // initialize icons\n $(\"#add-bookmark-button\").click(() => {\n // add new bookmark.\n var position = `${view.chrom}:${view.low}-${view.high}`;\n\n var annotation = \"Bookmark description\";\n return ui.add_bookmark(position, annotation, true);\n });\n\n // initialize keyboard\n ui.init_keyboard_nav(view);\n\n $(window).on(\"beforeunload\", () => {\n if (view.has_changes) {\n return \"There are unsaved changes to your visualization that will be lost if you leave this page.\";\n }\n });\n }\n});\n\nexport default {\n TracksterUI: TracksterUI,\n GalaxyApp: TracksterView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster.js","import * as _ from \"libs/underscore\";\nimport visualization from \"viz/visualization\";\nimport viz_views from \"viz/viz_views\";\nimport util from \"viz/trackster/util\";\nimport slotting from \"viz/trackster/slotting\";\nimport painters from \"viz/trackster/painters\";\nimport filters_mod from \"viz/trackster/filters\";\nimport data from \"mvc/dataset/data\";\nimport tools_mod from \"mvc/tool/tools\";\nimport config_mod from \"utils/config\";\nimport bbi from \"viz/bbi-data-manager\";\nimport \"ui/editable-text\";\nvar extend = _.extend;\n\n// ---- Web UI specific utilities ----\n\n/**\n * Dictionary of HTML element-JavaScript object relationships.\n */\n// TODO: probably should separate moveable objects from containers.\nvar html_elt_js_obj_dict = {};\n\n/**\n * Designates an HTML as a container.\n */\nvar is_container = (element, obj) => {\n html_elt_js_obj_dict[element.attr(\"id\")] = obj;\n};\n\n/**\n * Make `element` moveable within parent and sibling elements by dragging `handle` (a selector).\n * Function manages JS objects, containers as well.\n *\n * @param element HTML element to make moveable\n * @param handle_class classname that denotes HTML element to be used as handle\n * @param container_selector selector used to identify possible containers for this element\n * @param element_js_obj JavaScript object associated with element; used\n */\nvar moveable = (element, handle_class, container_selector, element_js_obj) => {\n // HACK: set default value for container selector.\n container_selector = \".group\";\n\n // Register element with its object.\n html_elt_js_obj_dict[element.attr(\"id\")] = element_js_obj;\n\n // Need to provide selector for handle, not class.\n element\n .bind(\"drag\", { handle: `.${handle_class}`, relative: true }, function(e, d) {\n var element = $(this);\n var parent = $(this).parent();\n\n var // Only sorting amongst tracks and groups.\n children = parent.children(\".track,.group\");\n\n var this_obj = html_elt_js_obj_dict[$(this).attr(\"id\")];\n var child;\n var container;\n var top;\n var bottom;\n var i;\n\n //\n // Enable three types of dragging: (a) out of container; (b) into container;\n // (c) sibling movement, aka sorting. Handle in this order for simplicity.\n //\n\n // Handle dragging out of container.\n container = $(this).parents(container_selector);\n if (container.length !== 0) {\n top = container.position().top;\n bottom = top + container.outerHeight();\n var cur_container = html_elt_js_obj_dict[container.attr(\"id\")];\n if (d.offsetY < top) {\n // Moving above container.\n $(this).insertBefore(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable_before(this_obj, cur_container);\n return;\n } else if (d.offsetY > bottom) {\n // Moving below container.\n $(this).insertAfter(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable(this_obj);\n return;\n }\n }\n\n // Handle dragging into container. Child is appended to container's content_div.\n container = null;\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n top = child.position().top;\n bottom = top + child.outerHeight();\n // Dragging into container if child is a container and offset is inside container.\n if (child.is(container_selector) && this !== child.get(0) && d.offsetY >= top && d.offsetY <= bottom) {\n // Append/prepend based on where offsetY is closest to and return.\n if (d.offsetY - top < bottom - d.offsetY) {\n child.find(\".content-div\").prepend(this);\n } else {\n child.find(\".content-div\").append(this);\n }\n // Update containers. Object may not have container if it is being moved quickly.\n if (this_obj.container) {\n this_obj.container.remove_drawable(this_obj);\n }\n html_elt_js_obj_dict[child.attr(\"id\")].add_drawable(this_obj);\n return;\n }\n }\n\n // Handle sibling movement, aka sorting.\n\n // Determine new position\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n if (\n d.offsetY < child.position().top &&\n // Cannot move tracks above reference track or intro div.\n !(child.hasClass(\"reference-track\") || child.hasClass(\"intro\"))\n ) {\n break;\n }\n }\n\n // If not already in the right place, move. Need\n // to handle the end specially since we don't have\n // insert at index\n if (i === children.length) {\n if (this !== children.get(i - 1)) {\n parent.append(this);\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, i);\n }\n } else if (this !== children.get(i)) {\n $(this).insertBefore(children.get(i));\n // Need to adjust insert position if moving down because move is changing\n // indices of all list items.\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, d.deltaY > 0 ? i - 1 : i);\n }\n })\n .bind(\"dragstart\", function() {\n $(this).addClass(\"dragging\");\n })\n .bind(\"dragend\", function() {\n $(this).removeClass(\"dragging\");\n });\n};\n\n/**\n * Init constants & functions used throughout trackster.\n */\nvar // Padding at the top of tracks for error messages\nERROR_PADDING = 20;\n\nvar // Maximum number of rows un a slotted track\nMAX_FEATURE_DEPTH = 100;\n\nvar // Minimum width for window for squish to be used.\nMIN_SQUISH_VIEW_WIDTH = 12000;\n\nvar // Number of pixels per tile, not including left offset.\nTILE_SIZE = 400;\n\nvar DEFAULT_DATA_QUERY_WAIT = 5000;\n\nvar // Maximum number of chromosomes that are selectable at any one time.\nMAX_CHROMS_SELECTABLE = 100;\n\nvar DATA_ERROR = \"Cannot display dataset due to an error. \";\n\nvar DATA_NOCONVERTER = \"A converter for this dataset is not installed. Please check your datatypes_conf.xml file.\";\n\nvar DATA_NONE = \"No data for this chrom/contig.\";\n\nvar DATA_PENDING =\n \"Preparing data. This can take a while for a large dataset. \" +\n \"If the visualization is saved and closed, preparation will continue in the background.\";\n\nvar DATA_CANNOT_RUN_TOOL = \"Tool cannot be rerun: \";\nvar DATA_LOADING = \"Loading data...\";\nvar DATA_OK = \"Ready for display\";\nvar TILE_CACHE_SIZE = 10;\nvar DATA_CACHE_SIZE = 20;\n\nvar // Numerical/continuous data display modes.\nCONTINUOUS_DATA_MODES = [\"Histogram\", \"Line\", \"Filled\", \"Intensity\"];\n\n/**\n * Round a number to a given number of decimal places.\n */\nfunction round(num, places) {\n // Default rounding is to integer.\n if (!places) {\n places = 0;\n }\n\n var val = Math.pow(10, places);\n return Math.round(num * val) / val;\n}\n\n/**\n * Check if a server can do byte range requests.\n */\nfunction supportsByteRanges(url) {\n var promise = $.Deferred();\n $.ajax({\n type: \"HEAD\",\n url: url,\n beforeSend: function(xhr) {\n xhr.setRequestHeader(\"Range\", \"bytes=0-10\");\n },\n success: function(result, status, xhr) {\n promise.resolve(xhr.status === 206);\n }\n });\n\n return promise;\n}\n\n/**\n * Drawables hierarchy:\n *\n * Drawable\n * --> DrawableCollection\n * --> DrawableGroup\n * --> View\n * --> Track\n */\n\n/**\n * Base class for all drawable objects. Drawable objects are associated with a view and live in a\n * container. They have the following HTML elements and structure:\n * \n * \n * \n *\n * They optionally have a drag handle class.\n */\nvar Drawable = function(view, container, obj_dict) {\n if (!Drawable.id_counter) {\n Drawable.id_counter = 0;\n }\n this.id = Drawable.id_counter++;\n this.view = view;\n this.container = container;\n this.drag_handle_class = obj_dict.drag_handle_class;\n this.is_overview = false;\n this.action_icons = {};\n\n // -- Set up drawable configuration. --\n this.config = config_mod.ConfigSettingCollection.from_models_and_saved_values(this.config_params, obj_dict.prefs);\n\n // If there's no saved name, use object name.\n if (!this.config.get_value(\"name\")) {\n this.config.set_value(\"name\", obj_dict.name);\n }\n if (this.config_onchange) {\n this.config.on(\"change\", this.config_onchange, this);\n }\n\n // Build Drawable HTML and behaviors.\n this.container_div = this.build_container_div();\n this.header_div = null;\n\n // Use opt-out policy on header creation because this is the more frequent approach:\n // unless flag set, create header.\n if (obj_dict.header !== false) {\n var header_view = new viz_views.TrackHeaderView({\n model: this,\n id: this.id\n });\n\n this.header_div = header_view.$el;\n this.container_div.append(this.header_div);\n\n // Show icons when users is hovering over track.\n var icons_div = header_view.icons_div;\n this.action_icons = header_view.action_icons;\n this.container_div.hover(\n () => {\n icons_div.show();\n },\n () => {\n icons_div.hide();\n }\n );\n }\n};\n\nDrawable.prototype.action_icons_def = [\n // Hide/show drawable content.\n // FIXME: make this an odict for easier lookup.\n {\n name: \"toggle_icon\",\n title: \"Hide/show content\",\n css_class: \"toggle\",\n on_click_fn: function(drawable) {\n if (drawable.config.get_value(\"content_visible\")) {\n drawable.action_icons.toggle_icon.addClass(\"toggle-expand\").removeClass(\"toggle\");\n drawable.hide_contents();\n drawable.config.set_value(\"content_visible\", false);\n } else {\n drawable.action_icons.toggle_icon.addClass(\"toggle\").removeClass(\"toggle-expand\");\n drawable.config.set_value(\"content_visible\", true);\n drawable.show_contents();\n }\n }\n },\n // Edit settings.\n {\n name: \"settings_icon\",\n title: \"Edit settings\",\n css_class: \"gear\",\n on_click_fn: function(drawable) {\n var view = new config_mod.ConfigSettingCollectionView({\n collection: drawable.config\n });\n view.render_in_modal(\"Configure Track\");\n }\n },\n // Remove.\n {\n name: \"remove_icon\",\n title: \"Remove\",\n css_class: \"remove-icon\",\n on_click_fn: function(drawable) {\n // Tooltip for remove icon must be deleted when drawable is deleted.\n $(\".tooltip\").remove();\n drawable.remove();\n }\n }\n];\n\nextend(Drawable.prototype, {\n config_params: [\n { key: \"name\", label: \"Name\", type: \"text\", default_value: \"\" },\n {\n key: \"content_visible\",\n type: \"bool\",\n default_value: true,\n hidden: true\n }\n ],\n\n config_onchange: function() {},\n\n init: function() {},\n\n changed: function() {\n this.view.changed();\n },\n\n can_draw: function() {\n if (this.enabled && this.config.get_value(\"content_visible\")) {\n return true;\n }\n\n return false;\n },\n\n request_draw: function() {},\n\n _draw: function(options) {},\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function() {},\n\n /**\n * Set drawable name.\n */\n set_name: function(new_name) {\n this.old_name = this.config.get_value(\"name\");\n this.config.set_value(\"name\", new_name);\n },\n\n /**\n * Revert track name; currently name can be reverted only once.\n */\n revert_name: function() {\n if (this.old_name) {\n this.config.set_value(\"name\", this.old_name);\n }\n },\n\n /**\n * Remove drawable (a) from its container and (b) from the HTML.\n */\n remove: function() {\n this.changed();\n\n this.container.remove_drawable(this);\n var view = this.view;\n this.container_div.hide(0, function() {\n $(this).remove();\n // HACK: is there a better way to update the view?\n view.update_intro_div();\n });\n },\n\n /**\n * Build drawable's container div; this is the parent div for all drawable's elements.\n */\n build_container_div: function() {},\n\n /**\n * Update icons.\n */\n update_icons: function() {},\n\n /**\n * Hide drawable's contents.\n */\n hide_contents: function() {},\n\n /**\n * Show drawable's contents.\n */\n show_contents: function() {},\n\n /**\n * Returns a shallow copy of all drawables in this drawable.\n */\n get_drawables: function() {}\n});\n\n/**\n * A collection of drawable objects.\n */\nvar DrawableCollection = function(view, container, obj_dict) {\n Drawable.call(this, view, container, obj_dict);\n\n // Attribute init.\n this.obj_type = obj_dict.obj_type;\n this.drawables = [];\n};\n\nextend(DrawableCollection.prototype, Drawable.prototype, {\n /**\n * Unpack and add drawables to the collection.\n */\n unpack_drawables: function(drawables_array) {\n // Add drawables to collection.\n this.drawables = [];\n var drawable;\n for (var i = 0; i < drawables_array.length; i++) {\n drawable = object_from_template(drawables_array[i], this.view, this);\n this.add_drawable(drawable);\n }\n },\n\n /**\n * Init each drawable in the collection.\n */\n init: function() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].init();\n }\n },\n\n /**\n * Draw each drawable in the collection.\n */\n _draw: function(options) {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i]._draw(options);\n }\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function() {\n var dictified_drawables = [];\n for (var i = 0; i < this.drawables.length; i++) {\n dictified_drawables.push(this.drawables[i].to_dict());\n }\n return {\n prefs: this.config.to_key_value_dict(),\n obj_type: this.obj_type,\n drawables: dictified_drawables\n };\n },\n\n /**\n * Add a drawable to the end of the collection.\n */\n add_drawable: function(drawable) {\n this.drawables.push(drawable);\n drawable.container = this;\n this.changed();\n },\n\n /**\n * Add a drawable before another drawable.\n */\n add_drawable_before: function(drawable, other) {\n this.changed();\n var index = this.drawables.indexOf(other);\n if (index !== -1) {\n this.drawables.splice(index, 0, drawable);\n return true;\n }\n return false;\n },\n\n /**\n * Replace one drawable with another.\n */\n replace_drawable: function(old_drawable, new_drawable, update_html) {\n var index = this.drawables.indexOf(old_drawable);\n if (index !== -1) {\n this.drawables[index] = new_drawable;\n if (update_html) {\n old_drawable.container_div.replaceWith(new_drawable.container_div);\n }\n this.changed();\n }\n return index;\n },\n\n /**\n * Remove drawable from this collection.\n */\n remove_drawable: function(drawable) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Found drawable to remove.\n this.drawables.splice(index, 1);\n drawable.container = null;\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Move drawable to another location in collection.\n */\n move_drawable: function(drawable, new_position) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Remove from current position:\n this.drawables.splice(index, 1);\n // insert into new position:\n this.drawables.splice(new_position, 0, drawable);\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function() {\n return this.drawables;\n },\n\n /**\n * Returns all tracks in collection.\n */\n get_tracks: function(track_type) {\n // Initialize queue with copy of drawables array.\n var queue = this.drawables.slice(0);\n\n var tracks = [];\n var drawable;\n while (queue.length !== 0) {\n drawable = queue.shift();\n if (drawable instanceof track_type) {\n tracks.push(drawable);\n } else if (drawable.drawables) {\n queue = queue.concat(drawable.drawables);\n }\n }\n return tracks;\n }\n});\n\n/**\n * A group of drawables that are moveable, visible.\n */\nvar DrawableGroup = function(view, container, obj_dict) {\n extend(obj_dict, {\n obj_type: \"DrawableGroup\",\n drag_handle_class: \"group-handle\"\n });\n DrawableCollection.call(this, view, container, obj_dict);\n\n // Set up containers/moving for group: register both container_div and content div as container\n // because both are used as containers (container div to recognize container, content_div to\n // store elements). Group can be moved.\n this.content_div = $(\"
\")\n .addClass(\"content-div\")\n .attr(\"id\", `group_${this.id}_content_div`)\n .appendTo(this.container_div);\n is_container(this.container_div, this);\n is_container(this.content_div, this);\n moveable(this.container_div, this.drag_handle_class, \".group\", this);\n\n // Set up filters.\n this.filters_manager = new filters_mod.FiltersManager(this);\n this.header_div.after(this.filters_manager.parent_div);\n\n // HACK: add div to clear floating elements.\n this.filters_manager.parent_div.after($(\"
\"));\n\n // For saving drawables' filter managers when group-level filtering is done:\n this.saved_filters_managers = [];\n\n // Add drawables.\n if (\"drawables\" in obj_dict) {\n this.unpack_drawables(obj_dict.drawables);\n }\n\n // Restore filters.\n if (\"filters\" in obj_dict) {\n // FIXME: Pass collection_dict to DrawableCollection/Drawable will make this easier.\n var old_manager = this.filters_manager;\n this.filters_manager = new filters_mod.FiltersManager(this, obj_dict.filters);\n old_manager.parent_div.replaceWith(this.filters_manager.parent_div);\n\n if (obj_dict.filters.visible) {\n this.setup_multitrack_filtering();\n }\n }\n};\n\nextend(DrawableGroup.prototype, Drawable.prototype, DrawableCollection.prototype, {\n action_icons_def: [\n Drawable.prototype.action_icons_def[0],\n Drawable.prototype.action_icons_def[1],\n // Replace group with composite track.\n {\n name: \"composite_icon\",\n title: \"Show composite track\",\n css_class: \"layers-stack\",\n on_click_fn: function(group) {\n $(\".tooltip\").remove();\n group.show_composite_track();\n }\n },\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function(group) {\n // TODO: update Tooltip text.\n if (group.filters_manager.visible()) {\n // Hiding filters.\n group.filters_manager.clear_filters();\n group._restore_filter_managers();\n // TODO: maintain current filter by restoring and setting saved manager's\n // settings to current/shared manager's settings.\n // TODO: need to restore filter managers when moving drawable outside group.\n } else {\n // Showing filters.\n group.setup_multitrack_filtering();\n group.request_draw({ clear_tile_cache: true });\n }\n group.filters_manager.toggle();\n }\n },\n Drawable.prototype.action_icons_def[2]\n ],\n\n build_container_div: function() {\n var container_div = $(\"
\")\n .addClass(\"group\")\n .attr(\"id\", `group_${this.id}`);\n if (this.container) {\n this.container.content_div.append(container_div);\n }\n return container_div;\n },\n\n hide_contents: function() {\n this.tiles_div.hide();\n },\n\n show_contents: function() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n update_icons: function() {\n //\n // Handle update when there are no tracks.\n //\n var num_drawables = this.drawables.length;\n if (num_drawables === 0) {\n this.action_icons.composite_icon.hide();\n this.action_icons.filters_icon.hide();\n } else if (num_drawables === 1) {\n this.action_icons.composite_icon.toggle(this.drawables[0] instanceof CompositeTrack);\n this.action_icons.filters_icon.hide();\n } else {\n // There are 2 or more tracks.\n\n //\n // Determine if a composite track can be created. Current criteria:\n // (a) all tracks are line tracks;\n // OR\n // FIXME: this is not enabled right now because it has not been well tested:\n // (b) there is a single FeatureTrack.\n //\n\n // All tracks the same?\n var i;\n\n var j;\n var drawable;\n var same_type = true;\n var a_type = this.drawables[0].get_type();\n var num_feature_tracks = 0;\n for (i = 0; i < num_drawables; i++) {\n drawable = this.drawables[i];\n if (drawable.get_type() !== a_type) {\n can_composite = false;\n break;\n }\n if (drawable instanceof FeatureTrack) {\n num_feature_tracks++;\n }\n }\n\n if (same_type && this.drawables[0] instanceof LineTrack) {\n this.action_icons.composite_icon.show();\n } else {\n this.action_icons.composite_icon.hide();\n $(\".tooltip\").remove();\n }\n\n //\n // Set up group-level filtering and update filter icon.\n //\n if (num_feature_tracks > 1 && num_feature_tracks === this.drawables.length) {\n //\n // Find shared filters.\n //\n var shared_filters = {};\n\n var filter;\n\n // Init shared filters with filters from first drawable.\n drawable = this.drawables[0];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n shared_filters[filter.name] = [filter];\n }\n\n // Create lists of shared filters.\n for (i = 1; i < this.drawables.length; i++) {\n drawable = this.drawables[i];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n if (filter.name in shared_filters) {\n shared_filters[filter.name].push(filter);\n }\n }\n }\n\n //\n // Create filters for shared filters manager. Shared filters manager is group's\n // manager.\n //\n this.filters_manager.remove_all();\n var filters;\n var new_filter;\n var min;\n var max;\n for (var filter_name in shared_filters) {\n filters = shared_filters[filter_name];\n if (filters.length === num_feature_tracks) {\n // Add new filter.\n // FIXME: can filter.copy() be used?\n new_filter = new filters_mod.NumberFilter({\n name: filters[0].name,\n index: filters[0].index\n });\n this.filters_manager.add_filter(new_filter);\n }\n }\n\n // Show/hide icon based on filter availability.\n this.action_icons.filters_icon.toggle(this.filters_manager.filters.length > 0);\n } else {\n this.action_icons.filters_icon.hide();\n }\n }\n },\n\n /**\n * Restore individual track filter managers.\n */\n _restore_filter_managers: function() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].filters_manager = this.saved_filters_managers[i];\n }\n this.saved_filters_managers = [];\n },\n\n /**\n *\n */\n setup_multitrack_filtering: function() {\n // Save tracks' managers and set up shared manager.\n if (this.filters_manager.filters.length > 0) {\n // For all tracks, save current filter manager and set manager to shared (this object's) manager.\n this.saved_filters_managers = [];\n for (var i = 0; i < this.drawables.length; i++) {\n var drawable = this.drawables[i];\n this.saved_filters_managers.push(drawable.filters_manager);\n drawable.filters_manager = this.filters_manager;\n }\n\n //TODO: hide filters icons for each drawable?\n }\n this.filters_manager.init_filters();\n },\n\n /**\n * Replace group with a single composite track that includes all group's tracks.\n */\n show_composite_track: function() {\n var composite_track = new CompositeTrack(this.view, this.view, {\n name: this.config.get_value(\"name\"),\n drawables: this.drawables\n });\n var index = this.container.replace_drawable(this, composite_track, true);\n composite_track.request_draw();\n },\n\n add_drawable: function(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n this.update_icons();\n },\n\n remove_drawable: function(drawable) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n this.update_icons();\n },\n\n to_dict: function() {\n // If filters are visible, need to restore original filter managers before converting to dict.\n if (this.filters_manager.visible()) {\n this._restore_filter_managers();\n }\n\n var obj_dict = extend(DrawableCollection.prototype.to_dict.call(this), {\n filters: this.filters_manager.to_dict()\n });\n\n // Setup multi-track filtering again.\n if (this.filters_manager.visible()) {\n this.setup_multitrack_filtering();\n }\n\n return obj_dict;\n },\n\n request_draw: function(options) {\n _.each(this.drawables, d => {\n d.request_draw(options);\n });\n }\n});\n\n/**\n * View object manages a trackster visualization, including tracks and user interactions.\n * Events triggered:\n * navigate: when browser view changes to a new locations\n */\nvar TracksterView = Backbone.View.extend({\n initialize: function(obj_dict) {\n extend(obj_dict, {\n obj_type: \"View\"\n });\n DrawableCollection.call(this, \"View\", obj_dict.container, obj_dict);\n this.chrom = null;\n this.vis_id = obj_dict.vis_id;\n this.dbkey = obj_dict.dbkey;\n this.stand_alone = obj_dict.stand_alone !== undefined ? obj_dict.stand_alone : true;\n this.label_tracks = [];\n this.tracks_to_be_redrawn = [];\n this.max_low = 0;\n this.max_high = 0;\n this.zoom_factor = 3;\n this.min_separation = 30;\n this.has_changes = false;\n // Deferred object that indicates when view's chrom data has been loaded.\n this.load_chroms_deferred = null;\n this.render();\n this.canvas_manager = new visualization.CanvasManager(this.container.get(0).ownerDocument);\n this.reset();\n\n // Define track configuration\n this.config = config_mod.ConfigSettingCollection.from_models_and_saved_values(\n [\n {\n key: \"name\",\n label: \"Name\",\n type: \"text\",\n default_value: \"\"\n },\n {\n key: \"a_color\",\n label: \"A Color\",\n type: \"color\",\n default_value: \"#FF0000\"\n },\n {\n key: \"c_color\",\n label: \"C Color\",\n type: \"color\",\n default_value: \"#00FF00\"\n },\n {\n key: \"g_color\",\n label: \"G Color\",\n type: \"color\",\n default_value: \"#0000FF\"\n },\n {\n key: \"t_color\",\n label: \"T Color\",\n type: \"color\",\n default_value: \"#FF00FF\"\n },\n {\n key: \"n_color\",\n label: \"N Color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n }\n ],\n { name: obj_dict.name }\n );\n },\n\n render: function() {\n // Attribute init.\n this.requested_redraw = false;\n\n // Create DOM elements\n var parent_element = this.container;\n\n var view = this;\n // Top container for things that are fixed at the top\n this.top_container = $(\"
\")\n .addClass(\"top-container\")\n .appendTo(parent_element);\n // Browser content, primary tracks are contained in here\n this.browser_content_div = $(\"
\")\n .addClass(\"content\")\n .appendTo(parent_element);\n // Bottom container for things that are fixed at the bottom\n this.bottom_container = $(\"
\")\n .addClass(\"bottom-container\")\n .appendTo(parent_element);\n // Label track fixed at top\n this.top_labeltrack = $(\"
\")\n .addClass(\"top-labeltrack\")\n .appendTo(this.top_container);\n // Viewport for dragging tracks in center\n this.viewport_container = $(\"
\")\n .addClass(\"viewport-container\")\n .attr(\"id\", \"viewport-container\")\n .appendTo(this.browser_content_div);\n // Alias viewport_container as content_div so that it matches function of DrawableCollection/Group content_div.\n this.content_div = this.viewport_container;\n is_container(this.viewport_container, view);\n // Introduction div shown when there are no tracks.\n this.intro_div = $(\"
\")\n .addClass(\"intro\")\n .appendTo(this.viewport_container);\n var add_tracks_button = $(\"
\")\n .text(\"Add Datasets to Visualization\")\n .addClass(\"action-button\")\n .appendTo(this.intro_div)\n .click(() => {\n visualization.select_datasets({ dbkey: view.dbkey }, tracks => {\n _.each(tracks, track => {\n view.add_drawable(object_from_template(track, view, view));\n });\n });\n });\n\n // Navigation at top\n this.nav_container = $(\"
\")\n .addClass(\"trackster-nav-container\")\n .prependTo(this.top_container);\n this.nav = $(\"
\")\n .addClass(\"trackster-nav\")\n .appendTo(this.nav_container);\n\n if (this.stand_alone) {\n this.nav_container.addClass(\"stand-alone\");\n this.nav.addClass(\"stand-alone\");\n }\n\n // Overview (scrollbar and overview plot) at bottom\n this.overview = $(\"
\")\n .addClass(\"overview\")\n .appendTo(this.bottom_container);\n this.overview_viewport = $(\"
\")\n .addClass(\"overview-viewport\")\n .appendTo(this.overview);\n this.overview_close = $(\"\")\n .attr(\"title\", \"Close overview\")\n .addClass(\"icon-button overview-close tooltip\")\n .hide()\n .appendTo(this.overview_viewport);\n this.overview_highlight = $(\"
\")\n .addClass(\"overview-highlight\")\n .hide()\n .appendTo(this.overview_viewport);\n this.overview_box_background = $(\"
\")\n .addClass(\"overview-boxback\")\n .appendTo(this.overview_viewport);\n this.overview_box = $(\"
\")\n .addClass(\"overview-box\")\n .appendTo(this.overview_viewport);\n this.default_overview_height = this.overview_box.height();\n\n this.nav_controls = $(\"
\")\n .addClass(\"nav-controls\")\n .appendTo(this.nav);\n this.chrom_select = $(\"\")\n .addClass(\"nav-input\")\n .hide()\n .bind(\"keyup focusout\", submit_nav)\n .appendTo(this.nav_controls);\n this.location_span = $(\"\")\n .addClass(\"location\")\n .attr(\"title\", \"Click to change location\")\n .tooltip({ placement: \"bottom\" })\n .appendTo(this.nav_controls);\n this.location_span.click(() => {\n view.location_span.hide();\n view.chrom_select.hide();\n view.nav_input.val(`${view.chrom}:${view.low}-${view.high}`);\n view.nav_input.css(\"display\", \"inline-block\");\n view.nav_input.select();\n view.nav_input.focus();\n // Set up autocomplete for tracks' features.\n view.nav_input.autocomplete({\n source: function(request, response) {\n // Using current text, query each track and create list of all matching features.\n var all_features = [];\n\n var feature_search_deferreds = $.map(view.get_tracks(FeatureTrack), t =>\n t.data_manager.search_features(request.term).success(dataset_features => {\n all_features = all_features.concat(dataset_features);\n })\n );\n\n // When all searching is done, fill autocomplete.\n $.when.apply($, feature_search_deferreds).done(() => {\n response(\n $.map(all_features, feature => ({\n label: feature[0],\n value: feature[1]\n }))\n );\n });\n },\n minLength: 2\n });\n });\n if (this.vis_id !== undefined) {\n this.hidden_input = $(\"\")\n .attr(\"type\", \"hidden\")\n .val(this.vis_id)\n .appendTo(this.nav_controls);\n }\n\n this.zo_link = $(\"\")\n .attr(\"id\", \"zoom-out\")\n .attr(\"title\", \"Zoom out\")\n .tooltip({ placement: \"bottom\" })\n .click(() => {\n view.zoom_out();\n })\n .appendTo(this.nav_controls);\n this.zi_link = $(\"\")\n .attr(\"id\", \"zoom-in\")\n .attr(\"title\", \"Zoom in\")\n .tooltip({ placement: \"bottom\" })\n .click(() => {\n view.zoom_in();\n })\n .appendTo(this.nav_controls);\n\n // Get initial set of chroms.\n this.load_chroms_deferred = this.load_chroms({ low: 0 });\n this.chrom_select.bind(\"change\", () => {\n view.change_chrom(view.chrom_select.val());\n });\n\n /*\n this.browser_content_div.bind(\"mousewheel\", function( e, delta ) {\n if (Math.abs(delta) < 0.5) {\n return;\n }\n if (delta > 0) {\n view.zoom_in(e.pageX, this.viewport_container);\n } else {\n view.zoom_out();\n }\n e.preventDefault();\n });\n */\n\n // Blur tool/filter inputs when user clicks on content div.\n this.browser_content_div.click(function(e) {\n $(this)\n .find(\"input\")\n .trigger(\"blur\");\n });\n\n // Double clicking zooms in\n this.browser_content_div.bind(\"dblclick\", function(e) {\n view.zoom_in(e.pageX, this.viewport_container);\n });\n\n // Dragging the overview box (~ horizontal scroll bar)\n this.overview_box\n .bind(\"dragstart\", function(e, d) {\n this.current_x = d.offsetX;\n })\n .bind(\"drag\", function(e, d) {\n var delta = d.offsetX - this.current_x;\n this.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.max_high - view.max_low));\n view.move_delta(-delta_chrom);\n });\n\n this.overview_close.click(() => {\n view.reset_overview();\n });\n\n // Dragging in the viewport scrolls\n this.viewport_container\n .bind(\"draginit\", (e, d) => {\n // Disable interaction if started in scrollbar (for webkit)\n if (e.clientX > view.viewport_container.width() - 16) {\n return false;\n }\n })\n .bind(\"dragstart\", (e, d) => {\n d.original_low = view.low;\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n })\n .bind(\"drag\", function(e, d) {\n var container = $(this);\n var delta = d.offsetX - d.current_x;\n var new_scroll = container.scrollTop() - (e.clientY - d.current_height);\n container.scrollTop(new_scroll);\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.high - view.low));\n view.move_delta(delta_chrom);\n });\n /*\n FIXME: Do not do this for now because it's too jittery. Some kind of gravity approach is\n needed here because moving left/right should be difficult.\n\n // Also capture mouse wheel for left/right scrolling\n }).bind( 'mousewheel', function( e, d, dx, dy ) {\n // Only handle x axis scrolling; y axis scrolling is\n // handled by the browser when the event bubbles up.\n if (dx) {\n var delta_chrom = Math.round( - dx / view.viewport_container.width() * (view.high - view.low) );\n view.move_delta( delta_chrom );\n }\n });\n */\n\n // Dragging in the top label track allows selecting a region to zoom in on selected region.\n this.top_labeltrack\n .bind(\"dragstart\", function(e, d) {\n return $(\"
\")\n .addClass(\"zoom-area\")\n .css(\"height\", view.browser_content_div.height() + view.top_labeltrack.height() + 1)\n .appendTo($(this));\n })\n .bind(\"drag\", (e, d) => {\n $(d.proxy).css({\n left: Math.min(e.pageX, d.startX) - view.container.offset().left,\n width: Math.abs(e.pageX - d.startX)\n });\n\n var min = Math.min(e.pageX, d.startX) - view.container.offset().left;\n\n var max = Math.max(e.pageX, d.startX) - view.container.offset().left;\n\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n view.update_location(\n Math.round(min / width * span) + view.low,\n Math.round(max / width * span) + view.low\n );\n })\n .bind(\"dragend\", (e, d) => {\n var min = Math.min(e.pageX, d.startX);\n var max = Math.max(e.pageX, d.startX);\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n var old_low = view.low;\n view.low = Math.round(min / width * span) + old_low;\n view.high = Math.round(max / width * span) + old_low;\n $(d.proxy).remove();\n view.request_redraw();\n });\n\n // FIXME: this is still wonky for embedded visualizations.\n /*\n // For vertical alignment, track mouse with simple line.\n var mouse_tracker_div = $('
').addClass('mouse-pos').appendTo(parent_element);\n\n // Show tracker only when hovering over view.\n parent_element.hover(\n function() {\n mouse_tracker_div.show();\n parent_element.mousemove(function(e) {\n mouse_tracker_div.css({\n // -1 makes line appear next to the mouse w/o preventing mouse actions.\n left: e.pageX - parent_element.offset().left - 1\n });\n });\n },\n function() {\n parent_element.off('mousemove');\n mouse_tracker_div.hide();\n }\n );\n */\n\n this.add_label_track(new LabelTrack(this, { content_div: this.top_labeltrack }));\n\n $(window).bind(\"resize\", function() {\n // Stop previous timer.\n if (this.resize_timer) {\n clearTimeout(this.resize_timer);\n }\n\n // When function activated, resize window and redraw.\n this.resize_timer = setTimeout(() => {\n view.resize_window();\n }, 500);\n });\n $(document).bind(\"redraw\", () => {\n view.redraw();\n });\n\n this.reset();\n $(window).trigger(\"resize\");\n },\n\n get_base_color: function(base) {\n return this.config.get_value(`${base.toLowerCase()}_color`) || this.config.get_value(\"n_color\");\n }\n});\n\n// FIXME: need to use this approach to enable inheritance of DrawableCollection functions.\nextend(TracksterView.prototype, DrawableCollection.prototype, {\n changed: function() {\n this.has_changes = true;\n },\n\n /** Add or remove intro div depending on view state. */\n update_intro_div: function() {\n this.intro_div.toggle(this.drawables.length === 0);\n },\n\n /**\n * Triggers navigate events as needed. If there is a delay,\n * then event is triggered only after navigation has stopped.\n */\n trigger_navigate: function(new_chrom, new_low, new_high, delay) {\n // Stop previous timer.\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n if (delay) {\n // To aggregate calls, use timer and only navigate once\n // location has stabilized.\n var self = this;\n this.timer = setTimeout(() => {\n self.trigger(\"navigate\", `${new_chrom}:${new_low}-${new_high}`);\n }, 500);\n } else {\n view.trigger(\"navigate\", `${new_chrom}:${new_low}-${new_high}`);\n }\n },\n\n update_location: function(low, high) {\n this.location_span.text(`${util.commatize(low)} - ${util.commatize(high)}`);\n this.nav_input.val(`${this.chrom}:${util.commatize(low)}-${util.commatize(high)}`);\n\n // Update location. Only update when there is a valid chrom; when loading vis, there may\n // not be a valid chrom.\n var chrom = this.chrom_select.val();\n if (chrom !== \"\") {\n this.trigger_navigate(chrom, this.low, this.high, true);\n }\n },\n\n /**\n * Load chrom data for the view. Returns a jQuery Deferred.\n */\n // FIXME: instead of loading chrom data, should load and store genome object.\n load_chroms: function(url_parms) {\n url_parms.num = MAX_CHROMS_SELECTABLE;\n\n var view = this;\n var chrom_data = $.Deferred();\n $.ajax({\n url: `${Galaxy.root}api/genomes/${this.dbkey}`,\n data: url_parms,\n dataType: \"json\",\n success: function(result) {\n // Do nothing if could not load chroms.\n if (result.chrom_info.length === 0) {\n return;\n }\n\n // Load chroms.\n if (result.reference) {\n var ref_track = new ReferenceTrack(view);\n view.add_label_track(ref_track);\n view.reference_track = ref_track;\n }\n view.chrom_data = result.chrom_info;\n\n view.chrom_select.html(\"\");\n view.chrom_select.append($(''));\n\n for (var i = 0, len = view.chrom_data.length; i < len; i++) {\n var chrom = view.chrom_data[i].chrom;\n var chrom_option = $(\"`));\n }\n if (result.next_chroms) {\n view.chrom_select.append($(``));\n }\n view.chrom_start_index = result.start_index;\n\n chrom_data.resolve(result.chrom_info);\n },\n error: function() {\n alert(`Could not load chroms for this dbkey: ${view.dbkey}`);\n }\n });\n return chrom_data;\n },\n\n change_chrom: function(chrom, low, high) {\n var view = this;\n // If chrom data is still loading, wait for it.\n if (!view.chrom_data) {\n view.load_chroms_deferred.then(() => {\n view.change_chrom(chrom, low, high);\n });\n return;\n }\n\n // Don't do anything if chrom is \"None\" (hackish but some browsers already have this set), or null/blank\n if (!chrom || chrom === \"None\") {\n return;\n }\n\n //\n // If user is navigating to previous/next set of chroms, load new chrom set and return.\n //\n if (chrom === \"previous\") {\n view.load_chroms({\n low: this.chrom_start_index - MAX_CHROMS_SELECTABLE\n });\n return;\n }\n if (chrom === \"next\") {\n view.load_chroms({\n low: this.chrom_start_index + MAX_CHROMS_SELECTABLE\n });\n return;\n }\n\n //\n // User is loading a particular chrom. Look first in current set; if not in current set, load new\n // chrom set.\n //\n var found = $.grep(view.chrom_data, (v, i) => v.chrom === chrom)[0];\n if (found === undefined) {\n // Try to load chrom and then change to chrom.\n view.load_chroms({ chrom: chrom }, () => {\n view.change_chrom(chrom, low, high);\n });\n return;\n } else {\n // Switching to local chrom.\n if (chrom !== view.chrom) {\n view.chrom = chrom;\n view.chrom_select.val(view.chrom);\n view.max_high = found.len - 1; // -1 because we're using 0-based indexing.\n view.reset();\n\n for (var i = 0, len = view.drawables.length; i < len; i++) {\n var drawable = view.drawables[i];\n if (drawable.init) {\n drawable.init();\n }\n }\n if (view.reference_track) {\n view.reference_track.init();\n }\n }\n\n // Resolve low, high.\n if (low === undefined && high === undefined) {\n // Both are undefined, so view is whole chromosome.\n view.low = 0;\n view.high = view.max_high;\n } else {\n // Low and/or high is defined.\n view.low = low !== undefined ? Math.max(low, 0) : 0;\n if (high === undefined) {\n // Center visualization around low.\n // HACK: max resolution is currently 30 bases.\n view.low = Math.max(view.low - 15, 0);\n view.high = view.low + 30;\n } else {\n // High is defined.\n view.high = Math.min(high, view.max_high);\n }\n }\n\n view.request_redraw();\n }\n },\n\n /**\n * Change viewing region to that denoted by string. General format of string is:\n *\n * [ {separator}[-] ]\n *\n * where separator can be whitespace or a colon. Examples:\n *\n * chr22\n * chr1:100-200\n * chr7 89999\n * chr8 90000 990000\n */\n go_to: function(str) {\n // Remove commas.\n str = str.replace(/,/g, \"\");\n\n // Replace colons and hyphens with space for easy parsing.\n str = str.replace(/:|\\-/g, \" \");\n\n // Parse new location.\n var chrom_pos = str.split(/\\s+/);\n\n var chrom = chrom_pos[0];\n var new_low = chrom_pos[1] ? parseInt(chrom_pos[1], 10) : undefined;\n var new_high = chrom_pos[2] ? parseInt(chrom_pos[2], 10) : undefined;\n\n this.change_chrom(chrom, new_low, new_high);\n },\n\n move_fraction: function(fraction) {\n var view = this;\n var span = view.high - view.low;\n this.move_delta(fraction * span);\n },\n\n move_delta: function(delta_chrom) {\n //\n // Update low, high.\n //\n\n var view = this;\n var current_chrom_span = view.high - view.low;\n // Check for left and right boundaries\n if (view.low - delta_chrom < view.max_low) {\n view.low = view.max_low;\n view.high = view.max_low + current_chrom_span;\n } else if (view.high - delta_chrom > view.max_high) {\n view.high = view.max_high;\n view.low = view.max_high - current_chrom_span;\n } else {\n view.high -= delta_chrom;\n view.low -= delta_chrom;\n }\n\n //\n // Redraw view.\n //\n\n // Redraw without requesting more data immediately.\n view.request_redraw({ data_fetch: false });\n\n // Set up timeout to redraw with more data when moving stops.\n if (this.redraw_on_move_fn) {\n clearTimeout(this.redraw_on_move_fn);\n }\n\n this.redraw_on_move_fn = setTimeout(() => {\n view.request_redraw();\n }, 200);\n\n // Navigate.\n var chrom = view.chrom_select.val();\n this.trigger_navigate(chrom, view.low, view.high, true);\n },\n\n /**\n * Add a drawable to the view.\n */\n add_drawable: function(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n drawable.init();\n this.changed();\n this.update_intro_div();\n\n // When drawable config changes, mark view as changed. This\n // captures most (all?) state change that needs to be saved.\n var self = this;\n drawable.config.on(\"change\", () => {\n self.changed();\n });\n },\n\n add_label_track: function(label_track) {\n label_track.view = this;\n label_track.init();\n this.label_tracks.push(label_track);\n },\n\n /**\n * Remove drawable from the view.\n */\n remove_drawable: function(drawable, hide) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n if (hide) {\n var view = this;\n drawable.container_div.hide(0, function() {\n $(this).remove();\n view.update_intro_div();\n });\n }\n },\n\n reset: function() {\n this.low = this.max_low;\n this.high = this.max_high;\n this.viewport_container.find(\".yaxislabel\").remove();\n },\n\n /**\n * Request that view redraw one or more of view's drawables. If drawable is not specified,\n * all drawables are redrawn.\n */\n request_redraw: function(options, drawable) {\n var view = this;\n\n var // Either redrawing a single drawable or all view's drawables.\n track_list = drawable ? [drawable] : view.drawables;\n\n // Add/update tracks in track list to redraw list.\n _.each(track_list, track => {\n var track_options = _.find(view.tracks_to_be_redrawn, to => to[0] === track);\n\n if (track_options) {\n // Track already in list; update options.\n track_options[1] = options;\n } else {\n // Track not in list yet.\n view.tracks_to_be_redrawn.push([track, options]);\n }\n });\n\n // Set up redraw if it has not been requested since last redraw.\n if (!this.requested_redraw) {\n requestAnimationFrame(() => {\n view._redraw();\n });\n this.requested_redraw = true;\n }\n },\n\n /**\n * Redraws view and tracks.\n * NOTE: this method should never be called directly; request_redraw() should be used so\n * that requestAnimationFrame can manage redrawing.\n */\n _redraw: function() {\n // TODO: move this code to function that does location setting.\n\n // Clear because requested redraw is being handled now.\n this.requested_redraw = false;\n\n var low = this.low;\n var high = this.high;\n\n if (low < this.max_low) {\n low = this.max_low;\n }\n if (high > this.max_high) {\n high = this.max_high;\n }\n var span = this.high - this.low;\n if (this.high !== 0 && span < this.min_separation) {\n high = low + this.min_separation;\n }\n this.low = Math.floor(low);\n this.high = Math.ceil(high);\n\n this.update_location(this.low, this.high);\n\n // -- Drawing code --\n\n // Resolution is a pixel density.\n this.resolution_px_b = this.viewport_container.width() / (this.high - this.low);\n\n // Overview\n var left_px = this.low / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var width_px = (this.high - this.low) / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var min_width_px = 13;\n\n this.overview_box\n .css({\n left: left_px,\n width: Math.max(min_width_px, width_px)\n })\n .show();\n if (width_px < min_width_px) {\n this.overview_box.css(\"left\", left_px - (min_width_px - width_px) / 2);\n }\n if (this.overview_highlight) {\n this.overview_highlight.css({\n left: left_px,\n width: width_px\n });\n }\n\n // Draw data tracks.\n _.each(this.tracks_to_be_redrawn, track_options => {\n var track = track_options[0];\n var options = track_options[1];\n if (track) {\n track._draw(options);\n }\n });\n this.tracks_to_be_redrawn = [];\n\n // Draw label tracks.\n _.each(this.label_tracks, label_track => {\n label_track._draw();\n });\n },\n\n zoom_in: function(point, container) {\n if (this.max_high === 0 || this.high - this.low <= this.min_separation) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span / this.zoom_factor / 2;\n if (point) {\n cur_center = point / this.viewport_container.width() * (this.high - this.low) + this.low;\n }\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n\n this.changed();\n this.request_redraw();\n },\n\n zoom_out: function() {\n if (this.max_high === 0) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span * this.zoom_factor / 2;\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n this.changed();\n this.request_redraw();\n },\n\n /** Resize viewport. Use this method if header/footer content has changed in size. */\n resize_viewport: function() {\n this.viewport_container.height(\n this.container.height() - this.top_container.height() - this.bottom_container.height()\n );\n },\n\n /** Called when window is resized. */\n resize_window: function() {\n this.resize_viewport();\n this.request_redraw();\n },\n\n /** Show a Drawable in the overview. */\n set_overview: function(drawable) {\n if (this.overview_drawable) {\n // If drawable to be set as overview is already in overview, do nothing.\n // Otherwise, remove overview.\n if (this.overview_drawable.dataset.id === drawable.dataset.id) {\n return;\n }\n this.overview_viewport.find(\".track\").remove();\n }\n\n // Set new overview.\n var overview_drawable = drawable.copy({\n content_div: this.overview_viewport\n });\n\n var view = this;\n overview_drawable.header_div.hide();\n overview_drawable.is_overview = true;\n view.overview_drawable = overview_drawable;\n this.overview_drawable.postdraw_actions = () => {\n view.overview_highlight.show().height(view.overview_drawable.content_div.height());\n view.overview_viewport.height(\n view.overview_drawable.content_div.height() + view.overview_box.outerHeight()\n );\n view.overview_close.show();\n view.resize_window();\n };\n view.overview_drawable.request_draw();\n this.changed();\n },\n\n /** Close and reset overview. */\n reset_overview: function() {\n // Update UI.\n $(\".tooltip\").remove();\n this.overview_viewport.find(\".track-tile\").remove();\n this.overview_viewport.height(this.default_overview_height);\n this.overview_box.height(this.default_overview_height);\n this.overview_close.hide();\n this.overview_highlight.hide();\n view.resize_window();\n view.overview_drawable = null;\n }\n});\n\n/**\n * Encapsulation of a tool that users can apply to tracks/datasets.\n */\nvar TracksterTool = tools_mod.Tool.extend({\n defaults: {\n track: null\n },\n\n initialize: function(options) {\n tools_mod.Tool.prototype.initialize.call(this, options);\n\n // Restore tool visibility from state; default to hidden.\n var hidden = true;\n if (options.tool_state !== undefined && options.tool_state.hidden !== undefined) {\n hidden = options.tool_state.hidden;\n }\n this.set(\"hidden\", hidden);\n\n // FIXME: need to restore tool values from options.tool_state\n\n // HACK: remove some inputs because Trackster does yet not work with them.\n this.remove_inputs([\"data\", \"hidden_data\", \"conditional\"]);\n },\n\n state_dict: function(options) {\n return _.extend(this.get_inputs_dict(), {\n hidden: !this.is_visible()\n });\n }\n});\n\n/**\n * View renders tool parameter HTML and updates parameter value as it is changed in the HTML.\n */\nvar ToolParameterView = Backbone.View.extend({\n events: {\n \"change :input\": \"update_value\"\n },\n\n render: function() {\n var param_div = this.$el.addClass(\"param-row\");\n var param = this.model;\n\n // Param label.\n var label_div = $(\"
\")\n .addClass(\"param-label\")\n .text(param.get(\"label\"))\n .appendTo(param_div);\n // Param HTML.\n var html_div = $(\"
\")\n .addClass(\"param-input\")\n .html(param.get(\"html\"))\n .appendTo(param_div);\n // Set initial value.\n html_div.find(\":input\").val(param.get(\"value\"));\n\n // Add to clear floating layout.\n $(\"
\").appendTo(param_div);\n },\n\n update_value: function(update_event) {\n this.model.set_value($(update_event.target).val());\n }\n});\n\n/**\n * View for TracksterTool.\n */\nvar TracksterToolView = Backbone.View.extend({\n initialize: function(options) {\n this.model.on(\"change:hidden\", this.set_visible, this);\n },\n\n /**\n * Render tool UI.\n */\n render: function() {\n var self = this;\n var tool = this.model;\n var parent_div = this.$el.addClass(\"dynamic-tool\").hide();\n\n // Prevent div events from propogating to other elements.\n parent_div\n .bind(\"drag\", e => {\n e.stopPropagation();\n })\n .click(e => {\n e.stopPropagation();\n })\n .bind(\"dblclick\", e => {\n e.stopPropagation();\n })\n .keydown(e => {\n e.stopPropagation();\n });\n\n // Add name, inputs.\n var name_div = $(\"
\")\n .appendTo(parent_div)\n .text(tool.get(\"name\"));\n tool.get(\"inputs\").each(param => {\n // Render parameter.\n var param_view = new ToolParameterView({ model: param });\n param_view.render();\n parent_div.append(param_view.$el);\n });\n\n // Highlight value for inputs for easy replacement.\n parent_div.find(\"input\").click(function() {\n $(this).select();\n });\n\n // Add buttons for running on dataset, region.\n var run_tool_row = $(\"
\")\n .addClass(\"param-row\")\n .appendTo(parent_div);\n var run_on_dataset_button = $(\"\")\n .attr(\"value\", \"Run on complete dataset\")\n .appendTo(run_tool_row);\n var run_on_region_button = $(\"\")\n .attr(\"value\", \"Run on visible region\")\n .appendTo(run_tool_row);\n run_on_region_button.click(() => {\n // Run tool to create new track.\n self.run_on_region();\n });\n run_on_dataset_button.click(() => {\n self.run_on_dataset();\n });\n\n if (tool.is_visible()) {\n this.$el.show();\n }\n },\n\n /**\n * Show or hide tool depending on tool visibility state.\n */\n set_visible: function() {\n this.$el.toggle(this.model.is_visible());\n },\n\n /**\n * Update tool parameters.\n */\n update_params: function() {\n for (var i = 0; i < this.params.length; i++) {\n this.params[i].update_value();\n }\n },\n\n /**\n * Run tool on dataset. Output is placed in dataset's history and no changes to viz are made.\n */\n run_on_dataset: function() {\n var tool = this.model;\n this.run(\n // URL params.\n {\n target_dataset_id: this.model.get(\"track\").dataset.id,\n action: \"rerun\",\n tool_id: tool.id\n },\n null,\n track_data => {\n Galaxy.modal.show({\n title: `${tool.get(\"name\")} is Running`,\n body: `${tool.get(\n \"name\"\n )} is running on the complete dataset. Tool outputs are in dataset's history.`,\n buttons: {\n Close: function() {\n Galaxy.modal.hide();\n }\n }\n });\n }\n );\n },\n\n /**\n * Run dataset on visible region. This creates a new track and sets the track's contents\n * to the tool's output.\n */\n run_on_region: function() {\n //\n // Create track for tool's output immediately to provide user feedback.\n //\n var track = this.model.get(\"track\");\n\n var tool = this.model;\n\n var region = new visualization.GenomeRegion({\n chrom: track.view.chrom,\n start: track.view.low,\n end: track.view.high\n });\n\n var url_params = {\n target_dataset_id: track.dataset.id,\n action: \"rerun\",\n tool_id: tool.id,\n regions: [region.toJSON()]\n };\n\n var current_track = track;\n\n var // Set name of track to include tool name, parameters, and region used.\n track_name = tool.get(\"name\") + current_track.tool_region_and_parameters_str(region);\n\n var container;\n\n // If track not in a group, create a group for it and add new track to group. If track\n // already in group, add track to group.\n if (current_track.container === view) {\n // Create new group.\n var group = new DrawableGroup(view, view, {\n name: track.config.get_value(\"name\")\n });\n\n // Replace track with group.\n var index = current_track.container.replace_drawable(current_track, group, false);\n\n // Update HTML.\n // FIXME: this is ugly way to replace a track with a group -- make this easier via\n // a Drawable or DrawableCollection function.\n group.container_div.insertBefore(current_track.view.content_div.children()[index]);\n group.add_drawable(current_track);\n current_track.container_div.appendTo(group.content_div);\n container = group;\n } else {\n // Use current group.\n container = current_track.container;\n }\n\n // Create and init new track.\n var new_track = new current_track.constructor(view, container, {\n name: track_name,\n hda_ldda: \"hda\"\n });\n new_track.init_for_tool_data();\n new_track.change_mode(current_track.mode);\n new_track.set_filters_manager(current_track.filters_manager.copy(new_track));\n new_track.update_icons();\n container.add_drawable(new_track);\n new_track.tiles_div.text(\"Starting job.\");\n\n // Run tool.\n this.run(url_params, new_track, track_data => {\n new_track.set_dataset(new data.Dataset(track_data));\n new_track.tiles_div.text(\"Running job.\");\n new_track.init();\n });\n },\n\n /**\n * Run tool using a set of URL params and a success callback.\n */\n run: function(url_params, new_track, success_callback) {\n // Run tool.\n url_params.inputs = this.model.get_inputs_dict();\n var ss_deferred = new util.ServerStateDeferred({\n ajax_settings: {\n url: `${Galaxy.root}api/tools`,\n data: JSON.stringify(url_params),\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\"\n },\n interval: 2000,\n success_fn: function(response) {\n return response !== \"pending\";\n }\n });\n\n // Start with this status message.\n //new_track.container_div.addClass(\"pending\");\n //new_track.content_div.html(DATA_PENDING);\n\n $.when(ss_deferred.go()).then(response => {\n if (response === \"no converter\") {\n // No converter available for input datasets, so cannot run tool.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_NOCONVERTER);\n } else if (response.error) {\n // General error.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);\n } else {\n // Job submitted and running.\n success_callback(response);\n }\n });\n }\n});\n\n/**\n * Generates scale values based on filter and feature's value for filter.\n */\nvar FilterScaler = function(filter, default_val) {\n painters.Scaler.call(this, default_val);\n this.filter = filter;\n};\n\nFilterScaler.prototype.gen_val = function(feature_data) {\n // If filter is not initalized yet, return default val.\n if (\n this.filter.high === Number.MAX_VALUE ||\n this.filter.low === -Number.MAX_VALUE ||\n this.filter.low === this.filter.high\n ) {\n return this.default_val;\n }\n\n // Scaling value is ratio of (filter's value compared to low) to (complete filter range).\n return (parseFloat(feature_data[this.filter.index]) - this.filter.low) / (this.filter.high - this.filter.low);\n};\n\n/**\n * Tiles drawn by tracks.\n */\nvar Tile = function(track, region, w_scale, canvas, data) {\n this.track = track;\n this.region = region;\n this.low = region.get(\"start\");\n this.high = region.get(\"end\");\n this.w_scale = w_scale;\n this.canvas = canvas;\n // Wrap element in div for background and to provide container for tile-specific elements.\n this.html_elt = $(\"
\").append(canvas);\n this.data = data;\n this.stale = false;\n};\n\n/**\n * Perform pre-display actions.\n */\nTile.prototype.predisplay_actions = () => {};\n\nvar LineTrackTile = function(track, region, w_scale, canvas, data) {\n Tile.call(this, track, region, w_scale, canvas, data);\n};\nLineTrackTile.prototype.predisplay_actions = () => {};\n\nvar FeatureTrackTile = function(\n track,\n region,\n w_scale,\n canvas,\n data,\n mode,\n message,\n all_slotted,\n feature_mapper,\n incomplete_features,\n seq_data\n) {\n // Attribute init.\n Tile.call(this, track, region, w_scale, canvas, data);\n this.mode = mode;\n this.all_slotted = all_slotted;\n this.feature_mapper = feature_mapper;\n this.has_icons = false;\n this.incomplete_features = incomplete_features;\n // Features drawn based on data from other tiles.\n this.other_tiles_features_drawn = {};\n this.seq_data = seq_data;\n\n // Add message + action icons to tile's html.\n /*\n This does not work right now because a random set of reads is returned by the server.\n When the server can respond with more data systematically, renable these icons.\n if (message) {\n this.has_icons = true;\n\n var\n tile = this;\n canvas = this.html_elt.children()[0],\n message_div = $(\"
\").addClass(\"tile-message\")\n // -1 to account for border.\n .css({'height': ERROR_PADDING, 'width': canvas.width}).prependTo(this.html_elt);\n\n // Handle message; only message currently is that only the first N elements are displayed.\n var tile_region = new visualization.GenomeRegion({\n chrom: track.view.chrom,\n start: this.low,\n end: this.high\n }),\n num_features = data.length,\n more_down_icon = $(\"\").addClass(\"icon more-down\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data including depth\")\n .tooltip().appendTo(message_div),\n more_across_icon = $(\"\").addClass(\"icon more-across\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data excluding depth\")\n .tooltip().appendTo(message_div);\n\n // Set up actions for icons.\n more_down_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.DEEP_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n\n more_across_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.BROAD_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n }\n */\n};\nextend(FeatureTrackTile.prototype, Tile.prototype);\n\n/**\n * Sets up support for popups.\n */\nFeatureTrackTile.prototype.predisplay_actions = () => {\n /*\n FIXME: use a canvas library to handle popups.\n //\n // Add support for popups.\n //\n var tile = this,\n popups = {};\n\n // Only show popups in Pack mode.\n if (tile.mode !== \"Pack\") { return; }\n\n $(this.html_elt).hover(\n function() {\n this.hovered = true;\n $(this).mousemove();\n },\n function() {\n this.hovered = false;\n // Clear popup if it is still hanging around (this is probably not needed)\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n } ).mousemove(function (e) {\n // Use the hover plugin to get a delay before showing popup\n if ( !this.hovered ) { return; }\n // Get feature data for position.\n var\n this_offset = $(this).offset(),\n offsetX = e.pageX - this_offset.left,\n offsetY = e.pageY - this_offset.top,\n feature_data = tile.feature_mapper.get_feature_data(offsetX, offsetY),\n feature_uid = (feature_data ? feature_data[0] : null);\n // Hide visible popup if not over a feature or over a different feature.\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").each(function() {\n if ( !feature_uid ||\n $(this).attr(\"id\") !== feature_uid.toString() ) {\n $(this).remove();\n }\n });\n\n if (feature_data) {\n // Get or create popup.\n var popup = popups[feature_uid];\n if (!popup) {\n // Create feature's popup element.\n var feature_dict = {\n name: feature_data[3],\n start: feature_data[1],\n end: feature_data[2],\n strand: feature_data[4]\n },\n filters = tile.track.filters_manager.filters,\n filter;\n\n // Add filter values to feature dict.\n for (var i = 0; i < filters.length; i++) {\n filter = filters[i];\n feature_dict[filter.name] = feature_data[filter.index];\n }\n\n // Build popup.\n popup = $(\"
\").attr(\"id\", feature_uid).addClass(\"feature-popup\");\n var table = $(\"\"),\n key, value, row;\n for (key in feature_dict) {\n value = feature_dict[key];\n row = $(\"\").appendTo(table);\n $(\" or other required elements.\n\tthead: [ 1, \"
\").appendTo(row).text(key);\n $(\"\").attr(\"align\", \"left\").appendTo(row)\n .text(typeof(value) === 'number' ? round(value, 2) : value);\n }\n popup.append( $(\"
\").append( table ) );\n popups[feature_uid] = popup;\n }\n\n // Attach popup to track's overlay.\n popup.appendTo( $(this).parents(\".track-content\").children(\".overlay\") );\n\n // Offsets are within canvas, but popup must be positioned relative to parent element.\n // parseInt strips \"px\" from left, top measurements. +7 so that mouse pointer does not\n // overlap popup.\n var\n popupX = offsetX + parseInt( tile.html_elt.css(\"left\"), 10 ) - popup.width() / 2,\n popupY = offsetY + parseInt( tile.html_elt.css(\"top\"), 10 ) + 7;\n popup.css(\"left\", popupX + \"px\").css(\"top\", popupY + \"px\");\n }\n else if (!e.isPropagationStopped()) {\n // Propogate event to other tiles because overlapping tiles prevent mousemove from being\n // called on tiles under this tile.\n e.stopPropagation();\n $(this).siblings().each(function() {\n $(this).trigger(e);\n });\n }\n })\n .mouseleave(function() {\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n });\n */\n};\n\n/**\n * Tracks are objects can be added to the View.\n *\n * Track object hierarchy:\n * Track\n * -> LabelTrack\n * -> TiledTrack\n * ----> LineTrack\n * ----> ReferenceTrack\n * ----> FeatureTrack\n * -------> ReadTrack\n * ----> VariantTrack\n */\nvar Track = function(view, container, obj_dict) {\n // For now, track's container is always view.\n extend(obj_dict, {\n drag_handle_class: \"draghandle\"\n });\n Drawable.call(this, view, container, obj_dict);\n\n //\n // Attribute init.\n //\n\n // Set or create dataset.\n this.dataset = null;\n if (obj_dict.dataset) {\n // Dataset can be a Backbone model or a dict that can be used to create a model.\n this.dataset =\n obj_dict.dataset instanceof Backbone.Model ? obj_dict.dataset : new data.Dataset(obj_dict.dataset);\n }\n this.dataset_check_type = \"converted_datasets_state\";\n this.data_url_extra_params = {};\n this.data_query_wait = \"data_query_wait\" in obj_dict ? obj_dict.data_query_wait : DEFAULT_DATA_QUERY_WAIT;\n // A little ugly creating data manager right now due to transition to Backbone-based objects.\n this.data_manager =\n \"data_manager\" in obj_dict\n ? obj_dict.data_manager\n : new visualization.GenomeDataManager({\n dataset: this.dataset,\n // HACK: simulate 'genome' attributes from view for now.\n // View should eventually use Genome object.\n genome: new visualization.Genome({\n key: view.dbkey,\n chroms_info: {\n chrom_info: view.chrom_data\n }\n }),\n data_mode_compatible: this.data_and_mode_compatible,\n can_subset: this.can_subset\n });\n\n // Height attributes: min height, max height, and visible height.\n this.min_height_px = 16;\n this.max_height_px = 800;\n this.visible_height_px = this.config.get_value(\"height\");\n\n //\n // Create content div, which is where track is displayed, and add to container if available.\n //\n this.content_div = $(\"
\").appendTo(this.container_div);\n if (this.container) {\n this.container.content_div.append(this.container_div);\n if (!(\"resize\" in obj_dict) || obj_dict.resize) {\n this.add_resize_handle();\n }\n }\n};\n\nextend(Track.prototype, Drawable.prototype, {\n action_icons_def: [\n // Change track mode.\n {\n name: \"mode_icon\",\n title: \"Set display mode\",\n css_class: \"chevron-expand\",\n on_click_fn: function() {}\n },\n // Hide/show content.\n Drawable.prototype.action_icons_def[0],\n // Set track as overview.\n {\n name: \"overview_icon\",\n title: \"Set as overview\",\n css_class: \"application-dock-270\",\n on_click_fn: function(track) {\n track.view.set_overview(track);\n }\n },\n // Edit config.\n Drawable.prototype.action_icons_def[1],\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function(drawable) {\n // TODO: update Tooltip text.\n if (drawable.filters_manager.visible()) {\n drawable.filters_manager.clear_filters();\n } else {\n drawable.filters_manager.init_filters();\n }\n drawable.filters_manager.toggle();\n }\n },\n // Toggle track tool.\n {\n name: \"tools_icon\",\n title: \"Tool\",\n css_class: \"hammer\",\n on_click_fn: function(track) {\n // TODO: update Tooltip text.\n\n track.tool.toggle();\n\n // Update track name.\n if (track.tool.is_visible()) {\n track.set_name(track.config.get_value(\"name\") + track.tool_region_and_parameters_str());\n } else {\n track.revert_name();\n }\n // HACK: name change modifies icon placement, which leaves tooltip incorrectly placed.\n $(\".tooltip\").remove();\n }\n },\n // Go to parameter exploration visualization.\n {\n name: \"param_space_viz_icon\",\n title: \"Tool parameter space visualization\",\n css_class: \"arrow-split\",\n on_click_fn: function(track) {\n var html = `Tool:${track.tool.get(\n \"name\"\n )}
Dataset:${track.config.get_value(\n \"name\"\n )}
Region(s): `;\n\n var cancel_fn = () => {\n Galaxy.modal.hide();\n $(window).unbind(\"keypress.check_enter_esc\");\n };\n\n var ok_fn = () => {\n var regions_to_use = $('select[name=\"regions\"] option:selected').val(),\n regions,\n view_region = new visualization.GenomeRegion({\n chrom: view.chrom,\n start: view.low,\n end: view.high\n }),\n bookmarked_regions = _.map(\n $(\".bookmark\"),\n elt =>\n new visualization.GenomeRegion({\n from_str: $(elt)\n .children(\".position\")\n .text()\n })\n );\n\n // Get regions for visualization.\n if (regions_to_use === \"cur\") {\n // Use only current region.\n regions = [view_region];\n } else if (regions_to_use === \"bookmarks\") {\n // Use only bookmarks.\n regions = bookmarked_regions;\n } else {\n // Use both current region and bookmarks.\n regions = [view_region].concat(bookmarked_regions);\n }\n\n Galaxy.modal.hide();\n\n // Go to visualization.\n window.location.href = `${Galaxy.root}visualization/sweepster?${$.param({\n dataset_id: track.dataset.id,\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n regions: JSON.stringify(new Backbone.Collection(regions).toJSON())\n })}`;\n };\n\n var check_enter_esc = e => {\n if ((e.keyCode || e.which) === 27) {\n // Escape key\n cancel_fn();\n } else if ((e.keyCode || e.which) === 13) {\n // Enter key\n ok_fn();\n }\n };\n\n // show dialog\n Galaxy.modal.show({\n title: \"Visualize tool parameter space and output from different parameter settings?\",\n body: html,\n buttons: { No: cancel_fn, Yes: ok_fn }\n });\n }\n },\n // Remove track.\n Drawable.prototype.action_icons_def[2]\n ],\n\n can_draw: function() {\n return this.dataset && Drawable.prototype.can_draw.call(this);\n },\n\n build_container_div: function() {\n return $(\"
\")\n .addClass(\"track\")\n .attr(\"id\", `track_${this.id}`);\n },\n\n /**\n * Set track's dataset.\n */\n set_dataset: function(dataset) {\n this.dataset = dataset;\n this.data_manager.set(\"dataset\", dataset);\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function() {\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Add resizing handle to drawable's container_div.\n */\n add_resize_handle: function() {\n var track = this;\n var in_handle = false;\n var in_drag = false;\n var drag_control = $(\"
\");\n // Control shows on hover over track, stays while dragging\n $(track.container_div).hover(\n () => {\n if (track.config.get_value(\"content_visible\")) {\n in_handle = true;\n drag_control.show();\n }\n },\n () => {\n in_handle = false;\n if (!in_drag) {\n drag_control.hide();\n }\n }\n );\n // Update height and force redraw of current view while dragging,\n // clear cache to force redraw of other tiles.\n drag_control\n .hide()\n .bind(\"dragstart\", (e, d) => {\n in_drag = true;\n d.original_height = $(track.content_div).height();\n })\n .bind(\"drag\", (e, d) => {\n var new_height = Math.min(\n Math.max(d.original_height + d.deltaY, track.min_height_px),\n track.max_height_px\n );\n $(track.tiles_div).css(\"height\", new_height);\n track.visible_height_px = track.max_height_px === new_height ? 0 : new_height;\n track.on_resize();\n })\n .bind(\"dragend\", (e, d) => {\n track.tile_cache.clear();\n in_drag = false;\n if (!in_handle) {\n drag_control.hide();\n }\n track.config.set_value(\"height\", track.visible_height_px);\n track.changed();\n })\n .appendTo(track.container_div);\n },\n\n /**\n * Hide any elements that are part of the tracks contents area. Should\n * remove as approprite, the track will be redrawn by show_contents.\n */\n hide_contents: function() {\n // Hide tiles.\n this.tiles_div.hide();\n // Hide any y axis labels (common to several track types)\n this.container_div.find(\".yaxislabel, .track-resize\").hide();\n },\n\n show_contents: function() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n this.container_div.find(\".yaxislabel, .track-resize\").show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n /**\n * Returns track type.\n */\n get_type: function() {\n // Order is important: start with most-specific classes and go up the track hierarchy.\n if (this instanceof LabelTrack) {\n return \"LabelTrack\";\n } else if (this instanceof ReferenceTrack) {\n return \"ReferenceTrack\";\n } else if (this instanceof LineTrack) {\n return \"LineTrack\";\n } else if (this instanceof ReadTrack) {\n return \"ReadTrack\";\n } else if (this instanceof VariantTrack) {\n return \"VariantTrack\";\n } else if (this instanceof CompositeTrack) {\n return \"CompositeTrack\";\n } else if (this instanceof FeatureTrack) {\n return \"FeatureTrack\";\n }\n return \"\";\n },\n\n /**\n * Remove visualization content and display message.\n */\n show_message: function(msg_html) {\n this.tiles_div.remove();\n return $(\"\")\n .addClass(\"message\")\n .html(msg_html)\n .appendTo(this.content_div);\n },\n\n /**\n * Initialize and draw the track.\n */\n init: function(retry) {\n // FIXME: track should have a 'state' attribute that is checked on load; this state attribute should be\n // used in this function to determine what action(s) to take.\n\n var track = this;\n track.enabled = false;\n track.tile_cache.clear();\n track.data_manager.clear();\n /*\n if (!track.content_div.text()) {\n track.content_div.text(DATA_LOADING);\n }\n */\n // Remove old track content (e.g. tiles, messages).\n track.content_div.children().remove();\n track.container_div.removeClass(\"nodata error pending\");\n\n track.tiles_div = $(\"
\")\n .addClass(\"tiles\")\n .appendTo(track.content_div);\n\n //\n // Tracks with no dataset id are handled differently.\n // FIXME: is this really necessary?\n //\n if (!track.dataset.id) {\n return;\n }\n\n // Get dataset state; if state is fine, enable and draw track. Otherwise, show message\n // about track status.\n var init_deferred = $.Deferred();\n\n var params = {\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n data_type: this.dataset_check_type,\n chrom: track.view.chrom,\n retry: retry\n };\n\n $.getJSON(this.dataset.url(), params, result => {\n if (!result || result === \"error\" || result.kind === \"error\") {\n // Dataset is in error state.\n track.container_div.addClass(\"error\");\n var msg_elt = track.show_message(DATA_ERROR);\n if (result.message) {\n // Add links to (a) show error and (b) try again.\n msg_elt.append(\n $(\"\")\n .text(\"View error\")\n .click(() => {\n Galaxy.modal.show({\n title: \"Trackster Error\",\n body: `
${result.message}
`,\n buttons: {\n Close: function() {\n Galaxy.modal.hide();\n }\n }\n });\n })\n );\n msg_elt.append($(\"\").text(\" \"));\n msg_elt.append(\n $(\"\")\n .text(\"Try again\")\n .click(() => {\n track.init(true);\n })\n );\n }\n } else if (result === \"no converter\") {\n track.container_div.addClass(\"error\");\n track.show_message(DATA_NOCONVERTER);\n } else if (\n result === \"no data\" ||\n (result.data !== undefined && (result.data === null || result.data.length === 0))\n ) {\n track.container_div.addClass(\"nodata\");\n track.show_message(DATA_NONE);\n } else if (result === \"pending\") {\n track.container_div.addClass(\"pending\");\n track.show_message(DATA_PENDING);\n //$(\"\").attr(\"src\", image_path + \"/yui/rel_interstitial_loading.gif\").appendTo(track.tiles_div);\n setTimeout(() => {\n track.init();\n }, track.data_query_wait);\n } else if (result === \"data\" || result.status === \"data\") {\n if (result.valid_chroms) {\n track.valid_chroms = result.valid_chroms;\n track.update_icons();\n }\n track.tiles_div.text(DATA_OK);\n if (track.view.chrom) {\n track.tiles_div.text(\"\");\n track.tiles_div.css(\"height\", `${track.visible_height_px}px`);\n track.enabled = true;\n // predraw_init may be asynchronous, wait for it and then draw\n $.when.apply($, track.predraw_init()).done(() => {\n init_deferred.resolve();\n track.container_div.removeClass(\"nodata error pending\");\n track.request_draw();\n });\n } else {\n init_deferred.resolve();\n }\n }\n });\n\n this.update_icons();\n return init_deferred;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {\n var track = this;\n return $.getJSON(\n track.dataset.url(),\n {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n },\n result => {\n var data = result.data;\n\n // Tracks may not have stat data either because there is no data or data is not yet ready.\n if (data && data.min !== undefined && data.max !== undefined) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update config, prefs\n track.config.set_default_value(\"min_value\", min_value);\n track.config.set_default_value(\"max_value\", max_value);\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n }\n );\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function() {\n return this;\n }\n});\n\nvar TiledTrack = function(view, container, obj_dict) {\n Track.call(this, view, container, obj_dict);\n\n var track = this;\n\n // Make track moveable.\n moveable(track.container_div, track.drag_handle_class, \".group\", track);\n\n // Attribute init.\n this.filters_manager = new filters_mod.FiltersManager(this, \"filters\" in obj_dict ? obj_dict.filters : null);\n // HACK: set filters manager for data manager.\n // FIXME: prolly need function to set filters and update data_manager reference.\n this.data_manager.set(\"filters_manager\", this.filters_manager);\n this.filters_available = false;\n this.tool = obj_dict.tool\n ? new TracksterTool(\n _.extend(obj_dict.tool, {\n track: this,\n tool_state: obj_dict.tool_state\n })\n )\n : null;\n this.tile_cache = new visualization.Cache(TILE_CACHE_SIZE);\n this.left_offset = 0;\n\n if (this.header_div) {\n //\n // Setup filters.\n //\n this.set_filters_manager(this.filters_manager);\n\n //\n // Create dynamic tool view.\n //\n if (this.tool) {\n var tool_view = new TracksterToolView({ model: this.tool });\n tool_view.render();\n this.dynamic_tool_div = tool_view.$el;\n this.header_div.after(this.dynamic_tool_div);\n }\n }\n\n // Add tiles_div, overlay_div to content_div.\n this.tiles_div = $(\"
\")\n .addClass(\"tiles\")\n .appendTo(this.content_div);\n if (!this.config.get_value(\"content_visible\")) {\n this.tiles_div.hide();\n }\n this.overlay_div = $(\"
\")\n .addClass(\"overlay\")\n .appendTo(this.content_div);\n\n if (obj_dict.mode) {\n this.change_mode(obj_dict.mode);\n }\n};\nextend(TiledTrack.prototype, Drawable.prototype, Track.prototype, {\n action_icons_def: Track.prototype.action_icons_def.concat([\n // Show more rows when all features are not slotted.\n {\n name: \"show_more_rows_icon\",\n title: \"To minimize track height, not all feature rows are displayed. Click to display more rows.\",\n css_class: \"exclamation\",\n on_click_fn: function(track) {\n $(\".tooltip\").remove();\n track.slotters[track.view.resolution_px_b].max_rows *= 2;\n track.request_draw({ clear_tile_cache: true });\n },\n hide: true\n }\n ]),\n\n /**\n * Returns a copy of the track. The copy uses the same data manager so that the tracks can share data.\n */\n copy: function(container) {\n // Create copy.\n var obj_dict = this.to_dict();\n extend(obj_dict, {\n data_manager: this.data_manager\n });\n var new_track = new this.constructor(this.view, container, obj_dict);\n // Misc. init and return.\n new_track.change_mode(this.mode);\n new_track.enabled = this.enabled;\n return new_track;\n },\n\n /**\n * Set filters manager + HTML elements.\n */\n set_filters_manager: function(filters_manager) {\n this.filters_manager = filters_manager;\n this.header_div.after(this.filters_manager.parent_div);\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function() {\n return {\n track_type: this.get_type(),\n dataset: {\n id: this.dataset.id,\n hda_ldda: this.dataset.get(\"hda_ldda\")\n },\n prefs: this.config.to_key_value_dict(),\n mode: this.mode,\n filters: this.filters_manager.to_dict(),\n tool_state: this.tool ? this.tool.state_dict() : {}\n };\n },\n\n /**\n * Set track bounds for current chromosome.\n */\n set_min_max: function() {\n var track = this;\n\n return $.getJSON(\n track.dataset.url(),\n {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n },\n result => {\n var data = result.data;\n if (\n isNaN(parseFloat(track.config.get_value(\"min_value\"))) ||\n isNaN(parseFloat(track.config.get_value(\"max_value\")))\n ) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update the prefs\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n }\n );\n },\n\n /**\n * Change track's mode.\n */\n change_mode: function(new_mode) {\n var track = this;\n // TODO: is it necessary to store the mode in two places (.mode and track_config)?\n track.mode = new_mode;\n track.config.set_value(\"mode\", new_mode);\n // FIXME: find a better way to get Auto data w/o clearing cache; using mode in the\n // data manager would work if Auto data were checked for compatibility when a specific\n // mode is chosen.\n if (new_mode === \"Auto\") {\n this.data_manager.clear();\n }\n track.request_draw({ clear_tile_cache: true });\n this.action_icons.mode_icon.attr(\"title\", `Set display mode (now: ${track.mode})`);\n return track;\n },\n\n /**\n * Update track's buttons.\n */\n update_icons: function() {\n var track = this;\n\n //\n // Show/hide filter icon.\n //\n track.action_icons.filters_icon.toggle(track.filters_available);\n\n //\n // Show/hide tool icons.\n //\n track.action_icons.tools_icon.toggle(track.tool !== null);\n track.action_icons.param_space_viz_icon.toggle(track.tool !== null);\n },\n\n /**\n * Generate a key for the tile cache.\n * TODO: create a TileCache object (like DataCache) and generate key internally.\n */\n _gen_tile_cache_key: function(w_scale, tile_region) {\n return `${w_scale}_${tile_region}`;\n },\n\n /**\n * Request that track be drawn.\n */\n request_draw: function(options) {\n if (options && options.clear_tile_cache) {\n this.tile_cache.clear();\n }\n this.view.request_redraw(options, this);\n },\n\n /**\n * Actions to be taken before drawing.\n */\n before_draw: function() {\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n },\n\n /**\n * Draw track. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -clear_after: clear old tiles after drawing new tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n *\n * NOTE: this function should never be called directly; use request_draw() so that drawing\n * management can be used.\n */\n _draw: function(options) {\n if (!this.can_draw()) {\n return;\n }\n\n var clear_after = options && options.clear_after;\n var low = this.view.low;\n var high = this.view.high;\n var range = high - low;\n var width = this.view.container.width();\n var w_scale = this.view.resolution_px_b;\n var resolution = 1 / w_scale;\n\n // For overview, adjust high, low, resolution, and w_scale.\n if (this.is_overview) {\n low = this.view.max_low;\n high = this.view.max_high;\n w_scale = width / (view.max_high - view.max_low);\n resolution = 1 / w_scale;\n }\n\n this.before_draw();\n\n //\n // Method for moving and/or removing tiles:\n // (a) mark all elements for removal using class 'remove'\n // (b) during tile drawing/placement, remove class for elements that are moved;\n // this occurs in show_tile()\n // (c) after drawing tiles, remove elements still marked for removal\n // (i.e. that still have class 'remove').\n //\n\n // Step (a) for (re)moving tiles.\n this.tiles_div.children().addClass(\"remove\");\n\n var // Tile width in bases.\n tile_width = Math.floor(TILE_SIZE * resolution);\n\n var // Index of first tile that overlaps visible region.\n tile_index = Math.floor(low / tile_width);\n\n var tile_region;\n var tile_promise;\n var tile_promises = [];\n var tiles = [];\n // Draw tiles.\n while (tile_index * tile_width < high) {\n // Get tile region.\n tile_region = new visualization.GenomeRegion({\n chrom: this.view.chrom,\n start: tile_index * tile_width,\n // Tile high cannot be larger than view.max_high, which the chromosome length.\n end: Math.min((tile_index + 1) * tile_width, this.view.max_high)\n });\n tile_promise = this.draw_helper(tile_region, w_scale, options);\n tile_promises.push(tile_promise);\n $.when(tile_promise).then(tile => {\n tiles.push(tile);\n });\n\n // Go to next tile.\n tile_index += 1;\n }\n\n // Step (c) for (re)moving tiles when clear_after is false.\n if (!clear_after) {\n this.tiles_div\n .children(\".remove\")\n .removeClass(\"remove\")\n .remove();\n }\n\n // When all tiles are drawn, call post-draw actions.\n var track = this;\n $.when.apply($, tile_promises).then(() => {\n // Step (c) for (re)moving tiles when clear_after is true:\n track.tiles_div.children(\".remove\").remove();\n\n // Only do postdraw actions for tiles; instances where tiles may not be drawn include:\n // (a) ReferenceTrack without sufficient resolution;\n // (b) data_fetch = false.\n tiles = _.filter(tiles, t => t !== null);\n if (tiles.length !== 0) {\n track.postdraw_actions(tiles, width, w_scale, clear_after);\n }\n });\n },\n\n /**\n * Add a maximum/minimum label to track.\n */\n _add_yaxis_label: function(type, on_change) {\n var track = this;\n var css_class = type === \"max\" ? \"top\" : \"bottom\";\n var text = type === \"max\" ? \"max\" : \"min\";\n var pref_name = type === \"max\" ? \"max_value\" : \"min_value\";\n var label = this.container_div.find(`.yaxislabel.${css_class}`);\n var value = round(track.config.get_value(pref_name), 1);\n\n // Default action for on_change is to redraw track.\n on_change =\n on_change ||\n (() => {\n track.request_draw({ clear_tile_cache: true });\n });\n\n if (label.length !== 0) {\n // Label already exists, so update value.\n label.text(value);\n } else {\n // Add label.\n label = $(\"
\")\n .text(value)\n .make_text_editable({\n num_cols: 12,\n on_finish: function(new_val) {\n $(\".tooltip\").remove();\n track.config.set_value(pref_name, round(new_val, 1));\n on_change();\n },\n help_text: `Set ${text} value`\n })\n .addClass(`yaxislabel ${css_class}`)\n .css(\"color\", this.config.get_value(\"label_color\"));\n this.container_div.prepend(label);\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n var line_track_tiles = _.filter(tiles, tile => tile instanceof LineTrackTile);\n\n //\n // Take different actions depending on whether there are LineTrack/Coverage tiles.\n //\n\n if (line_track_tiles.length > 0) {\n // -- Drawing in Coverage mode. --\n\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n var track = this;\n _.each(tiles, tile => {\n if (!(tile instanceof LineTrackTile)) {\n tile.html_elt.remove();\n track.draw_helper(tile.region, w_scale, {\n force: true,\n mode: \"Coverage\"\n });\n }\n });\n\n track._add_yaxis_label(\"max\");\n } else {\n // -- Drawing in non-Coverage mode. --\n\n // Remove Y-axis labels because there are no line track tiles.\n this.container_div.find(\".yaxislabel\").remove();\n\n //\n // If some tiles have icons, set padding of tiles without icons so features and rows align.\n //\n var icons_present = _.find(tiles, tile => tile.has_icons);\n\n if (icons_present) {\n _.each(tiles, tile => {\n if (!tile.has_icons) {\n // Need to align with other tile(s) that have icons.\n tile.html_elt.css(\"padding-top\", ERROR_PADDING);\n }\n });\n }\n }\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function(data) {\n return this.mode;\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function(display_mode) {\n // FIXME: needs to be implemented.\n },\n\n /**\n * Returns a list of drawables to draw. Defaults to current track.\n */\n _get_drawables: function() {\n return [this];\n },\n\n /**\n * Retrieves from cache, draws, or sets up drawing for a single tile. Returns either a Tile object or a\n * jQuery.Deferred object that is fulfilled when tile can be drawn again. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n */\n draw_helper: function(region, w_scale, options) {\n // Init options if necessary to avoid having to check if options defined.\n if (!options) {\n options = {};\n }\n\n var force = options.force;\n var mode = options.mode || this.mode;\n var resolution = 1 / w_scale;\n\n var // Useful vars.\n track = this;\n\n var drawables = this._get_drawables();\n var key = this._gen_tile_cache_key(w_scale, region);\n\n var is_tile = o => o && \"track\" in o;\n\n // Check tile cache, if found show existing tile in correct position\n var tile = force ? undefined : track.tile_cache.get_elt(key);\n if (tile) {\n if (is_tile(tile)) {\n track.show_tile(tile, w_scale);\n }\n return tile;\n }\n\n // If not fetching data, nothing more to do because data is needed to draw tile.\n if (options.data_fetch === false) {\n return null;\n }\n\n // Function that returns data/Deferreds needed to draw tile.\n var get_tile_data = () => {\n // HACK: if display mode (mode) is in continuous data modes, data mode must be coverage to get coverage data.\n var data_mode = _.find(CONTINUOUS_DATA_MODES, m => m === mode) ? \"Coverage\" : mode;\n\n // Map drawable object to data needed for drawing.\n var tile_data = _.map(drawables, (\n d // Get the track data/promise.\n ) => d.data_manager.get_data(region, data_mode, resolution, track.data_url_extra_params));\n\n // Get reference data/promise.\n if (view.reference_track) {\n tile_data.push(\n view.reference_track.data_manager.get_data(\n region,\n mode,\n resolution,\n view.reference_track.data_url_extra_params\n )\n );\n }\n\n return tile_data;\n };\n\n //\n // When data is available, draw tile.\n //\n var tile_drawn = $.Deferred();\n track.tile_cache.set_elt(key, tile_drawn);\n $.when.apply($, get_tile_data()).then(() => {\n var tile_data = get_tile_data();\n var tracks_data = tile_data;\n var seq_data;\n\n // Deferreds may show up here if trying to fetch a subset of data from a superset data chunk\n // that cannot be subsetted. This may occur if the superset has a message. If there is a\n // Deferred, try again from the top. NOTE: this condition could (should?) be handled by the\n // GenomeDataManager in visualization module.\n if (_.find(tile_data, d => util.is_deferred(d))) {\n track.tile_cache.set_elt(key, undefined);\n $.when(track.draw_helper(region, w_scale, options)).then(tile => {\n tile_drawn.resolve(tile);\n });\n return;\n }\n\n // If sequence data is available, subset to get only data in region.\n if (view.reference_track) {\n seq_data = view.reference_track.data_manager.subset_entry(tile_data.pop(), region);\n }\n\n // Get drawing modes, heights for all tracks.\n var drawing_modes = [];\n\n var drawing_heights = [];\n\n _.each(drawables, (d, i) => {\n var mode = d.mode;\n var data = tracks_data[i];\n if (mode === \"Auto\") {\n mode = d.get_mode(data);\n d.update_auto_mode(mode);\n }\n drawing_modes.push(mode);\n drawing_heights.push(d.get_canvas_height(data, mode, w_scale, width));\n });\n\n var canvas = track.view.canvas_manager.new_canvas();\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var all_data_index = 0;\n\n var width = Math.ceil((tile_high - tile_low) * w_scale) + track.left_offset;\n\n var height = _.max(drawing_heights);\n var tile;\n\n //\n // Draw all tracks on tile.\n //\n canvas.width = width;\n // Height is specified in options or is the height found above.\n canvas.height = options.height || height;\n var ctx = canvas.getContext(\"2d\");\n ctx.translate(track.left_offset, 0);\n if (drawables.length > 1) {\n ctx.globalAlpha = 0.5;\n ctx.globalCompositeOperation = \"source-over\";\n }\n _.each(drawables, (d, i) => {\n tile = d.draw_tile(tracks_data[i], ctx, drawing_modes[i], region, w_scale, seq_data);\n });\n\n // Don't cache, show if no tile.\n if (tile !== undefined) {\n track.tile_cache.set_elt(key, tile);\n track.show_tile(tile, w_scale);\n }\n\n tile_drawn.resolve(tile);\n });\n\n return tile_drawn;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function(result, mode, w_scale, canvas_width) {\n return this.visible_height_px;\n },\n\n /**\n * Draw line (bigwig) data onto tile.\n */\n _draw_line_track_tile: function(result, ctx, mode, region, w_scale) {\n // Set min/max if they are not already set.\n // FIXME: checking for different null/undefined/0 is messy; it would be nice to\n // standardize this.\n if ([undefined, null].indexOf(this.config.get_value(\"min_value\")) !== -1) {\n this.config.set_value(\"min_value\", 0);\n }\n if ([undefined, null, 0].indexOf(this.config.get_value(\"max_value\")) !== -1) {\n this.config.set_value(\"max_value\", _.max(_.map(result.data, d => d[1])) || 0);\n }\n\n var canvas = ctx.canvas;\n\n var painter = new painters.LinePainter(\n result.data,\n region.get(\"start\"),\n region.get(\"end\"),\n this.config.to_key_value_dict(),\n mode\n );\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new LineTrackTile(this, region, w_scale, canvas, result.data);\n },\n\n /**\n * Draw a track tile.\n * @param result result from server\n * @param ctx canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n */\n draw_tile: function(result, ctx, mode, region, w_scale, ref_seq) {},\n\n /**\n * Show track tile and perform associated actions. Showing tile may actually move\n * an existing tile rather than reshowing it.\n */\n show_tile: function(tile, w_scale) {\n var track = this;\n var tile_element = tile.html_elt;\n\n // -- Show/move tile element. --\n\n tile.predisplay_actions();\n\n // Position tile element based on current viewport.\n var left = Math.round((tile.low - (this.is_overview ? this.view.max_low : this.view.low)) * w_scale);\n if (this.left_offset) {\n left -= this.left_offset;\n }\n tile_element.css(\"left\", left);\n\n if (tile_element.hasClass(\"remove\")) {\n // Step (b) for (re)moving tiles. See _draw() function for description of algorithm\n // for removing tiles.\n tile_element.removeClass(\"remove\");\n } else {\n // Showing new tile.\n this.tiles_div.append(tile_element);\n }\n\n // -- Update track, tile heights based on new tile. --\n\n tile_element.css(\"height\", \"auto\");\n\n // Update max height based on current tile's height.\n // BUG/HACK: tile_element.height() returns a height that is always 2 pixels too big, so\n // -2 to get the correct height.\n this.max_height_px = Math.max(this.max_height_px, tile_element.height() - 2);\n\n // Update height for all tiles based on max height.\n tile_element\n .parent()\n .children()\n .css(\"height\", `${this.max_height_px}px`);\n\n // Update track height based on max height and visible height.\n var track_height = this.max_height_px;\n if (this.visible_height_px !== 0) {\n track_height = Math.min(this.max_height_px, this.visible_height_px);\n }\n this.tiles_div.css(\"height\", `${track_height}px`);\n },\n\n /**\n * Utility function that creates a label string describing the region and parameters of a track's tool.\n */\n tool_region_and_parameters_str: function(region) {\n var track = this;\n var region_str = region !== undefined ? region.toString() : \"all\";\n var param_str = _.values(track.tool.get_inputs_dict()).join(\", \");\n return ` - region=[${region_str}], parameters=[${param_str}]`;\n },\n\n /**\n * Returns true if data is compatible with a given mode.\n */\n data_and_mode_compatible: function(data, mode) {\n // Only handle modes that user can set.\n if (mode === \"Auto\") {\n return true;\n } else if (mode === \"Coverage\") {\n // Histogram mode requires bigwig data.\n return data.dataset_type === \"bigwig\";\n } else if (data.dataset_type === \"bigwig\" || data.extra_info === \"no_detail\") {\n // All other modes--Dense, Squish, Pack--require data + details.\n return false;\n } else {\n return true;\n }\n },\n\n /**\n * Returns true if entry can be subsetted.\n */\n can_subset: function(entry) {\n // Do not subset entries with a message or data with no detail.\n if (entry.message || entry.extra_info === \"no_detail\") {\n return false;\n } else if (entry.dataset_type === \"bigwig\") {\n // Subset only if data is single-bp resolution.\n return entry.data[1][0] - entry.data[0][0] === 1;\n }\n\n return true;\n },\n\n /**\n * Set up track to receive tool data.\n */\n init_for_tool_data: function() {\n // Set up track to fetch raw data rather than converted data.\n this.data_manager.set(\"data_type\", \"raw_data\");\n this.data_query_wait = 1000;\n this.dataset_check_type = \"state\";\n\n // FIXME: this is optional and is disabled for now because it creates\n // additional converter jobs without a clear benefit because indexing\n // such a small dataset provides little benefit.\n //\n // Set up one-time, post-draw to clear tool execution settings.\n //\n /*\n this.normal_postdraw_actions = this.postdraw_actions;\n this.postdraw_actions = function(tiles, width, w_scale, clear_after) {\n var self = this;\n\n // Do normal postdraw init.\n self.normal_postdraw_actions(tiles, width, w_scale, clear_after);\n\n // Tool-execution specific post-draw init:\n\n // Reset dataset check, wait time.\n self.dataset_check_type = 'converted_datasets_state';\n self.data_query_wait = DEFAULT_DATA_QUERY_WAIT;\n\n // Reset data URL when dataset indexing has completed/when not pending.\n var ss_deferred = new util.ServerStateDeferred({\n url: self.dataset_state_url,\n url_params: {dataset_id : self.dataset.id, hda_ldda: self.dataset.get('hda_ldda')},\n interval: self.data_query_wait,\n // Set up deferred to check dataset state until it is not pending.\n success_fn: function(result) { return result !== \"pending\"; }\n });\n $.when(ss_deferred.go()).then(function() {\n // Dataset is indexed, so use converted data.\n self.data_manager.set('data_type', 'data');\n });\n\n // Reset post-draw actions function.\n self.postdraw_actions = self.normal_postdraw_actions;\n };\n */\n }\n});\n\nvar LabelTrack = function(view, container) {\n Track.call(this, view, container, {\n resize: false,\n header: false\n });\n this.container_div.addClass(\"label-track\");\n};\nextend(LabelTrack.prototype, Track.prototype, {\n init: function() {\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {},\n\n _draw: function(options) {\n var view = this.view;\n var range = view.high - view.low;\n\n var tickDistance = Math.floor(Math.pow(10, Math.floor(Math.log(range) / Math.log(10))));\n\n var position = Math.floor(view.low / tickDistance) * tickDistance;\n var width = this.view.container.width();\n var new_div = $(\"
\").addClass(\"label-container\");\n while (position < view.high) {\n var screenPosition = Math.floor((position - view.low) / range * width);\n new_div.append(\n $(\"
\")\n .addClass(\"pos-label\")\n .text(util.commatize(position))\n .css({\n left: screenPosition\n })\n );\n position += tickDistance;\n }\n this.content_div.children(\":first\").remove();\n this.content_div.append(new_div);\n }\n});\n\n// FIXME: Composite tracks have code for showing composite tracks with line tracks and\n// composite tracks with line + feature tracks. It's probably best if different classes\n// are created for each type of composite track.\n\n/**\n * A tiled track composed of multiple other tracks. Composite tracks only work with\n * bigwig data for now.\n */\nvar CompositeTrack = function(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n\n // Init drawables; each drawable is a copy so that config/preferences\n // are independent of each other. Also init left offset.\n this.drawables = [];\n if (\"drawables\" in obj_dict) {\n var drawable;\n for (var i = 0; i < obj_dict.drawables.length; i++) {\n drawable = obj_dict.drawables[i];\n this.drawables[i] = object_from_template(drawable, view, null);\n\n // Track's left offset is the max of all tracks.\n if (drawable.left_offset > this.left_offset) {\n this.left_offset = drawable.left_offset;\n }\n }\n this.enabled = true;\n }\n\n // Set all feature tracks to use Coverage mode.\n _.each(this.drawables, d => {\n if (d instanceof FeatureTrack || d instanceof ReadTrack) {\n d.change_mode(\"Coverage\");\n }\n });\n\n this.update_icons();\n\n // HACK: needed for saving object for now. Need to generalize get_type() to all Drawables and use\n // that for object type.\n this.obj_type = \"CompositeTrack\";\n};\n\nextend(CompositeTrack.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }\n ]);\n },\n\n action_icons_def: [\n // Create composite track from group's tracks.\n {\n name: \"composite_icon\",\n title: \"Show individual tracks\",\n css_class: \"layers-stack\",\n on_click_fn: function(track) {\n $(\".tooltip\").remove();\n track.show_group();\n }\n }\n ].concat(TiledTrack.prototype.action_icons_def),\n\n // HACK: CompositeTrack should inherit from DrawableCollection as well.\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: DrawableCollection.prototype.to_dict,\n\n add_drawable: DrawableCollection.prototype.add_drawable,\n\n unpack_drawables: DrawableCollection.prototype.unpack_drawables,\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function() {\n // Propogate visible height to other tracks.\n var visible_height = this.visible_height_px;\n _.each(this.drawables, d => {\n d.visible_height_px = visible_height;\n });\n Track.prototype.on_resize.call(this);\n },\n\n /**\n * Change mode for all tracks.\n */\n change_mode: function(new_mode) {\n TiledTrack.prototype.change_mode.call(this, new_mode);\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].change_mode(new_mode);\n }\n },\n\n /**\n * Initialize component tracks and draw composite track when all components are initialized.\n */\n init: function() {\n // Init components.\n var init_deferreds = [];\n for (var i = 0; i < this.drawables.length; i++) {\n init_deferreds.push(this.drawables[i].init());\n }\n\n // Draw composite when all tracks available.\n var track = this;\n $.when.apply($, init_deferreds).then(() => {\n track.enabled = true;\n track.request_draw();\n });\n },\n\n update_icons: function() {\n // For now, hide filters and tool.\n this.action_icons.filters_icon.hide();\n this.action_icons.tools_icon.hide();\n this.action_icons.param_space_viz_icon.hide();\n },\n\n can_draw: Drawable.prototype.can_draw,\n\n _get_drawables: function() {\n return this.drawables;\n },\n\n /**\n * Replace this track with group that includes individual tracks.\n */\n show_group: function() {\n // Create group with individual tracks.\n var group = new DrawableGroup(this.view, this.container, {\n name: this.config.get_value(\"name\")\n });\n\n var track;\n for (var i = 0; i < this.drawables.length; i++) {\n track = this.drawables[i];\n track.update_icons();\n group.add_drawable(track);\n track.container = group;\n group.content_div.append(track.container_div);\n }\n\n // Replace track with group.\n var index = this.container.replace_drawable(this, group, true);\n group.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions taken before drawing.\n */\n before_draw: function() {\n // FIXME: this is needed only if there are feature tracks in the composite track.\n // TiledTrack.prototype.before_draw.call(this);\n\n //\n // Set min, max for tracks to be largest min, max.\n //\n\n // Get smallest min, biggest max.\n var min = _.min(_.map(this.drawables, d => d.config.get_value(\"min_value\")));\n\n var max = _.max(_.map(this.drawables, d => d.config.get_value(\"max_value\")));\n\n this.config.set_value(\"min_value\", min);\n this.config.set_value(\"max_value\", max);\n\n // Set all tracks to smallest min, biggest max.\n _.each(this.drawables, d => {\n d.config.set_value(\"min_value\", min);\n d.config.set_value(\"max_value\", max);\n });\n },\n\n /**\n * Update minimum, maximum for component tracks.\n */\n update_all_min_max: function() {\n var track = this;\n var min_value = this.config.get_value(\"min_value\");\n var max_value = this.config.get_value(\"max_value\");\n _.each(this.drawables, d => {\n d.config.set_value(\"min_value\", min_value);\n d.config.set_value(\"max_value\", max_value);\n });\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n // All tiles must be the same height in order to draw LineTracks, so redraw tiles as needed.\n var max_height = -1;\n\n var i;\n for (i = 0; i < tiles.length; i++) {\n var height = tiles[i].html_elt.find(\"canvas\").height();\n if (height > max_height) {\n max_height = height;\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.html_elt.find(\"canvas\").height() !== max_height) {\n this.draw_helper(tile.region, w_scale, {\n force: true,\n height: max_height\n });\n tile.html_elt.remove();\n }\n }\n\n // Wrap function so that it can be called without object reference.\n var track = this;\n\n var t = () => {\n track.update_all_min_max();\n };\n\n // Add min, max labels.\n this._add_yaxis_label(\"min\", t);\n this._add_yaxis_label(\"max\", t);\n }\n});\n\n/**\n * Displays reference genome data.\n */\nvar ReferenceTrack = function(view) {\n TiledTrack.call(this, view, { content_div: view.top_labeltrack }, { resize: false, header: false });\n\n // Use offset to ensure that bases at tile edges are drawn.\n this.left_offset = view.canvas_manager.char_width_px;\n this.container_div.addClass(\"reference-track\");\n this.data_url = `${Galaxy.root}api/genomes/${this.view.dbkey}`;\n this.data_url_extra_params = { reference: true };\n this.data_manager = new visualization.GenomeReferenceDataManager({\n data_url: this.data_url,\n can_subset: this.can_subset\n });\n this.hide_contents();\n};\nextend(ReferenceTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"height\",\n type: \"int\",\n default_value: 13,\n hidden: true\n }\n ]);\n },\n\n init: function() {\n this.data_manager.clear();\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {},\n\n can_draw: Drawable.prototype.can_draw,\n\n /**\n * Draws and shows tile if reference data can be displayed; otherwise track is hidden.\n */\n draw_helper: function(region, w_scale, options) {\n var cur_visible = this.tiles_div.is(\":visible\");\n var new_visible;\n var tile = null;\n if (w_scale > this.view.canvas_manager.char_width_px) {\n this.tiles_div.show();\n new_visible = true;\n tile = TiledTrack.prototype.draw_helper.call(this, region, w_scale, options);\n } else {\n new_visible = false;\n this.tiles_div.hide();\n }\n\n // NOTE: viewport resizing conceptually belongs in postdraw_actions(), but currently\n // postdraw_actions is not called when reference track not shown due to no tiles. If\n // it is moved to postdraw_actions, resize must be called each time because cannot\n // easily detect showing/hiding.\n\n // If showing or hiding reference track, resize viewport.\n if (cur_visible !== new_visible) {\n this.view.resize_viewport();\n }\n\n return tile;\n },\n\n can_subset: function(entry) {\n return true;\n },\n\n /**\n * Draw ReferenceTrack tile.\n */\n draw_tile: function(data, ctx, mode, region, w_scale) {\n // Try to subset data.\n var subset = this.data_manager.subset_entry(data, region);\n\n var seq_data = subset.data;\n\n // Draw sequence data.\n var canvas = ctx.canvas;\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"center\";\n for (var c = 0, str_len = seq_data.length; c < str_len; c++) {\n ctx.fillStyle = this.view.get_base_color(seq_data[c]);\n ctx.fillText(seq_data[c], Math.floor(c * w_scale), 10);\n }\n return new Tile(this, region, w_scale, canvas, subset);\n }\n});\n\n/**\n * Track displays continuous/numerical data. Track expects position data in 1-based format, i.e. wiggle format.\n */\nvar LineTrack = function(view, container, obj_dict) {\n this.mode = \"Histogram\";\n TiledTrack.call(this, view, container, obj_dict);\n // Need left offset for drawing overlap near tile boundaries.\n this.left_offset = 30;\n\n // If server has byte-range support, use BBI data manager to read directly from the BBI file.\n // FIXME: there should be a flag to wait for this check to complete before loading the track.\n var self = this;\n $.when(supportsByteRanges(`${Galaxy.root}datasets/${this.dataset.id}/display`)).then(supportsByteRanges => {\n if (supportsByteRanges) {\n self.data_manager = new bbi.BBIDataManager({\n dataset: self.dataset\n });\n }\n });\n};\n\nextend(LineTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n { key: \"color\", label: \"Color\", type: \"color\" },\n {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken before drawing.\n */\n // FIXME: can the default behavior be used; right now it breaks during resize.\n before_draw: function() {},\n\n /**\n * Draw track tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale) {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n },\n\n /**\n * Subset data only if data is at single-base pair resolution.\n */\n can_subset: function(entry) {\n return entry.data[1][0] - entry.data[0][0] === 1;\n },\n\n /**\n * Add min, max labels.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n // Add min, max labels.\n this._add_yaxis_label(\"max\");\n this._add_yaxis_label(\"min\");\n }\n});\n\n/**\n * Diagonal heatmap for showing interactions data.\n */\nvar DiagonalHeatmapTrack = function(view, container, obj_dict) {\n this.mode = \"Heatmap\";\n TiledTrack.call(this, view, container, obj_dict);\n};\n\nextend(DiagonalHeatmapTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Heatmap\"],\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"pos_color\",\n label: \"Positive Color\",\n type: \"color\",\n default_value: \"#FF8C00\"\n },\n {\n key: \"neg_color\",\n label: \"Negative Color\",\n type: \"color\",\n default_value: \"#4169E1\"\n },\n {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"int\",\n default_value: undefined\n },\n {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"int\",\n default_value: undefined\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 500,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {\n var track = this;\n return $.getJSON(\n track.dataset.url(),\n {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n },\n result => {\n var data = result.data;\n }\n );\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale) {\n // Paint onto canvas.\n var canvas = ctx.canvas;\n\n var painter = new painters.DiagonalHeatmapPainter(\n result.data,\n region.get(\"start\"),\n region.get(\"end\"),\n this.config.to_key_value_dict(),\n mode\n );\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new Tile(this, region, w_scale, canvas, result.data);\n }\n});\n\n/**\n * A track that displays features/regions. Track expects position data in BED format, i.e. 0-based, half-open.\n */\nvar FeatureTrack = function(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.container_div.addClass(\"feature-track\");\n this.summary_draw_height = 30;\n this.slotters = {};\n this.start_end_dct = {};\n this.left_offset = 200;\n\n // this.painter = painters.LinkedFeaturePainter;\n this.set_painter_from_config();\n};\nextend(FeatureTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"block_color\",\n label: \"Block color\",\n type: \"color\"\n },\n {\n key: \"reverse_strand_color\",\n label: \"Antisense strand color\",\n type: \"color\"\n },\n {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n },\n {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true,\n help: \"Show the number of items in each bin when drawing summary histogram\"\n },\n {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"connector_style\",\n label: \"Connector style\",\n type: \"select\",\n default_value: \"fishbones\",\n options: [\n {\n label: \"Line with arrows\",\n value: \"fishbone\"\n },\n { label: \"Arcs\", value: \"arcs\" }\n ]\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.set_painter_from_config();\n this.request_draw({ clear_tile_cache: true });\n },\n\n set_painter_from_config: function() {\n if (this.config.get_value(\"connector_style\") === \"arcs\") {\n this.painter = painters.ArcLinkedFeaturePainter;\n } else {\n this.painter = painters.LinkedFeaturePainter;\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var track = this;\n var i;\n\n var line_track_tiles = _.filter(tiles, t => t instanceof LineTrackTile);\n\n //\n // Finish drawing of features that span multiple tiles. Features that span multiple tiles\n // are labeled incomplete on the tile level because they cannot be completely drawn.\n //\n if (line_track_tiles.length === 0) {\n // Gather incomplete features together.\n var all_incomplete_features = {};\n _.each(_.pluck(tiles, \"incomplete_features\"), inc_features => {\n _.each(inc_features, feature => {\n all_incomplete_features[feature[0]] = feature;\n });\n });\n\n // Draw incomplete features on each tile.\n var self = this;\n _.each(tiles, tile => {\n // Remove features already drawn on tile originally.\n var tile_incomplete_features = _.omit(\n all_incomplete_features,\n _.map(tile.incomplete_features, f => f[0])\n );\n\n // Remove features already drawn on tile in past postdraw actions.\n tile_incomplete_features = _.omit(tile_incomplete_features, _.keys(tile.other_tiles_features_drawn));\n\n // Draw tile's incomplete features.\n if (_.size(tile_incomplete_features) !== 0) {\n // To draw incomplete features, create new canvas, copy original canvas/tile onto new\n // canvas, and then draw incomplete features on the new canvas.\n var features = {\n data: _.values(tile_incomplete_features)\n };\n\n var new_canvas = self.view.canvas_manager.new_canvas();\n var new_canvas_ctx = new_canvas.getContext(\"2d\");\n new_canvas.height = Math.max(\n tile.canvas.height,\n self.get_canvas_height(features, tile.mode, tile.w_scale, 100)\n );\n new_canvas.width = tile.canvas.width;\n new_canvas_ctx.drawImage(tile.canvas, 0, 0);\n new_canvas_ctx.translate(track.left_offset, 0);\n var new_tile = self.draw_tile(\n features,\n new_canvas_ctx,\n tile.mode,\n tile.region,\n tile.w_scale,\n tile.seq_data\n );\n $(tile.canvas).replaceWith($(new_tile.canvas));\n tile.canvas = new_canvas;\n _.extend(tile.other_tiles_features_drawn, all_incomplete_features);\n }\n });\n }\n\n // If mode is Coverage and tiles do not share max, redraw tiles as necessary using new max.\n /*\n This code isn't used right now because Coverage mode uses predefined max in preferences.\n if (track.mode === \"Coverage\") {\n // Get global max.\n var global_max = -1;\n for (i = 0; i < tiles.length; i++) {\n var cur_max = tiles[i].max_val;\n if (cur_max > global_max) {\n global_max = cur_max;\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.max_val !== global_max) {\n tile.html_elt.remove();\n track.draw_helper(tile.index, w_scale, { more_tile_data: { force: true, max: global_max } } );\n }\n }\n }\n */\n\n //\n // Update filter attributes, UI.\n //\n\n // Update filtering UI.\n if (track.filters_manager) {\n var filters = track.filters_manager.filters;\n var f;\n for (f = 0; f < filters.length; f++) {\n filters[f].update_ui_elt();\n }\n\n // Determine if filters are available; this is based on the tiles' data.\n // Criteria for filter to be available: (a) it is applicable to tile data and (b) filter min != filter max.\n var filters_available = false;\n\n var example_feature;\n var filter;\n for (i = 0; i < tiles.length; i++) {\n if (tiles[i].data.length) {\n example_feature = tiles[i].data[0];\n for (f = 0; f < filters.length; f++) {\n filter = filters[f];\n if (filter.applies_to(example_feature) && filter.min !== filter.max) {\n filters_available = true;\n break;\n }\n }\n }\n }\n\n // If filter availability changed, hide filter div if necessary and update menu.\n if (track.filters_available !== filters_available) {\n track.filters_available = filters_available;\n if (!track.filters_available) {\n track.filters_manager.hide();\n }\n track.update_icons();\n }\n }\n\n //\n // If not all features slotted, show icon for showing more rows (slots).\n //\n if (tiles[0] instanceof FeatureTrackTile) {\n var all_slotted = true;\n for (i = 0; i < tiles.length; i++) {\n if (!tiles[i].all_slotted) {\n all_slotted = false;\n break;\n }\n }\n this.action_icons.show_more_rows_icon.toggle(!all_slotted);\n } else {\n this.action_icons.show_more_rows_icon.hide();\n }\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function(mode) {\n if (this.mode === \"Auto\") {\n if (mode === \"no_detail\") {\n mode = \"feature spans\";\n }\n this.action_icons.mode_icon.attr(\"title\", `Set display mode (now: Auto/${mode})`);\n }\n },\n\n /**\n * Place features in slots for drawing (i.e. pack features).\n * this.slotters[level] is created in this method. this.slotters[level]\n * is a Slotter object. Returns the number of slots used to pack features.\n */\n incremental_slots: function(level, features, mode) {\n // Get/create incremental slots for level. If display mode changed,\n // need to create new slots.\n\n var dummy_context = this.view.canvas_manager.dummy_context;\n\n var slotter = this.slotters[level];\n if (!slotter || slotter.mode !== mode) {\n slotter = new slotting.FeatureSlotter(level, mode, MAX_FEATURE_DEPTH, x => dummy_context.measureText(x));\n this.slotters[level] = slotter;\n }\n\n return slotter.slot_features(features);\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function(data) {\n var mode;\n // HACK: use no_detail mode track is in overview to prevent overview from being too large.\n if (data.extra_info === \"no_detail\" || this.is_overview) {\n mode = \"no_detail\";\n } else {\n // Choose b/t Squish and Pack.\n // Proxy measures for using Squish:\n // (a) error message re: limiting number of features shown;\n // (b) X number of features shown;\n // (c) size of view shown.\n // TODO: cannot use (a) and (b) because it requires coordinating mode across tiles;\n // fix this so that tiles are redrawn as necessary to use the same mode.\n //if ( (result.message && result.message.match(/^Only the first [\\d]+/)) ||\n // (result.data && result.data.length > 2000) ||\n //var data = result.data;\n // if ( (data.length && data.length < 4) ||\n // (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) ) {\n if (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) {\n mode = \"Squish\";\n } else {\n mode = \"Pack\";\n }\n }\n return mode;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function(result, mode, w_scale, canvas_width) {\n if (mode === \"Coverage\" || result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // All other modes require slotting.\n var rows_required = this.incremental_slots(w_scale, result.data, mode);\n // HACK: use dummy painter to get required height. Painter should be extended so that get_required_height\n // works as a static function.\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return Math.max(this.min_height_px, dummy_painter.get_required_height(rows_required, canvas_width));\n }\n },\n\n /**\n * Draw FeatureTrack tile.\n * @param result result from server\n * @param cxt canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n * @param cur_tile true if drawing is occurring on a currently visible tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale, ref_seq, cur_tile) {\n var track = this;\n var canvas = ctx.canvas;\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var left_offset = this.left_offset;\n\n // If data is line track data, draw line track tile.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n }\n\n // Handle row-by-row tracks\n\n // Preprocessing: filter features and determine whether all unfiltered features have been slotted.\n var filtered = [];\n\n var slots = this.slotters[w_scale].slots;\n var all_slotted = true;\n if (result.data) {\n var filters = this.filters_manager.filters;\n for (var i = 0, len = result.data.length; i < len; i++) {\n var feature = result.data[i];\n var hide_feature = false;\n var filter;\n for (var f = 0, flen = filters.length; f < flen; f++) {\n filter = filters[f];\n filter.update_attrs(feature);\n if (!filter.keep(feature)) {\n hide_feature = true;\n break;\n }\n }\n if (!hide_feature) {\n // Feature visible.\n filtered.push(feature);\n // Set flag if not slotted.\n if (!(feature[0] in slots)) {\n all_slotted = false;\n }\n }\n }\n }\n\n // Create painter.\n var filter_alpha_scaler = this.filters_manager.alpha_filter\n ? new FilterScaler(this.filters_manager.alpha_filter)\n : null;\n\n var filter_height_scaler = this.filters_manager.height_filter\n ? new FilterScaler(this.filters_manager.height_filter)\n : null;\n\n var painter = new this.painter(\n filtered,\n tile_low,\n tile_high,\n this.config.to_key_value_dict(),\n mode,\n filter_alpha_scaler,\n filter_height_scaler,\n // HACK: ref_seq only be defined for ReadTracks, and only the ReadPainter accepts that argument\n ref_seq,\n b => track.view.get_base_color(b)\n );\n\n var feature_mapper = null;\n\n ctx.fillStyle = this.config.get_value(\"block_color\");\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"right\";\n\n if (result.data) {\n // Draw features.\n var draw_results = painter.draw(ctx, canvas.width, canvas.height, w_scale, slots);\n feature_mapper = draw_results.feature_mapper;\n incomplete_features = draw_results.incomplete_features;\n feature_mapper.translation = -left_offset;\n }\n\n // If not drawing on current tile, create new tile.\n if (!cur_tile) {\n return new FeatureTrackTile(\n track,\n region,\n w_scale,\n canvas,\n result.data,\n mode,\n result.message,\n all_slotted,\n feature_mapper,\n incomplete_features,\n ref_seq\n );\n }\n }\n});\n\n/**\n * Displays variant data.\n */\nvar VariantTrack = function(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.painter = painters.VariantPainter;\n this.summary_draw_height = 30;\n\n // Maximum resolution is ~45 pixels/base, so use this size left offset to ensure that full\n // variant is drawn when variant is at start of tile.\n this.left_offset = 30;\n};\n\nextend(VariantTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"color\",\n label: \"Histogram color\",\n type: \"color\"\n },\n {\n key: \"show_sample_data\",\n label: \"Show sample data\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"show_labels\",\n label: \"Show summary and sample labels\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"summary_height\",\n label: \"Locus summary height\",\n type: \"float\",\n default_value: 20\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale) {\n // Data could be coverage data or variant data.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, \"Histogram\", region, w_scale);\n } else {\n // result.dataset_type === 'variant'\n var view = this.view;\n\n var painter = new this.painter(\n result.data,\n region.get(\"start\"),\n region.get(\"end\"),\n this.config.to_key_value_dict(),\n mode,\n b => view.get_base_color(b)\n );\n\n painter.draw(ctx, ctx.canvas.width, ctx.canvas.height, w_scale);\n return new Tile(this, region, w_scale, ctx.canvas, result.data);\n }\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function(result, mode, w_scale, canvas_width) {\n if (result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // HACK: sample_names is not be defined when dataset definition is fetched before\n // dataset is complete (as is done when running tools). In that case, fall back on\n // # of samples in data. This can be fixed by re-requesting dataset definition\n // in init.\n var num_samples = this.dataset.get_metadata(\"sample_names\")\n ? this.dataset.get_metadata(\"sample_names\").length\n : 0;\n if (num_samples === 0 && result.data.length !== 0) {\n // Sample data is separated by commas, so this computes # of samples:\n num_samples = result.data[0][7].match(/,/g);\n if (num_samples === null) {\n num_samples = 1;\n } else {\n num_samples = num_samples.length + 1;\n }\n }\n\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return dummy_painter.get_required_height(num_samples);\n }\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {\n var deferreds = [Track.prototype.predraw_init.call(this)];\n // FIXME: updating dataset metadata is only needed for visual analysis. Can\n // this be moved somewhere else?\n if (!this.dataset.get_metadata(\"sample_names\")) {\n deferreds.push(this.dataset.fetch());\n }\n return deferreds;\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var line_track_tiles = _.filter(tiles, t => t instanceof LineTrackTile);\n\n // Add summary/sample labels if needed and not already included.\n var sample_names = this.dataset.get_metadata(\"sample_names\");\n if (\n line_track_tiles.length === 0 &&\n this.config.get_value(\"show_labels\") &&\n sample_names &&\n sample_names.length > 1\n ) {\n var font_size;\n\n // Add and/or style labels.\n if (this.container_div.find(\".yaxislabel.variant\").length === 0) {\n // Add summary and sample labels.\n\n // Add summary label to middle of summary area.\n font_size = this.config.get_value(\"summary_height\") / 2;\n this.tiles_div.prepend(\n $(\"
\")\n .text(\"Summary\")\n .addClass(\"yaxislabel variant top\")\n .css({\n \"font-size\": `${font_size}px`,\n top: `${(this.config.get_value(\"summary_height\") - font_size) / 2}px`\n })\n );\n\n // Show sample labels.\n if (this.config.get_value(\"show_sample_data\")) {\n var samples_div_html = sample_names.join(\"
\");\n\n this.tiles_div.prepend(\n $(\"
\")\n .html(samples_div_html)\n .addClass(\"yaxislabel variant top sample\")\n .css({\n top: this.config.get_value(\"summary_height\")\n })\n );\n }\n }\n\n // Style labels.\n\n // Match sample font size to mode.\n font_size = `${this.mode === \"Squish\" ? 5 : 10}px`;\n $(this.tiles_div)\n .find(\".sample\")\n .css({\n \"font-size\": font_size,\n \"line-height\": font_size\n });\n // Color labels to preference color.\n $(this.tiles_div)\n .find(\".yaxislabel\")\n .css(\"color\", this.config.get_value(\"label_color\"));\n } else {\n // Remove all labels.\n this.container_div.find(\".yaxislabel.variant\").remove();\n }\n }\n});\n\n/**\n * Track that displays mapped reads. Track expects position data in 1-based, closed format, i.e. SAM/BAM format.\n */\nvar ReadTrack = function(view, container, obj_dict) {\n FeatureTrack.call(this, view, container, obj_dict);\n this.painter = painters.ReadPainter;\n this.update_icons();\n};\n\nextend(ReadTrack.prototype, Drawable.prototype, TiledTrack.prototype, FeatureTrack.prototype, {\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"block_color\",\n label: \"Histogram color\",\n type: \"color\"\n },\n {\n key: \"detail_block_color\",\n label: \"Sense strand block color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n },\n {\n key: \"reverse_strand_color\",\n label: \"Antisense strand block color\",\n type: \"color\",\n default_value: \"#DDDDDD\"\n },\n {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n },\n {\n key: \"show_insertions\",\n label: \"Show insertions\",\n type: \"bool\",\n default_value: false\n },\n {\n key: \"show_differences\",\n label: \"Show differences only\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n }\n});\n\n/**\n * Objects that can be added to a view.\n */\nvar addable_objects = {\n CompositeTrack: CompositeTrack,\n DrawableGroup: DrawableGroup,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n FeatureTrack: FeatureTrack,\n LineTrack: LineTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n // For backward compatibility, map vcf track to variant.\n VcfTrack: VariantTrack\n};\n\n/**\n * Create new object from a template. A template can be either an object dictionary or an\n * object itself.\n */\nvar object_from_template = (template, view, container) => {\n if (\"copy\" in template) {\n // Template is an object.\n return template.copy(container);\n } else {\n // Template is a dictionary.\n var drawable_type = template.obj_type;\n // For backward compatibility:\n if (!drawable_type) {\n drawable_type = template.track_type;\n }\n return new addable_objects[drawable_type](view, container, template);\n }\n};\n\nexport default {\n TracksterView: TracksterView,\n DrawableGroup: DrawableGroup,\n LineTrack: LineTrack,\n FeatureTrack: FeatureTrack,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n CompositeTrack: CompositeTrack,\n object_from_template: object_from_template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/tracks.js","import * as _ from \"libs/underscore\";\n/**\n * View for track/group header.\n */\nvar TrackHeaderView = Backbone.View.extend({\n className: \"track-header\",\n\n initialize: function() {\n // Watch and update name changes.\n this.model.config.get(\"name\").on(\"change:value\", this.update_name, this);\n this.render();\n },\n\n render: function() {\n this.$el.append($(\"
\").addClass(this.model.drag_handle_class));\n this.$el.append(\n $(\"
\")\n .addClass(\"track-name\")\n .text(this.model.config.get_value(\"name\"))\n );\n\n // Icons container.\n this.action_icons = {};\n this.render_action_icons();\n\n // Suppress double clicks in header so that they do not impact viz under header.\n this.$el.dblclick(e => {\n e.stopPropagation();\n });\n\n // Needed for floating elts in header.\n this.$el.append($(\"
\"));\n },\n\n update_name: function() {\n this.$el.find(\".track-name\").text(this.model.config.get_value(\"name\"));\n },\n\n render_action_icons: function() {\n var self = this;\n this.icons_div = $(\"
\")\n .addClass(\"track-icons\")\n .hide()\n .appendTo(this.$el);\n _.each(this.model.action_icons_def, icon_dict => {\n self.add_action_icon(\n icon_dict.name,\n icon_dict.title,\n icon_dict.css_class,\n icon_dict.on_click_fn,\n icon_dict.prepend,\n icon_dict.hide\n );\n });\n\n // Set up behavior for modes popup.\n this.set_display_modes(this.model.display_modes);\n },\n\n /**\n * Add an action icon to this object. Appends icon unless prepend flag is specified.\n */\n add_action_icon: function(name, title, css_class, on_click_fn, prepend, hide) {\n var self = this;\n this.action_icons[name] = $(\"\")\n .attr(\"title\", title)\n .addClass(\"icon-button\")\n .addClass(css_class)\n .tooltip()\n .click(() => {\n on_click_fn(self.model);\n })\n .appendTo(this.icons_div);\n if (hide) {\n this.action_icons[name].hide();\n }\n },\n\n /**\n * Set track's modes and update mode icon popup.\n */\n set_display_modes: function(new_modes, init_mode) {\n if (!new_modes) {\n return;\n }\n\n // HACK: move this out of view and into track.\n\n // Set modes, init mode.\n this.model.display_modes = new_modes;\n this.model.mode = init_mode || this.model.config.get_value(\"mode\") || this.model.display_modes[0];\n\n this.action_icons.mode_icon.attr(\"title\", `Set display mode (now: ${this.mode})`);\n\n // Setup popup menu for changing modes.\n var self = this;\n\n var track = this.model;\n var mode_mapping = {};\n for (var i = 0, len = track.display_modes.length; i < len; i++) {\n var mode = track.display_modes[i];\n mode_mapping[mode] = (mode => () => {\n track.change_mode(mode);\n // HACK: the popup menu messes with the track's hover event, so manually show/hide\n // icons div for now.\n //self.icons_div.show();\n //track.container_div.mouseleave(function() { track.icons_div.hide(); } );\n })(mode);\n }\n\n make_popupmenu(this.action_icons.mode_icon, mode_mapping);\n }\n});\n\nexport default {\n TrackHeaderView: TrackHeaderView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/viz_views.js","import * as _ from \"libs/underscore\";\nvar extend = _.extend;\n\n// HACK: LABEL_SPACING is currently duplicated between here and painters\nvar LABEL_SPACING = 2;\n\nvar PACK_SPACING = 5;\n\n/**\n * Hold slotting information for a feature.\n */\nvar SlottedInfo = function(slot, feature) {\n this.slot = slot;\n this.feature = feature;\n};\n\n/**\n * FeatureSlotter determines slots in which to draw features for vertical\n * packing.\n *\n * This implementation is incremental, any feature assigned a slot will be\n * retained for slotting future features.\n */\nvar FeatureSlotter = function(w_scale, mode, max_rows, measureText) {\n this.slots = {};\n this.start_end_dct = {};\n this.w_scale = w_scale;\n this.mode = mode;\n this.include_label = mode === \"Pack\";\n this.max_rows = max_rows;\n this.measureText = measureText;\n};\n\n/**\n * Slot a set of features, `this.slots` will be updated with slots by id, and\n * the largest slot required for the passed set of features is returned\n */\nextend(FeatureSlotter.prototype, {\n /**\n * Get drawing coordinate for a feature.\n */\n _get_draw_coords: function(feature) {\n // Get initial draw coordinates using w_scale.\n var draw_start = Math.floor(feature[1] * this.w_scale);\n\n var draw_end = Math.ceil(feature[2] * this.w_scale);\n var f_name = feature[3];\n var text_align;\n\n // Update start, end drawing locations to include feature name.\n // Try to put the name on the left, if not, put on right.\n if (f_name !== undefined && this.include_label) {\n // Add gap for label spacing and extra pack space padding\n // TODO: Fix constants\n var text_len = this.measureText(f_name).width + (LABEL_SPACING + PACK_SPACING);\n if (draw_start - text_len >= 0) {\n draw_start -= text_len;\n text_align = \"left\";\n } else {\n draw_end += text_len;\n text_align = \"right\";\n }\n }\n\n /*\n if (slot_num < 0) {\n \n TODO: this is not yet working --\n console.log(feature_uid, \"looking for slot with text on the right\");\n // Slot not found. If text was on left, try on right and see\n // if slot can be found.\n // TODO: are there any checks we need to do to ensure that text\n // will fit on tile?\n if (text_align === \"left\") {\n draw_start -= text_len;\n draw_end -= text_len;\n text_align = \"right\";\n slot_num = find_slot(draw_start, draw_end);\n }\n if (slot_num >= 0) {\n console.log(feature_uid, \"found slot with text on the right\");\n }\n\n }\n */\n\n return [draw_start, draw_end];\n },\n\n /**\n * Find the first slot such that current feature doesn't overlap any other features in that slot.\n * Returns -1 if no slot was found.\n */\n _find_slot: function(draw_coords) {\n // TODO: Use a data structure for faster searching of available slots.\n var draw_start = draw_coords[0];\n\n var draw_end = draw_coords[1];\n for (var slot_num = 0; slot_num <= this.max_rows; slot_num++) {\n var has_overlap = false;\n var slot = this.start_end_dct[slot_num];\n if (slot !== undefined) {\n // Iterate through features already in slot to see if current feature will fit.\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n var s_e = slot[k];\n if (draw_end > s_e[0] && draw_start < s_e[1]) {\n // There is overlap\n has_overlap = true;\n break;\n }\n }\n }\n if (!has_overlap) {\n return slot_num;\n }\n }\n return -1;\n },\n\n /**\n * Slot features.\n */\n slot_features: function(features) {\n var start_end_dct = this.start_end_dct;\n var undone = [];\n var highest_slot = 0;\n var feature;\n var feature_uid;\n\n // Loop through features to (a) find those that are not yet slotted and (b) update\n // those that are slotted if new information is availabe. For (a), features already\n // slotted (based on slotting from other tiles) will retain their current slot.\n for (var i = 0, len = features.length; i < len; i++) {\n feature = features[i];\n feature_uid = feature[0];\n var slotted_info = this.slots[feature_uid];\n\n // Separate and handle slotted vs. unslotted features.\n if (slotted_info) {\n // Feature is slotted; if feature now has larger start/end coordinates,\n // update drawing coordinates.\n if (feature[1] < slotted_info.feature[1] || slotted_info.feature[2] < feature[2]) {\n // Feature has changed (e.g. a single read now has its pair), so recalculate its\n // drawing coordinates.\n var old_draw_coords = this._get_draw_coords(slotted_info.feature);\n\n var new_draw_coords = this._get_draw_coords(feature);\n var slotted_coords = this.start_end_dct[slotted_info.slot];\n for (var k = 0; k < slotted_coords.length; k++) {\n var dc = slotted_coords[k];\n if (dc[0] === old_draw_coords[0] && dc[1] === old_draw_coords[1]) {\n // Replace old drawing coordinates with new ones.\n slotted_coords[k] = new_draw_coords;\n }\n }\n }\n highest_slot = Math.max(highest_slot, this.slots[feature_uid].slot);\n } else {\n undone.push(i);\n }\n }\n\n // Slot unslotted features.\n\n // Do slotting.\n for (var i = 0, len = undone.length; i < len; i++) {\n feature = features[undone[i]];\n feature_uid = feature[0];\n var draw_coords = this._get_draw_coords(feature);\n\n // Find slot.\n var slot_num = this._find_slot(draw_coords);\n\n // Do slotting.\n if (slot_num >= 0) {\n // Add current feature to slot.\n if (start_end_dct[slot_num] === undefined) {\n start_end_dct[slot_num] = [];\n }\n start_end_dct[slot_num].push(draw_coords);\n this.slots[feature_uid] = new SlottedInfo(slot_num, feature);\n highest_slot = Math.max(highest_slot, slot_num);\n }\n }\n\n // Debugging: view slots data.\n /*\n for (var i = 0; i < MAX_FEATURE_DEPTH; i++) {\n var slot = start_end_dct[i];\n if (slot !== undefined) {\n console.log(i, \"*************\");\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n console.log(\"\\t\", slot[k][0], slot[k][1]);\n }\n }\n }\n */\n return highest_slot + 1;\n }\n});\n\nexport default {\n FeatureSlotter: FeatureSlotter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/slotting.js","import * as _ from \"libs/underscore\";\n\n/**\n * Compute the type of overlap between two regions. They are assumed to be on the same chrom/contig.\n * The overlap is computed relative to the second region; hence, OVERLAP_START indicates that the first\n * region overlaps the start (but not the end) of the second region.\n * NOTE: Coordinates are assumed to be in BED format: half open (start is closed, end is open).\n */\nvar BEFORE = 1001;\n\nvar CONTAINS = 1002;\nvar OVERLAP_START = 1003;\nvar OVERLAP_END = 1004;\nvar CONTAINED_BY = 1005;\nvar AFTER = 1006;\nvar compute_overlap = (first_region, second_region) => {\n var first_start = first_region[0];\n var first_end = first_region[1];\n var second_start = second_region[0];\n var second_end = second_region[1];\n var overlap;\n if (first_start < second_start) {\n if (first_end <= second_start) {\n overlap = BEFORE;\n } else if (first_end <= second_end) {\n overlap = OVERLAP_START;\n } else {\n // first_end > second_end\n overlap = CONTAINS;\n }\n } else {\n // first_start >= second_start\n if (first_start > second_end) {\n overlap = AFTER;\n } else if (first_end <= second_end) {\n overlap = CONTAINED_BY;\n } else {\n overlap = OVERLAP_END;\n }\n }\n\n return overlap;\n};\n\n/**\n * Returns true if regions overlap.\n */\nvar is_overlap = (first_region, second_region) => {\n var overlap = compute_overlap(first_region, second_region);\n return overlap !== BEFORE && overlap !== AFTER;\n};\n\n/**\n * Draw a dashed line on a canvas using filled rectangles. This function is based on:\n * http://vetruvet.blogspot.com/2010/10/drawing-dashed-lines-on-html5-canvas.html\n * However, that approach uses lines, which don't seem to render as well, so use\n * rectangles instead.\n */\nvar dashedLine = (ctx, x1, y1, x2, y2, dashLen) => {\n if (dashLen === undefined) {\n dashLen = 4;\n }\n var dX = x2 - x1;\n var dY = y2 - y1;\n var dashes = Math.floor(Math.sqrt(dX * dX + dY * dY) / dashLen);\n var dashX = dX / dashes;\n var dashY = dY / dashes;\n var q;\n\n for (q = 0; q < dashes; q++, x1 += dashX, y1 += dashY) {\n if (q % 2 !== 0) {\n continue;\n }\n ctx.fillRect(x1, y1, dashLen, 1);\n }\n};\n\n/**\n * Draw an isosceles triangle that points down.\n */\nvar drawDownwardEquilateralTriangle = function(ctx, down_vertex_x, down_vertex_y, side_len) {\n // Compute other two points of triangle.\n var x1 = down_vertex_x - side_len / 2;\n\n var x2 = down_vertex_x + side_len / 2;\n var y = down_vertex_y - Math.sqrt(side_len * 3 / 2);\n\n // Draw and fill.\n ctx.beginPath();\n ctx.moveTo(x1, y);\n ctx.lineTo(x2, y);\n ctx.lineTo(down_vertex_x, down_vertex_y);\n ctx.lineTo(x1, y);\n\n ctx.strokeStyle = this.fillStyle;\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n};\n\n/**\n * Base class for all scalers. Scalers produce values that are used to change (scale) drawing attributes.\n */\nvar Scaler = function(default_val) {\n this.default_val = default_val ? default_val : 1;\n};\n\n/**\n * Produce a scaling value.\n */\nScaler.prototype.gen_val = function(input) {\n return this.default_val;\n};\n\n/**\n * Results from painter.draw()\n */\nvar DrawResults = function(options) {\n this.incomplete_features = options.incomplete_features;\n this.feature_mapper = options.feature_mapper;\n};\n\n/**\n * Base class for painters\n *\n * -- Mode and prefs are both optional\n */\nvar Painter = function(data, view_start, view_end, prefs, mode) {\n // Data and data properties\n this.data = data;\n // View\n this.view_start = view_start;\n this.view_end = view_end;\n // Drawing prefs\n this.prefs = _.extend({}, this.default_prefs, prefs);\n this.mode = mode;\n};\n\nPainter.prototype.default_prefs = {};\n\n/**\n * Draw on the context using a rectangle of width x height using scale w_scale.\n */\nPainter.prototype.draw = (ctx, width, height, w_scale) => {};\n\n/**\n * Get starting drawing position, which is offset a half-base left of coordinate.\n */\nPainter.prototype.get_start_draw_pos = function(chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, -0.5);\n};\n\n/**\n * Get end drawing position, which is offset a half-base right of coordinate.\n */\nPainter.prototype.get_end_draw_pos = function(chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0.5);\n};\n\n/**\n * Get drawing position.\n */\nPainter.prototype.get_draw_pos = function(chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0);\n};\n\n/**\n * Convert chromosome position to drawing position.\n */\nPainter.prototype._chrom_pos_to_draw_pos = function(chrom_pos, w_scale, offset) {\n return Math.floor(w_scale * (Math.max(0, chrom_pos - this.view_start) + offset));\n};\n\nvar LinePainter = function(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n};\n\nLinePainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Histogram\",\n color: \"#000\",\n overflow_color: \"#F66\"\n};\n\nLinePainter.prototype.draw = function(ctx, width, height, w_scale) {\n var in_path = false;\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var vertical_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n\n ctx.save();\n\n // Pixel position of 0 on the y axis\n var y_zero = Math.round(height + min_value / vertical_range * height);\n\n // Horizontal line to denote x-axis\n if (mode !== \"Intensity\") {\n ctx.fillStyle = \"#aaa\";\n ctx.fillRect(0, y_zero, width, 1);\n }\n\n ctx.beginPath();\n var x_scaled;\n var y;\n var delta_x_pxs;\n if (data.length > 1) {\n delta_x_pxs = _.map(data.slice(0, -1), (d, i) => Math.ceil((data[i + 1][0] - data[i][0]) * w_scale));\n } else {\n delta_x_pxs = [10];\n }\n\n // Painter color can be in either block_color (FeatureTrack) or color pref (LineTrack).\n var painter_color = this.prefs.block_color || this.prefs.color;\n\n var // Extract RGB from preference color.\n pref_color = parseInt(painter_color.slice(1), 16);\n\n var pref_r = (pref_color & 0xff0000) >> 16;\n var pref_g = (pref_color & 0x00ff00) >> 8;\n var pref_b = pref_color & 0x0000ff;\n var top_overflow = false;\n var bot_overflow = false;\n\n // Paint track.\n var delta_x_px;\n for (var i = 0, len = data.length; i < len; i++) {\n // Reset attributes for next point.\n ctx.fillStyle = ctx.strokeStyle = painter_color;\n top_overflow = bot_overflow = false;\n delta_x_px = delta_x_pxs[i];\n\n x_scaled = Math.floor((data[i][0] - view_start - 0.5) * w_scale);\n y = data[i][1];\n\n // Process Y (scaler) value.\n if (y === null) {\n if (in_path && mode === \"Filled\") {\n ctx.lineTo(x_scaled, height_px);\n }\n in_path = false;\n continue;\n }\n\n // Bound Y value by min, max.\n if (y < min_value) {\n bot_overflow = true;\n y = min_value;\n } else if (y > max_value) {\n top_overflow = true;\n y = max_value;\n }\n\n // Draw point.\n if (mode === \"Histogram\") {\n // y becomes the bar height in pixels, which is the negated for canvas coords\n y = Math.round(y / vertical_range * height_px);\n ctx.fillRect(x_scaled, y_zero, delta_x_px, -y);\n } else if (mode === \"Intensity\") {\n var saturation = (y - min_value) / vertical_range;\n\n var // Range is [pref_color, 255] where saturation = 0 --> 255 and saturation = 1 --> pref color\n new_r = Math.round(pref_r + (255 - pref_r) * (1 - saturation));\n\n var new_g = Math.round(pref_g + (255 - pref_g) * (1 - saturation));\n var new_b = Math.round(pref_b + (255 - pref_b) * (1 - saturation));\n ctx.fillStyle = `rgb(${new_r},${new_g},${new_b})`;\n ctx.fillRect(x_scaled, 0, delta_x_px, height_px);\n } else {\n // mode is Coverage/Line or Filled.\n\n // Scale Y value.\n y = Math.round(height_px - (y - min_value) / vertical_range * height_px);\n if (in_path) {\n ctx.lineTo(x_scaled, y);\n } else {\n in_path = true;\n if (mode === \"Filled\") {\n ctx.moveTo(x_scaled, height_px);\n ctx.lineTo(x_scaled, y);\n } else {\n ctx.moveTo(x_scaled, y);\n // Use this approach (note: same as for filled) to draw line from 0 to\n // first data point.\n //ctx.moveTo(x_scaled, height_px);\n //ctx.lineTo(x_scaled, y);\n }\n }\n }\n\n // Draw lines at boundaries if overflowing min or max\n ctx.fillStyle = this.prefs.overflow_color;\n if (top_overflow || bot_overflow) {\n var overflow_x;\n if (mode === \"Histogram\" || mode === \"Intensity\") {\n overflow_x = delta_x_px;\n } else {\n // Line and Filled, which are points\n x_scaled -= 2; // Move it over to the left so it's centered on the point\n overflow_x = 4;\n }\n if (top_overflow) {\n ctx.fillRect(x_scaled, 0, overflow_x, 3);\n }\n if (bot_overflow) {\n ctx.fillRect(x_scaled, height_px - 3, overflow_x, 3);\n }\n }\n ctx.fillStyle = painter_color;\n }\n if (mode === \"Filled\") {\n if (in_path) {\n ctx.lineTo(x_scaled, y_zero);\n ctx.lineTo(0, y_zero);\n }\n ctx.fill();\n } else {\n ctx.stroke();\n }\n\n ctx.restore();\n};\n\n/**\n * Mapper that contains information about feature locations and data.\n */\nvar FeaturePositionMapper = function(slot_height) {\n this.feature_positions = {};\n this.slot_height = slot_height;\n this.translation = 0;\n this.y_translation = 0;\n};\n\n/**\n * Map feature data to a position defined by .\n */\nFeaturePositionMapper.prototype.map_feature_data = function(feature_data, slot, x_start, x_end) {\n if (!this.feature_positions[slot]) {\n this.feature_positions[slot] = [];\n }\n this.feature_positions[slot].push({\n data: feature_data,\n x_start: x_start,\n x_end: x_end\n });\n};\n\n/**\n * Get feature data for position \n */\nFeaturePositionMapper.prototype.get_feature_data = function(x, y) {\n // Find slot using Y.\n var slot = Math.floor((y - this.y_translation) / this.slot_height);\n\n var feature_dict;\n\n // May not be over a slot due to padding, margin, etc.\n if (!this.feature_positions[slot]) {\n return null;\n }\n\n // Find feature using X.\n x += this.translation;\n for (var i = 0; i < this.feature_positions[slot].length; i++) {\n feature_dict = this.feature_positions[slot][i];\n if (x >= feature_dict.x_start && x <= feature_dict.x_end) {\n return feature_dict.data;\n }\n }\n};\n\n/**\n * Abstract object for painting feature tracks. Subclasses must implement draw_element() for painting to work.\n * Painter uses a 0-based, half-open coordinate system; start coordinate is closed--included--and the end is open.\n * This coordinate system matches the BED format.\n */\nvar FeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.alpha_scaler = alpha_scaler ? alpha_scaler : new Scaler();\n this.height_scaler = height_scaler ? height_scaler : new Scaler();\n this.max_label_length = 200;\n};\n\nFeaturePainter.prototype.default_prefs = {\n block_color: \"#FFF\",\n connector_color: \"#FFF\"\n};\n\n_.extend(FeaturePainter.prototype, {\n get_required_height: function(rows_required, width) {\n // y_scale is the height per row\n var required_height = this.get_row_height();\n\n var y_scale = required_height;\n var mode = this.mode;\n // If using a packing mode, need to multiply by the number of slots used\n if (mode === \"no_detail\" || mode === \"Squish\" || mode === \"Pack\") {\n required_height = rows_required * y_scale;\n }\n return required_height + this.get_top_padding(width);\n },\n\n /** Extra padding before first row of features */\n get_top_padding: function(width) {\n return 0;\n },\n\n /**\n * Draw data on ctx using slots and within the rectangle defined by width and height. Returns\n * a FeaturePositionMapper object with information about where features were drawn.\n */\n draw: function(ctx, width, height, w_scale, slots) {\n var data = this.data;\n var view_start = this.view_start;\n var view_end = this.view_end;\n\n ctx.save();\n\n ctx.fillStyle = this.prefs.block_color;\n ctx.textAlign = \"right\";\n\n var y_scale = this.get_row_height();\n var feature_mapper = new FeaturePositionMapper(y_scale);\n var x_draw_coords;\n var incomplete_features = [];\n\n for (var i = 0, len = data.length; i < len; i++) {\n var feature = data[i];\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n\n var // Slot valid only if features are slotted and this feature is slotted;\n // feature may not be due to lack of space.\n slot = slots && slots[feature_uid] !== undefined ? slots[feature_uid].slot : null;\n\n // Draw feature if (a) mode is dense or feature is slotted (as it must be for all non-dense modes) and\n // (b) there's overlap between the feature and drawing region.\n if ((this.mode === \"Dense\" || slot !== null) && (feature_start < view_end && feature_end > view_start)) {\n x_draw_coords = this.draw_element(\n ctx,\n this.mode,\n feature,\n slot,\n view_start,\n view_end,\n w_scale,\n y_scale,\n width\n );\n feature_mapper.map_feature_data(feature, slot, x_draw_coords[0], x_draw_coords[1]);\n\n // Add to incomplete features if it's not drawn completely in region.\n if (feature_start < view_start || feature_end > view_end) {\n incomplete_features.push(feature);\n }\n }\n }\n\n ctx.restore();\n\n feature_mapper.y_translation = this.get_top_padding(width);\n return new DrawResults({\n incomplete_features: incomplete_features,\n feature_mapper: feature_mapper\n });\n },\n\n /**\n * Abstract function for drawing an individual feature.\n */\n draw_element: function(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n return [0, 0];\n }\n});\n\n// Constants specific to feature tracks moved here (HACKING, these should\n// basically all be configuration options)\nvar DENSE_TRACK_HEIGHT = 10;\n\nvar NO_DETAIL_TRACK_HEIGHT = 3;\nvar SQUISH_TRACK_HEIGHT = 5;\nvar PACK_TRACK_HEIGHT = 10;\nvar NO_DETAIL_FEATURE_HEIGHT = 1;\nvar DENSE_FEATURE_HEIGHT = 9;\nvar SQUISH_FEATURE_HEIGHT = 3;\nvar PACK_FEATURE_HEIGHT = 9;\nvar LABEL_SPACING = 2;\nvar CONNECTOR_COLOR = \"#ccc\";\n\nvar LinkedFeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Whether to draw a single connector in the background that spans the entire feature (the intron fishbone)\n this.draw_background_connector = true;\n // Whether to call draw_connector for every pair of blocks\n this.draw_individual_connectors = false;\n};\n\n_.extend(LinkedFeaturePainter.prototype, FeaturePainter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"no_detail\") {\n height = NO_DETAIL_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Draw a feature. Returns an array with feature's start and end X coordinates.\n */\n draw_element: function(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n var feature_strand = feature[4];\n\n var // -0.5 to offset region between bases.\n f_start = Math.floor(Math.max(0, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var draw_start = f_start;\n var draw_end = f_end;\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale + this.get_top_padding(width);\n\n var thickness;\n var y_start;\n var thick_start = null;\n var thick_end = null;\n\n var // TODO: is there any reason why block, label color cannot be set at the Painter level?\n // For now, assume '.' === '+'\n block_color =\n !feature_strand || feature_strand === \"+\" || feature_strand === \".\"\n ? this.prefs.block_color\n : this.prefs.reverse_strand_color;\n\n var label_color = this.prefs.label_color;\n\n // Set global alpha.\n ctx.globalAlpha = this.alpha_scaler.gen_val(feature);\n\n // In dense mode, put all data in top slot.\n if (mode === \"Dense\") {\n slot = 1;\n }\n\n if (mode === \"no_detail\") {\n // No details for feature, so only one way to display.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 5, f_end - f_start, NO_DETAIL_FEATURE_HEIGHT);\n } else {\n // Mode is either Squish or Pack:\n // Feature details.\n var feature_ts = feature[5];\n\n var feature_te = feature[6];\n var feature_blocks = feature[7];\n\n var // Whether we are drawing full height or squished features\n full_height = true;\n\n if (feature_ts && feature_te) {\n thick_start = Math.floor(Math.max(0, (feature_ts - tile_low) * w_scale));\n thick_end = Math.ceil(Math.min(width, Math.max(0, (feature_te - tile_low) * w_scale)));\n }\n\n // Set vars that depend on mode.\n var thin_height;\n\n var thick_height;\n if (mode === \"Squish\") {\n thin_height = 1;\n thick_height = SQUISH_FEATURE_HEIGHT;\n full_height = false;\n } else if (mode === \"Dense\") {\n thin_height = 5;\n thick_height = DENSE_FEATURE_HEIGHT;\n } else {\n // mode === \"Pack\"\n thin_height = 5;\n thick_height = PACK_FEATURE_HEIGHT;\n }\n\n // Draw feature/feature blocks + connectors.\n if (!feature_blocks) {\n // If there are no blocks, treat the feature as one big exon.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n // If strand is specified, draw arrows over feature\n if (feature_strand && full_height) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n }\n } else {\n //\n // There are feature blocks and mode is either Squish or Pack.\n //\n // Approach: (a) draw whole feature as connector/intron and (b) draw blocks as\n // needed. This ensures that whole feature, regardless of whether it starts with\n // a block, is visible.\n //\n\n // Compute y axis start position and height\n var cur_y_start;\n\n var cur_height;\n if (mode === \"Squish\" || mode === \"Dense\") {\n cur_y_start = y_start + Math.floor(SQUISH_FEATURE_HEIGHT / 2) + 1;\n cur_height = 1;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n cur_y_start = y_start;\n cur_height = thick_height;\n } else {\n cur_y_start += SQUISH_FEATURE_HEIGHT / 2 + 1;\n cur_height = 1;\n }\n }\n\n // Draw whole feature as connector/intron.\n if (this.draw_background_connector) {\n if (mode === \"Squish\" || mode === \"Dense\") {\n ctx.fillStyle = CONNECTOR_COLOR;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand\");\n }\n } else {\n ctx.fillStyle = CONNECTOR_COLOR;\n }\n }\n ctx.fillRect(f_start, cur_y_start, f_end - f_start, cur_height);\n }\n\n // Draw blocks.\n var start_and_height;\n for (var k = 0, k_len = feature_blocks.length; k < k_len; k++) {\n var block = feature_blocks[k];\n\n var // -0.5 to offset block between bases.\n block_start = Math.floor(Math.max(0, (block[0] - tile_low - 0.5) * w_scale));\n\n var block_end = Math.ceil(Math.min(width, Math.max((block[1] - tile_low - 0.5) * w_scale)));\n\n var last_block_start;\n var last_block_end;\n\n // Skip drawing if block not on tile.\n if (block_start > block_end) {\n continue;\n }\n\n // Draw thin block.\n ctx.fillStyle = block_color;\n ctx.fillRect(\n block_start,\n y_start + (thick_height - thin_height) / 2 + 1,\n block_end - block_start,\n thin_height\n );\n\n // If block intersects with thick region, draw block as thick.\n // - No thick is sometimes encoded as thick_start == thick_end, so don't draw in that case\n if (\n thick_start !== undefined &&\n feature_te > feature_ts &&\n !(block_start > thick_end || block_end < thick_start)\n ) {\n var block_thick_start = Math.max(block_start, thick_start);\n\n var block_thick_end = Math.min(block_end, thick_end);\n ctx.fillRect(block_thick_start, y_start + 1, block_thick_end - block_thick_start, thick_height);\n if (feature_blocks.length === 1 && mode === \"Pack\") {\n // Exactly one block means we have no introns, but do have a distinct \"thick\" region,\n // draw arrows over it if in pack mode.\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n // If region is wide enough in pixels, pad a bit\n if (block_thick_start + 14 < block_thick_end) {\n block_thick_start += 2;\n block_thick_end -= 2;\n }\n ctx.fillRect(\n block_thick_start,\n y_start + 1,\n block_thick_end - block_thick_start,\n thick_height\n );\n }\n }\n // Draw individual connectors if required\n if (this.draw_individual_connectors && last_block_start) {\n this.draw_connector(ctx, last_block_start, last_block_end, block_start, block_end, y_start);\n }\n last_block_start = block_start;\n last_block_end = block_end;\n }\n\n // FIXME: Height scaling only works in Pack mode right now.\n if (mode === \"Pack\") {\n // Reset alpha so height scaling is not impacted by alpha scaling.\n ctx.globalAlpha = 1;\n\n // Height scaling: draw white lines to reduce height according to height scale factor.\n ctx.fillStyle = \"white\"; // TODO: set this to background color.\n var hscale_factor = this.height_scaler.gen_val(feature);\n\n var // Ceil ensures that min height is >= 1.\n new_height = Math.ceil(thick_height * hscale_factor);\n\n var ws_height = Math.round((thick_height - new_height) / 2);\n if (hscale_factor !== 1) {\n ctx.fillRect(f_start, cur_y_start + 1, f_end - f_start, ws_height);\n ctx.fillRect(f_start, cur_y_start + thick_height - ws_height + 1, f_end - f_start, ws_height);\n }\n }\n }\n\n // Reset alpha so that label is not transparent.\n ctx.globalAlpha = 1;\n\n // Draw label for Pack mode.\n if (feature_name && mode === \"Pack\" && feature_start > tile_low) {\n ctx.fillStyle = label_color;\n // FIXME: assumption here that the entire view starts at 0\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_end += ctx.measureText(feature_name).width + LABEL_SPACING;\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_start -= ctx.measureText(feature_name).width + LABEL_SPACING;\n }\n //ctx.fillStyle = block_color;\n }\n }\n\n // Reset global alpha.\n ctx.globalAlpha = 1;\n\n return [draw_start, draw_end];\n }\n});\n\nvar ReadPainter = function(\n data,\n view_start,\n view_end,\n prefs,\n mode,\n alpha_scaler,\n height_scaler,\n ref_seq,\n base_color_fn\n) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n this.ref_seq = ref_seq ? ref_seq.data : null;\n this.base_color_fn = base_color_fn;\n};\n\n_.extend(ReadPainter.prototype, FeaturePainter.prototype, {\n /**\n * Returns height based on mode.\n */\n get_row_height: function() {\n var height;\n var mode = this.mode;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n if (this.prefs.show_insertions) {\n height *= 2;\n }\n }\n return height;\n },\n\n /**\n * Parse CIGAR string to get (a) a list of contiguous drawing blocks (MD=X) and\n * (b) an array of [ op_index, op_len ] pairs where op_index is an index into the\n * string 'MIDNSHP=X' Return value is a dictionary with two entries, blocks and cigar\n */\n _parse_cigar: function(cigar_str) {\n var cigar_ops = \"MIDNSHP=X\";\n\n // Parse cigar.\n var blocks = [[0, 0]];\n\n var cur_block = blocks[0];\n var base_pos = 0;\n\n var // Parse cigar operations out and update/create blocks as needed.\n parsed_cigar = _.map(cigar_str.match(/[0-9]+[MIDNSHP=X]/g), op => {\n // Get operation length, character.\n var op_len = parseInt(op.slice(0, -1), 10),\n op_char = op.slice(-1);\n\n // Update drawing block.\n if (op_char === \"N\") {\n // At skip, so need to start new block if current block represents\n // drawing area.\n if (cur_block[1] !== 0) {\n cur_block = [base_pos + op_len, base_pos + op_len];\n blocks.push(cur_block);\n }\n } else if (\"ISHP\".indexOf(op_char) === -1) {\n // Operation is M,D,=,X.\n cur_block[1] += op_len;\n base_pos += op_len;\n }\n\n // Return parsed cigar.\n return [cigar_ops.indexOf(op_char), op_len];\n });\n\n return {\n blocks: blocks,\n cigar: parsed_cigar\n };\n },\n\n /**\n * Draw a single read from reference-based read sequence and cigar.\n */\n draw_read: function(ctx, mode, w_scale, y_start, tile_low, tile_high, feature_start, cigar, strand, read_seq) {\n // Helper function to update base and sequnence offsets.\n var update_base_offset = (offset, cig_op, cig_len) => {\n if (\"M=NXD\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var update_seq_offset = (offset, cig_op, cig_len) => {\n if (\"IX\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var // Gets drawing coordinate for a sequence coordinate. Assumes closure variables w_scale and tile_low.\n get_draw_coord = (\n sequence_coord // -0.5 to offset sequence between bases.\n ) => Math.floor(Math.max(0, (sequence_coord - tile_low - 0.5) * w_scale));\n\n ctx.textAlign = \"center\";\n var tile_region = [tile_low, tile_high];\n var base_offset = 0;\n var seq_offset = 0;\n var gap = Math.round(w_scale / 2);\n var char_width_px = ctx.canvas.manager.char_width_px;\n\n var block_color = strand === \"+\" ? this.prefs.detail_block_color : this.prefs.reverse_strand_color;\n\n var pack_mode = mode === \"Pack\";\n\n var draw_height = pack_mode ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var rect_y = y_start + 1;\n var paint_utils = new ReadPainterUtils(ctx, draw_height, w_scale, mode);\n var drawing_blocks = [];\n var s_start;\n var s_end;\n\n // Keep list of items that need to be drawn on top of initial drawing layer.\n var draw_last = [];\n\n // Parse cigar and get drawing blocks.\n var t = this._parse_cigar(cigar);\n cigar = t.cigar;\n drawing_blocks = t.blocks;\n\n // Draw blocks.\n for (var i = 0; i < drawing_blocks.length; i++) {\n var block = drawing_blocks[i];\n\n if (is_overlap([feature_start + block[0], feature_start + block[1]], tile_region)) {\n s_start = get_draw_coord(feature_start + block[0]);\n s_end = get_draw_coord(feature_start + block[1]);\n\n // Make sure that block is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read base as rectangle.\n ctx.fillStyle = block_color;\n ctx.fillRect(s_start, rect_y, s_end - s_start, draw_height);\n }\n }\n\n // Draw read features.\n for (var cig_id = 0, len = cigar.length; cig_id < len; cig_id++) {\n var cig = cigar[cig_id];\n var cig_op = \"MIDNSHP=X\"[cig[0]];\n var cig_len = cig[1];\n\n var seq_start = feature_start + base_offset;\n s_start = get_draw_coord(seq_start);\n s_end = get_draw_coord(seq_start + cig_len);\n\n // Skip feature if it's not in tile.\n if (!is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n // Update offsets.\n base_offset = update_base_offset(base_offset, cig_op, cig_len);\n seq_offset = update_seq_offset(seq_offset, cig_op, cig_len);\n continue;\n }\n\n // Make sure that read is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read feature.\n switch (cig_op) {\n case \"H\": // Hard clipping.\n case \"S\": // Soft clipping.\n case \"P\": // Padding.\n // Sequence not present and not related to alignment; do nothing.\n break;\n case \"M\": // \"Match\".\n // Because it's not known whether there is a match, ignore.\n base_offset += cig_len;\n break;\n case \"=\": // Match with reference.\n case \"X\": // Mismatch with reference.\n //\n // Draw sequence and/or variants.\n //\n\n // Get sequence to draw.\n var cur_seq = \"\";\n if (cig_op === \"X\") {\n // Get sequence from read_seq.\n cur_seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n } else if (this.ref_seq) {\n // && cig_op === '='\n // Use reference sequence.\n cur_seq = this.ref_seq.slice(\n // If read starts after tile start, slice at read start.\n Math.max(0, seq_start - tile_low),\n // If read ends before tile end, slice at read end.\n Math.min(seq_start - tile_low + cig_len, tile_high - tile_low)\n );\n }\n\n // Draw sequence. Because cur_seq starts and read/tile start, go to there to start writing.\n var start_pos = Math.max(seq_start, tile_low);\n for (var c = 0; c < cur_seq.length; c++) {\n // Draw base if showing all (i.e. not showing differences) or there is a mismatch.\n if ((cur_seq && !this.prefs.show_differences) || cig_op === \"X\") {\n // Draw base.\n var c_start = Math.floor(Math.max(0, (start_pos + c - tile_low) * w_scale));\n ctx.fillStyle = this.base_color_fn(cur_seq[c]);\n if (pack_mode && w_scale > char_width_px) {\n ctx.fillText(cur_seq[c], c_start, y_start + 9);\n } else if (w_scale > 0.05) {\n // Require a minimum w_scale so that variants are only drawn when somewhat zoomed in.\n ctx.fillRect(c_start - gap, rect_y, Math.max(1, Math.round(w_scale)), draw_height);\n }\n }\n }\n\n // Move forward in sequence only if sequence used to get mismatches.\n if (cig_op === \"X\") {\n seq_offset += cig_len;\n }\n base_offset += cig_len;\n\n break;\n case \"N\": // Skipped bases.\n ctx.fillStyle = CONNECTOR_COLOR;\n ctx.fillRect(s_start, rect_y + (draw_height - 1) / 2, s_end - s_start, 1);\n // No change in seq_offset because sequence not used when skipping.\n base_offset += cig_len;\n break;\n case \"D\": // Deletion.\n paint_utils.draw_deletion(s_start, rect_y, cig_len);\n base_offset += cig_len;\n break;\n case \"I\": // Insertion.\n // Check to see if sequence should be drawn at all by looking at the overlap between\n // the sequence region and the tile region.\n var insert_x_coord = s_start - gap;\n\n if (is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n var seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n // Insertion point is between the sequence start and the previous base: (-gap) moves\n // back from sequence start to insertion point.\n if (this.prefs.show_insertions) {\n //\n // Show inserted sequence above, centered on insertion point.\n //\n\n // Draw sequence.\n // X center is offset + start - \n var x_center = s_start - (s_end - s_start) / 2;\n if (\n (mode === \"Pack\" || this.mode === \"Auto\") &&\n read_seq !== undefined &&\n w_scale > char_width_px\n ) {\n // Draw sequence container.\n ctx.fillStyle = \"yellow\";\n ctx.fillRect(x_center - gap, y_start - 9, s_end - s_start, 9);\n draw_last[draw_last.length] = {\n type: \"triangle\",\n data: [insert_x_coord, y_start + 4, 5]\n };\n ctx.fillStyle = CONNECTOR_COLOR;\n // Based on overlap b/t sequence and tile, get sequence to be drawn.\n switch (compute_overlap([seq_start, seq_start + cig_len], tile_region)) {\n case OVERLAP_START:\n seq = seq.slice(tile_low - seq_start);\n break;\n case OVERLAP_END:\n seq = seq.slice(0, seq_start - tile_high);\n break;\n case CONTAINED_BY:\n // All of sequence drawn.\n break;\n case CONTAINS:\n seq = seq.slice(tile_low - seq_start, seq_start - tile_high);\n break;\n }\n // Draw sequence.\n for (var c = 0, str_len = seq.length; c < str_len; c++) {\n var c_start = Math.floor(Math.max(0, (seq_start + c - tile_low) * w_scale));\n ctx.fillText(seq[c], c_start - (s_end - s_start) / 2, y_start);\n }\n } else {\n // Draw block.\n ctx.fillStyle = \"yellow\";\n // TODO: This is a pretty hack-ish way to fill rectangle based on mode.\n ctx.fillRect(\n x_center,\n y_start + (this.mode !== \"Dense\" ? 2 : 5),\n s_end - s_start,\n mode !== \"Dense\" ? SQUISH_FEATURE_HEIGHT : DENSE_FEATURE_HEIGHT\n );\n }\n } else {\n if (\n (mode === \"Pack\" || this.mode === \"Auto\") &&\n read_seq !== undefined &&\n w_scale > char_width_px\n ) {\n // Show insertions with a single number at the insertion point.\n draw_last.push({\n type: \"text\",\n data: [seq.length, insert_x_coord, y_start + 9]\n });\n } else {\n // TODO: probably can merge this case with code above.\n }\n }\n }\n seq_offset += cig_len;\n // No change to base offset because insertions are drawn above sequence/read.\n break;\n }\n }\n\n //\n // Draw last items.\n //\n ctx.fillStyle = \"yellow\";\n var item;\n var type;\n var data;\n for (var i = 0; i < draw_last.length; i++) {\n item = draw_last[i];\n type = item.type;\n data = item.data;\n if (type === \"text\") {\n ctx.save();\n ctx.font = `bold ${ctx.font}`;\n ctx.fillText(data[0], data[1], data[2]);\n ctx.restore();\n } else if (type === \"triangle\") {\n drawDownwardEquilateralTriangle(ctx, data[0], data[1], data[2]);\n }\n }\n },\n\n /**\n * Draw a complete read pair\n */\n draw_element: function(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n // All features need a start, end, and vertical center.\n var feature_uid = feature[0];\n\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n\n var // -0.5 to put element between bases.\n f_start = Math.floor(Math.max(-0.5 * w_scale, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale;\n\n var draw_height = mode === \"Pack\" ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var label_color = this.prefs.label_color;\n\n // Draw read.\n if (feature[5] instanceof Array) {\n // Read is paired.\n var connector = true;\n\n // Draw left/forward read.\n if (feature[4][1] >= tile_low && feature[4][0] <= tile_high && feature[4][2]) {\n this.draw_read(\n ctx,\n mode,\n w_scale,\n y_start,\n tile_low,\n tile_high,\n feature[4][0],\n feature[4][2],\n feature[4][3],\n feature[4][4]\n );\n } else {\n connector = false;\n }\n\n // Draw right/reverse read.\n if (feature[5][1] >= tile_low && feature[5][0] <= tile_high && feature[5][2]) {\n this.draw_read(\n ctx,\n mode,\n w_scale,\n y_start,\n tile_low,\n tile_high,\n feature[5][0],\n feature[5][2],\n feature[5][3],\n feature[5][4]\n );\n } else {\n connector = false;\n }\n\n // Draw connector if both reads were drawn.\n // TODO: currently, there is no way to connect reads drawn on different tiles; to connect reads on different tiles, data manager\n // code is needed to join mate pairs from different regions. Alternatively, requesting multiple regions of data at once would\n // make it possible to put together more easily.\n // -0.5 to position connector correctly between reads.\n var b1_end = Math.ceil(\n Math.min(width, Math.max(-0.5 * w_scale, (feature[4][1] - tile_low - 0.5) * w_scale))\n );\n\n var b2_start = Math.floor(Math.max(-0.5 * w_scale, (feature[5][0] - tile_low - 0.5) * w_scale));\n\n if (connector && b2_start > b1_end) {\n ctx.fillStyle = CONNECTOR_COLOR;\n var line_height = y_start + 1 + (draw_height - 1) / 2;\n dashedLine(ctx, b1_end, line_height, b2_start, line_height);\n }\n } else {\n // Read is single.\n this.draw_read(\n ctx,\n mode,\n w_scale,\n y_start,\n tile_low,\n tile_high,\n feature_start,\n feature[4],\n feature[5],\n feature[6]\n );\n }\n if (mode === \"Pack\" && feature_start >= tile_low && feature_name !== \".\") {\n // Draw label.\n ctx.fillStyle = this.prefs.label_color;\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 9, this.max_label_length);\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 9, this.max_label_length);\n }\n }\n\n // FIXME: provide actual coordinates for drawn read.\n return [0, 0];\n }\n});\n\nvar ArcLinkedFeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n LinkedFeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Need to know the longest feature length for adding spacing\n this.longest_feature_length = this.calculate_longest_feature_length();\n this.draw_background_connector = false;\n this.draw_individual_connectors = true;\n};\n\n_.extend(ArcLinkedFeaturePainter.prototype, FeaturePainter.prototype, LinkedFeaturePainter.prototype, {\n calculate_longest_feature_length: function() {\n var longest_feature_length = 0;\n for (var i = 0, len = this.data.length; i < len; i++) {\n var feature = this.data[i];\n var feature_start = feature[1];\n var feature_end = feature[2];\n longest_feature_length = Math.max(longest_feature_length, feature_end - feature_start);\n }\n return longest_feature_length;\n },\n\n get_top_padding: function(width) {\n var view_range = this.view_end - this.view_start;\n var w_scale = width / view_range;\n return Math.min(128, Math.ceil(this.longest_feature_length / 2 * w_scale));\n },\n\n draw_connector: function(ctx, block1_start, block1_end, block2_start, block2_end, y_start) {\n // Arc drawing -- from closest endpoints\n var x_center = (block1_end + block2_start) / 2;\n\n var radius = block2_start - x_center;\n\n // For full half circles\n var angle1 = Math.PI;\n\n var angle2 = 0;\n if (radius > 0) {\n ctx.beginPath();\n ctx.arc(x_center, y_start, block2_start - x_center, Math.PI, 0);\n ctx.stroke();\n }\n }\n});\n\n// Color stuff from less.js\n\nvar Color = function(rgb, a) {\n /**\n * The end goal here, is to parse the arguments\n * into an integer triplet, such as `128, 255, 0`\n *\n * This facilitates operations and conversions.\n */\n if (Array.isArray(rgb)) {\n this.rgb = rgb;\n } else if (rgb.length == 6) {\n this.rgb = rgb.match(/.{2}/g).map(c => parseInt(c, 16));\n } else if (rgb.length == 7) {\n this.rgb = rgb\n .substring(1, 7)\n .match(/.{2}/g)\n .map(c => parseInt(c, 16));\n } else {\n this.rgb = rgb.split(\"\").map(c => parseInt(c + c, 16));\n }\n this.alpha = typeof a === \"number\" ? a : 1;\n};\nColor.prototype = {\n eval: function() {\n return this;\n },\n\n //\n // If we have some transparency, the only way to represent it\n // is via `rgba`. Otherwise, we use the hex representation,\n // which has better compatibility with older browsers.\n // Values are capped between `0` and `255`, rounded and zero-padded.\n //\n toCSS: function() {\n if (this.alpha < 1.0) {\n return `rgba(${this.rgb\n .map(c => Math.round(c))\n .concat(this.alpha)\n .join(\", \")})`;\n } else {\n return `#${this.rgb\n .map(i => {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? `0${i}` : i;\n })\n .join(\"\")}`;\n }\n },\n\n toHSL: function() {\n var r = this.rgb[0] / 255;\n var g = this.rgb[1] / 255;\n var b = this.rgb[2] / 255;\n var a = this.alpha;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n var d = max - min;\n\n if (max === min) {\n h = s = 0;\n } else {\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h * 360, s: s, l: l, a: a };\n },\n\n toARGB: function() {\n var argb = [Math.round(this.alpha * 255)].concat(this.rgb);\n return `#${argb\n .map(i => {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? `0${i}` : i;\n })\n .join(\"\")}`;\n },\n\n mix: function(color2, weight) {\n var color1 = this;\n\n var p = weight; // .value / 100.0;\n var w = p * 2 - 1;\n var a = color1.toHSL().a - color2.toHSL().a;\n\n var w1 = ((w * a == -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n var w2 = 1 - w1;\n\n var rgb = [\n color1.rgb[0] * w1 + color2.rgb[0] * w2,\n color1.rgb[1] * w1 + color2.rgb[1] * w2,\n color1.rgb[2] * w1 + color2.rgb[2] * w2\n ];\n\n var alpha = color1.alpha * p + color2.alpha * (1 - p);\n\n return new Color(rgb, alpha);\n }\n};\n\n// End colors from less.js\n\nvar LinearRamp = function(start_color, end_color, start_value, end_value) {\n /**\n * Simple linear gradient\n */\n this.start_color = new Color(start_color);\n this.end_color = new Color(end_color);\n this.start_value = start_value;\n this.end_value = end_value;\n this.value_range = end_value - start_value;\n};\n\nLinearRamp.prototype.map_value = function(value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n value = (value - this.start_value) / this.value_range;\n // HACK: just red for now\n // return \"hsl(0,100%,\" + (value * 100) + \"%)\"\n return this.start_color.mix(this.end_color, 1 - value).toCSS();\n};\n\nvar SplitRamp = function(start_color, middle_color, end_color, start_value, end_value) {\n /**\n * Two gradients split away from 0\n */\n this.positive_ramp = new LinearRamp(middle_color, end_color, 0, end_value);\n this.negative_ramp = new LinearRamp(middle_color, start_color, 0, -start_value);\n this.start_value = start_value;\n this.end_value = end_value;\n};\n\nSplitRamp.prototype.map_value = function(value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n if (value >= 0) {\n return this.positive_ramp.map_value(value);\n } else {\n return this.negative_ramp.map_value(-value);\n }\n};\n\nvar DiagonalHeatmapPainter = function(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n var i;\n var len;\n\n if (this.prefs.min_value === undefined) {\n var min_value = Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n min_value = Math.min(min_value, this.data[i][6]);\n }\n this.prefs.min_value = min_value;\n }\n if (this.prefs.max_value === undefined) {\n var max_value = -Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n max_value = Math.max(max_value, this.data[i][6]);\n }\n this.prefs.max_value = max_value;\n }\n};\n\nDiagonalHeatmapPainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Heatmap\",\n pos_color: \"#FF8C00\",\n neg_color: \"#4169E1\"\n};\n\nDiagonalHeatmapPainter.prototype.draw = function(ctx, width, height, w_scale) {\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var value_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n var invsqrt2 = 1 / Math.sqrt(2);\n\n var ramp = new SplitRamp(this.prefs.neg_color, \"#FFFFFF\", this.prefs.pos_color, min_value, max_value);\n\n var d;\n var s1;\n var e1;\n var s2;\n var e2;\n var value;\n\n var scale = p => (p - view_start) * w_scale;\n\n ctx.save();\n\n // Draw into triangle, then rotate and scale\n ctx.rotate(-45 * Math.PI / 180);\n ctx.scale(invsqrt2, invsqrt2);\n\n // Paint track.\n for (var i = 0, len = data.length; i < len; i++) {\n d = data[i];\n\n s1 = scale(d[1]);\n e1 = scale(d[2]);\n s2 = scale(d[4]);\n e2 = scale(d[5]);\n value = d[6];\n\n ctx.fillStyle = ramp.map_value(value);\n ctx.fillRect(s1, s2, e1 - s1, e2 - s2);\n }\n\n ctx.restore();\n};\n\n/**\n * Utilities for painting reads.\n */\nvar ReadPainterUtils = function(ctx, row_height, px_per_base, mode) {\n this.ctx = ctx;\n this.row_height = row_height;\n this.px_per_base = px_per_base;\n this.draw_details = (mode === \"Pack\" || mode === \"Auto\") && px_per_base >= ctx.canvas.manager.char_width_px;\n this.delete_details_thickness = 0.2;\n};\n\n_.extend(ReadPainterUtils.prototype, {\n /**\n * Draw deletion of base(s).\n * @param draw_detail if true, drawing in detail and deletion is drawn more subtly\n */\n draw_deletion: function(x, y, len) {\n this.ctx.fillStyle = \"black\";\n var thickness = (this.draw_details ? this.delete_details_thickness : 1) * this.row_height;\n y += 0.5 * (this.row_height - thickness);\n this.ctx.fillRect(x, y, len * this.px_per_base, thickness);\n }\n});\n\n/**\n * Paints variant data onto canvas.\n */\nvar VariantPainter = function(data, view_start, view_end, prefs, mode, base_color_fn) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.base_color_fn = base_color_fn;\n this.divider_height = 1;\n};\n\n_.extend(VariantPainter.prototype, Painter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Returns required height to draw a particular number of samples in a given mode.\n */\n get_required_height: function(num_samples) {\n // FIXME: for single-sample data, height should be summary_height when zoomed out and\n // row_height when zoomed in.\n var height = this.prefs.summary_height;\n\n // If showing sample data, height is summary + divider + samples.\n if (num_samples > 1 && this.prefs.show_sample_data) {\n height += this.divider_height + num_samples * this.get_row_height();\n }\n return height;\n },\n\n /**\n * Draw on the context using a rectangle of width x height with scale w_scale.\n */\n draw: function(ctx, width, height, w_scale) {\n ctx.save();\n\n var /**\n * Returns dictionary of information about an indel; returns empty if there no indel. Assumes indel is left-aligned.\n * Dict attributes:\n * -type: 'insertion' or 'deletion'\n * -start: where the deletion starts relative to reference start\n * -len: how long the deletion is\n */\n get_indel_info = (ref, alt) => {\n var ref_len = ref.length;\n var alt_len = alt.length;\n var start = 0;\n var len = 1;\n var type = null;\n if (alt === \"-\") {\n type = \"deletion\";\n len = ref.length;\n } else if (ref.indexOf(alt) === 0 && ref_len > alt_len) {\n type = \"deletion\";\n len = ref_len - alt_len;\n start = alt_len;\n } else if (alt.indexOf(ref) === 0 && ref_len < alt_len) {\n // Insertion.\n type = \"insertion\";\n len = alt_len - ref_len;\n start = alt_len;\n }\n\n return type !== null ? { type: type, start: start, len: len } : {};\n };\n\n // Draw.\n var locus_data;\n\n var pos;\n var id;\n var ref;\n var alt;\n var qual;\n var filter;\n var sample_gts;\n var allele_counts;\n var variant;\n var draw_x_start;\n var draw_y_start;\n var genotype;\n\n var // Always draw variants at least 1 pixel wide.\n base_px = Math.max(1, Math.floor(w_scale));\n\n var // Determine number of samples.\n num_samples = this.data.length ? this.data[0][7].split(\",\").length : 0;\n\n var row_height = this.mode === \"Squish\" ? SQUISH_TRACK_HEIGHT : PACK_TRACK_HEIGHT;\n\n var // If zoomed out, fill the whole row with feature to make it easier to read;\n // when zoomed in, use feature height so that there are gaps in sample rows.\n feature_height =\n w_scale < 0.1 ? row_height : this.mode === \"Squish\" ? SQUISH_FEATURE_HEIGHT : PACK_FEATURE_HEIGHT;\n\n var draw_summary = true;\n\n var paint_utils = new ReadPainterUtils(ctx, row_height, w_scale, this.mode);\n\n var j;\n\n // If there's a single sample, update drawing variables.\n if (num_samples === 1) {\n row_height = feature_height =\n w_scale < ctx.canvas.manager.char_width_px ? this.prefs.summary_height : row_height;\n paint_utils.row_height = row_height;\n // No summary when there's a single sample.\n draw_summary = false;\n }\n\n // Draw divider between summary and samples.\n if (this.prefs.show_sample_data && draw_summary) {\n ctx.fillStyle = \"#F3F3F3\";\n ctx.globalAlpha = 1;\n ctx.fillRect(0, this.prefs.summary_height - this.divider_height, width, this.divider_height);\n }\n\n // Draw variants.\n ctx.textAlign = \"center\";\n for (var i = 0; i < this.data.length; i++) {\n // Get locus data.\n locus_data = this.data[i];\n pos = locus_data[1];\n ref = locus_data[3];\n alt = [locus_data[4].split(\",\")];\n sample_gts = locus_data[7].split(\",\");\n allele_counts = locus_data.slice(8);\n\n // Process alterate values to derive information about each alt.\n alt = _.map(_.flatten(alt), a => {\n var alt_info = {\n type: \"snp\",\n value: a,\n start: 0\n };\n\n var indel_info = get_indel_info(ref, a);\n\n return _.extend(alt_info, indel_info);\n });\n\n // Only draw locus data if it's in viewing region.\n if (pos < this.view_start || pos > this.view_end) {\n continue;\n }\n\n // Draw summary for alleles.\n if (draw_summary) {\n ctx.fillStyle = \"#999999\";\n ctx.globalAlpha = 1;\n for (j = 0; j < alt.length; j++) {\n // Draw background for summary.\n draw_x_start = this.get_start_draw_pos(pos + alt[j].start, w_scale);\n ctx.fillRect(draw_x_start, 0, base_px, this.prefs.summary_height);\n draw_y_start = this.prefs.summary_height;\n // Draw allele fractions onto summary.\n for (j = 0; j < alt.length; j++) {\n ctx.fillStyle = alt[j].type === \"deletion\" ? \"black\" : this.base_color_fn(alt[j].value);\n var allele_frac = allele_counts / sample_gts.length;\n var draw_height = Math.ceil(this.prefs.summary_height * allele_frac);\n ctx.fillRect(draw_x_start, draw_y_start - draw_height, base_px, draw_height);\n draw_y_start -= draw_height;\n }\n }\n }\n\n // Done drawing if not showing samples data.\n if (!this.prefs.show_sample_data) {\n continue;\n }\n\n // Draw sample genotype(s).\n draw_y_start = draw_summary ? this.prefs.summary_height + this.divider_height : 0;\n for (j = 0; j < sample_gts.length; j++, draw_y_start += row_height) {\n genotype = sample_gts[j] ? sample_gts[j].split(/\\/|\\|/) : [\"0\", \"0\"];\n\n // Get variant to draw and set drawing properties.\n variant = null;\n if (genotype[0] === genotype[1]) {\n if (genotype[0] === \".\") {\n // TODO: draw uncalled variant.\n } else if (genotype[0] !== \"0\") {\n // Homozygous for variant.\n variant = alt[parseInt(genotype[0], 10) - 1];\n ctx.globalAlpha = 1;\n }\n // else reference\n } else {\n // Heterozygous for variant.\n variant = genotype[0] !== \"0\" ? genotype[0] : genotype[1];\n variant = alt[parseInt(variant, 10) - 1];\n ctx.globalAlpha = 0.5;\n }\n\n // If there's a variant, draw it.\n if (variant) {\n draw_x_start = this.get_start_draw_pos(pos + variant.start, w_scale);\n if (variant.type === \"snp\") {\n var snp = variant.value;\n ctx.fillStyle = this.base_color_fn(snp);\n if (paint_utils.draw_details) {\n ctx.fillText(snp, this.get_draw_pos(pos, w_scale), draw_y_start + row_height);\n } else {\n ctx.fillRect(draw_x_start, draw_y_start + 1, base_px, feature_height);\n }\n } else if (variant.type === \"deletion\") {\n paint_utils.draw_deletion(draw_x_start, draw_y_start + 1, variant.len);\n } else {\n // TODO: handle insertions.\n }\n }\n }\n }\n\n ctx.restore();\n }\n});\n\nexport default {\n Scaler: Scaler,\n LinePainter: LinePainter,\n LinkedFeaturePainter: LinkedFeaturePainter,\n ReadPainter: ReadPainter,\n ArcLinkedFeaturePainter: ArcLinkedFeaturePainter,\n DiagonalHeatmapPainter: DiagonalHeatmapPainter,\n VariantPainter: VariantPainter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/painters.js","import * as _ from \"libs/underscore\";\nvar extend = _.extend;\n\n/**\n * Filters that enable users to show/hide data points dynamically.\n */\nvar Filter = function(obj_dict) {\n this.manager = null;\n this.name = obj_dict.name;\n // Index into payload to filter.\n this.index = obj_dict.index;\n this.tool_id = obj_dict.tool_id;\n // Name to use for filter when building expression for tool.\n this.tool_exp_name = obj_dict.tool_exp_name;\n};\n\nextend(Filter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function() {\n return {\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n };\n }\n});\n\n/**\n * Creates an action icon.\n */\nvar create_action_icon = (title, css_class, on_click_fn) =>\n $(\"\")\n .attr(\"href\", \"javascript:void(0);\")\n .attr(\"title\", title)\n .addClass(\"icon-button\")\n .addClass(css_class)\n .tooltip()\n .click(on_click_fn);\n\n/**\n * Number filters have a min, max as well as a low, high; low and high are used\n */\nvar NumberFilter = function(obj_dict) {\n //\n // Attribute init.\n //\n Filter.call(this, obj_dict);\n // Filter low/high. These values are used to filter elements.\n this.low = \"low\" in obj_dict ? obj_dict.low : -Number.MAX_VALUE;\n this.high = \"high\" in obj_dict ? obj_dict.high : Number.MAX_VALUE;\n // Slide min/max. These values are used to set/update slider.\n this.min = \"min\" in obj_dict ? obj_dict.min : Number.MAX_VALUE;\n this.max = \"max\" in obj_dict ? obj_dict.max : -Number.MAX_VALUE;\n // UI elements associated with filter.\n this.container = null;\n this.slider = null;\n this.slider_label = null;\n\n //\n // Create HTML.\n //\n\n // Function that supports inline text editing of slider values.\n // Enable users to edit parameter's value via a text box.\n var edit_slider_values = (container, span, slider) => {\n container.click(function() {\n var cur_value = span.text();\n var max = parseFloat(slider.slider(\"option\", \"max\"));\n\n var input_size = max <= 1 ? 4 : max <= 1000000 ? max.toString().length : 6;\n\n var multi_value = false;\n var slider_row = $(this).parents(\".slider-row\");\n\n // Row now has input.\n slider_row.addClass(\"input\");\n\n // Increase input size if there are two values.\n if (slider.slider(\"option\", \"values\")) {\n input_size = 2 * input_size + 1;\n multi_value = true;\n }\n span.text(\"\");\n // Temporary input for changing value.\n $(\"\")\n .attr(\"size\", input_size)\n .attr(\"maxlength\", input_size)\n .attr(\"value\", cur_value)\n .appendTo(span)\n .focus()\n .select()\n .click(e => {\n // Don't want click to propogate up to values_span and restart everything.\n e.stopPropagation();\n })\n .blur(function() {\n $(this).remove();\n span.text(cur_value);\n slider_row.removeClass(\"input\");\n })\n .keyup(function(e) {\n if (e.keyCode === 27) {\n // Escape key.\n $(this).trigger(\"blur\");\n } else if (e.keyCode === 13) {\n //\n // Enter/return key initiates callback. If new value(s) are in slider range,\n // change value (which calls slider's change() function).\n //\n var slider_min = slider.slider(\"option\", \"min\");\n\n var slider_max = slider.slider(\"option\", \"max\");\n\n var invalid = a_val => isNaN(a_val) || a_val > slider_max || a_val < slider_min;\n\n var new_value = $(this).val();\n if (!multi_value) {\n new_value = parseFloat(new_value);\n if (invalid(new_value)) {\n alert(`Parameter value must be in the range [${slider_min}-${slider_max}]`);\n return $(this);\n }\n } else {\n // Multi value.\n new_value = new_value.split(\"-\");\n new_value = [parseFloat(new_value[0]), parseFloat(new_value[1])];\n if (invalid(new_value[0]) || invalid(new_value[1])) {\n alert(`Parameter value must be in the range [${slider_min}-${slider_max}]`);\n return $(this);\n }\n }\n\n // Updating the slider also updates slider values and removes input.\n slider.slider(multi_value ? \"values\" : \"value\", new_value);\n slider_row.removeClass(\"input\");\n }\n });\n });\n };\n\n var filter = this;\n\n filter.parent_div = $(\"
\").addClass(\"filter-row slider-row\");\n\n // Set up filter label (name, values).\n var filter_label = $(\"
\")\n .addClass(\"elt-label\")\n .appendTo(filter.parent_div);\n\n var name_span = $(\"\")\n .addClass(\"slider-name\")\n .text(`${filter.name} `)\n .appendTo(filter_label);\n\n var values_span = $(\"\").text(`${this.low}-${this.high}`);\n\n var values_span_container = $(\"\")\n .addClass(\"slider-value\")\n .appendTo(filter_label)\n .append(\"[\")\n .append(values_span)\n .append(\"]\");\n\n filter.values_span = values_span;\n\n // Set up slider for filter.\n var slider_div = $(\"
\")\n .addClass(\"slider\")\n .appendTo(filter.parent_div);\n filter.control_element = $(\"
\")\n .attr(\"id\", `${filter.name}-filter-control`)\n .appendTo(slider_div);\n filter.control_element.slider({\n range: true,\n min: this.min,\n max: this.max,\n step: this.get_slider_step(this.min, this.max),\n values: [this.low, this.high],\n slide: function(event, ui) {\n filter.slide(event, ui);\n },\n change: function(event, ui) {\n filter.control_element.slider(\"option\", \"slide\").call(filter.control_element, event, ui);\n }\n });\n filter.slider = filter.control_element;\n filter.slider_label = values_span;\n\n // Enable users to edit slider values via text box.\n edit_slider_values(values_span_container, values_span, filter.control_element);\n\n // Set up filter display controls.\n var display_controls_div = $(\"
\")\n .addClass(\"display-controls\")\n .appendTo(filter.parent_div);\n this.transparency_icon = create_action_icon(\"Use filter for data transparency\", \"layer-transparent\", () => {\n if (filter.manager.alpha_filter !== filter) {\n // Setting this filter as the alpha filter.\n filter.manager.alpha_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div\n .find(\".layer-transparent\")\n .removeClass(\"active\")\n .hide();\n filter.transparency_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.alpha_filter = null;\n filter.transparency_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n })\n .appendTo(display_controls_div)\n .hide();\n this.height_icon = create_action_icon(\"Use filter for data height\", \"arrow-resize-090\", () => {\n if (filter.manager.height_filter !== filter) {\n // Setting this filter as the height filter.\n filter.manager.height_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div\n .find(\".arrow-resize-090\")\n .removeClass(\"active\")\n .hide();\n filter.height_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.height_filter = null;\n filter.height_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n })\n .appendTo(display_controls_div)\n .hide();\n filter.parent_div.hover(\n () => {\n filter.transparency_icon.show();\n filter.height_icon.show();\n },\n () => {\n if (filter.manager.alpha_filter !== filter) {\n filter.transparency_icon.hide();\n }\n if (filter.manager.height_filter !== filter) {\n filter.height_icon.hide();\n }\n }\n );\n\n // Add to clear floating layout.\n $(\"
\").appendTo(filter.parent_div);\n};\nextend(NumberFilter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function() {\n var obj_dict = Filter.prototype.to_dict.call(this);\n return extend(obj_dict, {\n type: \"number\",\n min: this.min,\n max: this.max,\n low: this.low,\n high: this.high\n });\n },\n /**\n * Return a copy of filter.\n */\n copy: function() {\n return new NumberFilter({\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n });\n },\n /**\n * Get step for slider.\n */\n // FIXME: make this a \"static\" function.\n get_slider_step: function(min, max) {\n var range = max - min;\n return range <= 2 ? 0.01 : 1;\n },\n /**\n * Handle slide events.\n */\n slide: function(event, ui) {\n var values = ui.values;\n\n // Set new values in UI.\n this.values_span.text(`${values[0]}-${values[1]}`);\n\n // Set new values in filter.\n this.low = values[0];\n this.high = values[1];\n\n // Set timeout to update if filter low, high are stable.\n var self = this;\n setTimeout(() => {\n if (values[0] === self.low && values[1] === self.high) {\n self.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }\n }, 25);\n },\n /**\n * Returns true if filter can be applied to element.\n */\n applies_to: function(element) {\n if (element.length > this.index) {\n return true;\n }\n return false;\n },\n /**\n * Helper function: returns true if value in in filter's [low, high] range.\n */\n _keep_val: function(val) {\n return isNaN(val) || (val >= this.low && val <= this.high);\n },\n /**\n * Returns true if (a) element's value(s) is in [low, high] (range is inclusive)\n * or (b) if value is non-numeric and hence unfilterable.\n */\n keep: function(element) {\n if (!this.applies_to(element)) {\n // No element to filter on.\n return true;\n }\n\n // Keep value function.\n var filter = this;\n\n // Do filtering.\n var to_filter = element[this.index];\n if (to_filter instanceof Array) {\n var returnVal = true;\n for (var i = 0; i < to_filter.length; i++) {\n if (!this._keep_val(to_filter[i])) {\n // Exclude element.\n returnVal = false;\n break;\n }\n }\n return returnVal;\n } else {\n return this._keep_val(element[this.index]);\n }\n },\n /**\n * Update filter's min and max values based on element's values.\n */\n update_attrs: function(element) {\n var updated = false;\n if (!this.applies_to(element)) {\n return updated;\n }\n\n //\n // Update filter's min, max based on element values.\n //\n\n // Make value(s) into an Array.\n var values = element[this.index];\n if (!(values instanceof Array)) {\n values = [values];\n }\n\n // Loop through values and update min, max.\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n if (value < this.min) {\n this.min = Math.floor(value);\n updated = true;\n }\n if (value > this.max) {\n this.max = Math.ceil(value);\n updated = true;\n }\n }\n return updated;\n },\n /**\n * Update filter's slider.\n */\n update_ui_elt: function() {\n // Only show filter if min < max because filter is not useful otherwise. This\n // covers all corner cases, such as when min, max have not been defined and\n // when min == max.\n if (this.min < this.max) {\n this.parent_div.show();\n } else {\n this.parent_div.hide();\n }\n\n var slider_min = this.slider.slider(\"option\", \"min\");\n var slider_max = this.slider.slider(\"option\", \"max\");\n if (this.min < slider_min || this.max > slider_max) {\n // Update slider min, max, step.\n this.slider.slider(\"option\", \"min\", this.min);\n this.slider.slider(\"option\", \"max\", this.max);\n this.slider.slider(\"option\", \"step\", this.get_slider_step(this.min, this.max));\n // Refresh slider:\n // TODO: do we want to keep current values or reset to min/max?\n // Currently we reset values:\n this.slider.slider(\"option\", \"values\", [this.min, this.max]);\n // To use the current values.\n //var values = this.slider.slider( \"option\", \"values\" );\n //this.slider.slider( \"option\", \"values\", values );\n }\n }\n});\n\n/**\n * Manages a set of filters.\n */\nvar FiltersManager = function(track, obj_dict) {\n this.track = track;\n this.alpha_filter = null;\n this.height_filter = null;\n this.filters = [];\n\n //\n // Create HTML.\n //\n\n //\n // Create parent div.\n //\n this.parent_div = $(\"
\")\n .addClass(\"filters\")\n .hide();\n // Disable dragging, double clicking, keys on div so that actions on slider do not impact viz.\n this.parent_div\n .bind(\"drag\", e => {\n e.stopPropagation();\n })\n .click(e => {\n e.stopPropagation();\n })\n .bind(\"dblclick\", e => {\n e.stopPropagation();\n })\n .bind(\"keydown\", e => {\n e.stopPropagation();\n });\n\n //\n // Restore state from dict.\n //\n if (obj_dict && \"filters\" in obj_dict) {\n // Second condition needed for backward compatibility.\n var alpha_filter_name = \"alpha_filter\" in obj_dict ? obj_dict.alpha_filter : null;\n\n var height_filter_name = \"height_filter\" in obj_dict ? obj_dict.height_filter : null;\n\n var filters_dict = obj_dict.filters;\n var filter;\n for (var i = 0; i < filters_dict.length; i++) {\n if (filters_dict[i].type === \"number\") {\n filter = new NumberFilter(filters_dict[i]);\n this.add_filter(filter);\n if (filter.name === alpha_filter_name) {\n this.alpha_filter = filter;\n filter.transparency_icon.addClass(\"active\").show();\n }\n if (filter.name === height_filter_name) {\n this.height_filter = filter;\n filter.height_icon.addClass(\"active\").show();\n }\n } else {\n console.log(\"ERROR: unsupported filter: \", name, type);\n }\n }\n\n if (\"visible\" in obj_dict && obj_dict.visible) {\n this.parent_div.show();\n }\n }\n\n // Add button to filter complete dataset.\n if (this.filters.length !== 0) {\n var run_buttons_row = $(\"
\")\n .addClass(\"param-row\")\n .appendTo(this.parent_div);\n var run_on_dataset_button = $(\"\")\n .attr(\"value\", \"Run on complete dataset\")\n .appendTo(run_buttons_row);\n var filter_manager = this;\n run_on_dataset_button.click(() => {\n filter_manager.run_on_dataset();\n });\n }\n};\n\nextend(FiltersManager.prototype, {\n // HTML manipulation and inspection.\n show: function() {\n this.parent_div.show();\n },\n hide: function() {\n this.parent_div.hide();\n },\n toggle: function() {\n this.parent_div.toggle();\n },\n visible: function() {\n return this.parent_div.is(\":visible\");\n },\n /**\n * Returns dictionary for manager.\n */\n to_dict: function() {\n var obj_dict = {};\n var filter_dicts = [];\n var filter;\n\n // Include individual filter states.\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n filter_dicts.push(filter.to_dict());\n }\n obj_dict.filters = filter_dicts;\n\n // Include transparency, height filters.\n obj_dict.alpha_filter = this.alpha_filter ? this.alpha_filter.name : null;\n obj_dict.height_filter = this.height_filter ? this.height_filter.name : null;\n\n // Include visibility.\n obj_dict.visible = this.parent_div.is(\":visible\");\n\n return obj_dict;\n },\n /**\n * Return a copy of the manager.\n */\n copy: function(new_track) {\n var copy = new FiltersManager(new_track);\n for (var i = 0; i < this.filters.length; i++) {\n copy.add_filter(this.filters[i].copy());\n }\n return copy;\n },\n /**\n * Add a filter to the manager.\n */\n add_filter: function(filter) {\n filter.manager = this;\n this.parent_div.append(filter.parent_div);\n this.filters.push(filter);\n },\n /**\n * Remove all filters from manager.\n */\n remove_all: function() {\n this.filters = [];\n this.parent_div.children().remove();\n },\n /**\n * Initialize filters.\n */\n\n init_filters: function() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.update_ui_elt();\n }\n },\n /**\n * Clear filters so that they do not impact track display.\n */\n clear_filters: function() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.slider.slider(\"option\", \"values\", [filter.min, filter.max]);\n }\n this.alpha_filter = null;\n this.height_filter = null;\n\n // Hide icons for setting filters.\n this.parent_div.find(\".icon-button\").hide();\n },\n run_on_dataset: function() {\n // Get or create dictionary item.\n var get_or_create_dict_item = (dict, key, new_item) => {\n // Add new item to dict if\n if (!(key in dict)) {\n dict[key] = new_item;\n }\n return dict[key];\n };\n\n //\n // Find and group active filters. Active filters are those being used to hide data.\n // Filters with the same tool id are grouped.\n //\n var active_filters = {};\n\n var filter;\n var tool_filter_conditions;\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n if (filter.tool_id) {\n // Add filtering conditions if filter low/high are set.\n if (filter.min !== filter.low) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = `${filter.tool_exp_name} >= ${filter.low}`;\n }\n if (filter.max !== filter.high) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = `${filter.tool_exp_name} <= ${filter.high}`;\n }\n }\n }\n\n //\n // Use tools to run filters.\n //\n\n // Create list of (tool_id, tool_filters) tuples.\n var active_filters_list = [];\n for (var tool_id in active_filters) {\n active_filters_list[active_filters_list.length] = [tool_id, active_filters[tool_id]];\n }\n\n // Invoke recursive function to run filters; this enables chaining of filters via\n // iteratively application.\n (function run_filter(input_dataset_id, filters) {\n var // Set up filtering info and params.\n filter_tuple = filters[0];\n\n var tool_id = filter_tuple[0];\n var tool_filters = filter_tuple[1];\n var tool_filter_str = `(${tool_filters.join(\") and (\")})`;\n\n var url_params = {\n cond: tool_filter_str,\n input: input_dataset_id,\n target_dataset_id: input_dataset_id,\n tool_id: tool_id\n };\n\n // Remove current filter.\n filters = filters.slice(1);\n\n $.getJSON(run_tool_url, url_params, response => {\n if (response.error) {\n // General error.\n Galaxy.modal.show({\n title: \"Filter Dataset\",\n body: `Error running tool ${tool_id}`,\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else if (filters.length === 0) {\n // No more filters to run.\n Galaxy.modal.show({\n title: \"Filtering Dataset\",\n body: \"Filter(s) are running on the complete dataset. Outputs are in dataset's history.\",\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else {\n // More filters to run.\n run_filter(response.dataset_id, filters);\n }\n });\n })(this.track.dataset_id, active_filters_list);\n }\n});\n\nexport default {\n FiltersManager: FiltersManager,\n NumberFilter: NumberFilter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/filters.js","/**\n This class creates a form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.\n*/\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport Portlet from \"mvc/ui/ui-portlet\";\nimport Repeat from \"mvc/form/form-repeat\";\nimport InputElement from \"mvc/form/form-input\";\nimport Parameters from \"mvc/form/form-parameters\";\nvar View = Backbone.View.extend({\n initialize: function(app, options) {\n this.app = app;\n this.inputs = options.inputs;\n this.parameters = new Parameters();\n this.setElement($(\"
\"));\n this.render();\n },\n\n /** Render section view */\n render: function() {\n var self = this;\n this.$el.empty();\n _.each(this.inputs, input => {\n self.add(input);\n });\n },\n\n /** Add a new input element */\n add: function(input) {\n var input_def = jQuery.extend(true, {}, input);\n input_def.id = input.id = Utils.uid();\n this.app.input_list[input_def.id] = input_def;\n switch (input_def.type) {\n case \"conditional\":\n this._addConditional(input_def);\n break;\n case \"repeat\":\n this._addRepeat(input_def);\n break;\n case \"section\":\n this._addSection(input_def);\n break;\n default:\n this._addRow(input_def);\n }\n },\n\n /** Add a conditional block */\n _addConditional: function(input_def) {\n var self = this;\n input_def.test_param.id = input_def.id;\n this.app.model.get(\"sustain_conditionals\") && (input_def.test_param.disabled = true);\n var field = this._addRow(input_def.test_param);\n\n // set onchange event for test parameter\n field.model &&\n field.model.set(\"onchange\", value => {\n var selectedCase = self.app.data.matchCase(input_def, value);\n for (var i in input_def.cases) {\n var case_def = input_def.cases[i];\n var section_row = self.$(`#${input_def.id}-section-${i}`);\n var nonhidden = false;\n for (var j in case_def.inputs) {\n if (!case_def.inputs[j].hidden) {\n nonhidden = true;\n break;\n }\n }\n if (i == selectedCase && nonhidden) {\n section_row.fadeIn(\"fast\");\n } else {\n section_row.hide();\n }\n }\n self.app.trigger(\"change\");\n });\n\n // add conditional sub sections\n for (var i in input_def.cases) {\n var sub_section = new View(this.app, {\n inputs: input_def.cases[i].inputs\n });\n this._append(sub_section.$el.addClass(\"ui-form-section\"), `${input_def.id}-section-${i}`);\n }\n\n // trigger refresh on conditional input field after all input elements have been created\n field.trigger(\"change\");\n },\n\n /** Add a repeat block */\n _addRepeat: function(input_def) {\n var self = this;\n var block_index = 0;\n\n // create repeat block element\n var repeat = new Repeat.View({\n title: input_def.title || \"Repeat\",\n min: input_def.min,\n max: input_def.max,\n onnew: function() {\n create(input_def.inputs);\n self.app.trigger(\"change\");\n }\n });\n\n // helper function to create new repeat blocks\n function create(inputs) {\n var sub_section_id = `${input_def.id}-section-${block_index++}`;\n var sub_section = new View(self.app, { inputs: inputs });\n repeat.add({\n id: sub_section_id,\n $el: sub_section.$el,\n ondel: function() {\n repeat.del(sub_section_id);\n self.app.trigger(\"change\");\n }\n });\n }\n\n //\n // add parsed/minimum number of repeat blocks\n //\n var n_cache = _.size(input_def.cache);\n for (var i = 0; i < Math.max(Math.max(n_cache, input_def.min || 0), input_def.default || 0); i++) {\n create(i < n_cache ? input_def.cache[i] : input_def.inputs);\n }\n\n // hide options\n this.app.model.get(\"sustain_repeats\") && repeat.hideOptions();\n\n // create input field wrapper\n var input_element = new InputElement(this.app, {\n label: input_def.title || input_def.name,\n help: input_def.help,\n field: repeat\n });\n this._append(input_element.$el, input_def.id);\n },\n\n /** Add a customized section */\n _addSection: function(input_def) {\n var portlet = new Portlet.View({\n title: input_def.title || input_def.name,\n cls: \"ui-portlet-section\",\n collapsible: true,\n collapsible_button: true,\n collapsed: !input_def.expanded\n });\n portlet.append(new View(this.app, { inputs: input_def.inputs }).$el);\n portlet.append(\n $(\"
\")\n .addClass(\"ui-form-info\")\n .html(input_def.help)\n );\n this.app.on(\"expand\", input_id => {\n portlet.$(`#${input_id}`).length > 0 && portlet.expand();\n });\n this._append(portlet.$el, input_def.id);\n },\n\n /** Add a single input field element */\n _addRow: function(input_def) {\n var self = this;\n var id = input_def.id;\n input_def.onchange =\n input_def.onchange ||\n (() => {\n self.app.trigger(\"change\", id);\n });\n var field = this.parameters.create(input_def);\n this.app.field_list[id] = field;\n var input_element = new InputElement(this.app, {\n name: input_def.name,\n label: input_def.hide_label ? \"\" : input_def.label || input_def.name,\n value: input_def.value,\n text_value: input_def.text_value,\n collapsible_value: input_def.collapsible_value,\n collapsible_preview: input_def.collapsible_preview,\n help: input_def.help,\n argument: input_def.argument,\n disabled: input_def.disabled,\n color: input_def.color,\n style: input_def.style,\n backdrop: input_def.backdrop,\n hidden: input_def.hidden,\n fixed: input_def.fixed,\n field: field\n });\n this.app.element_list[id] = input_element;\n this._append(input_element.$el, input_def.id);\n return field;\n },\n\n /** Append a new element to the form i.e. input element, repeat block, conditionals etc. */\n _append: function($el, id) {\n this.$el.append($el.addClass(\"section-row\").attr(\"id\", id));\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-section.js","/** This class creates a ui component which enables the dynamic creation of portlets */\nimport Utils from \"utils/utils\";\nimport Portlet from \"mvc/ui/ui-portlet\";\nimport Ui from \"mvc/ui/ui-misc\";\nvar View = Backbone.View.extend({\n initialize: function(options) {\n this.list = {};\n this.options = Utils.merge(options, {\n title: \"Repeat\",\n empty_text: \"Not available.\",\n max: null,\n min: null\n });\n this.button_new = new Ui.ButtonIcon({\n icon: \"fa-plus\",\n title: `Insert ${this.options.title}`,\n tooltip: `Add new ${this.options.title} block`,\n cls: \"ui-button-icon ui-clear-float form-repeat-add\",\n onclick: function() {\n options.onnew && options.onnew();\n }\n });\n this.setElement(\n $(\"
\")\n .append((this.$list = $(\"
\")))\n .append($(\"
\").append(this.button_new.$el))\n );\n },\n\n /** Number of repeat blocks */\n size: function() {\n return _.size(this.list);\n },\n\n /** Add new repeat block */\n add: function(options) {\n if (!options.id || this.list[options.id]) {\n Galaxy.emit.debug(\"form-repeat::add()\", \"Duplicate or invalid repeat block id.\");\n return;\n }\n var button_delete = new Ui.ButtonIcon({\n icon: \"fa-trash-o\",\n tooltip: \"Delete this repeat block\",\n cls: \"ui-button-icon-plain form-repeat-delete\",\n onclick: function() {\n options.ondel && options.ondel();\n }\n });\n var portlet = new Portlet.View({\n id: options.id,\n title: \"placeholder\",\n cls: options.cls || \"ui-portlet-repeat\",\n operations: { button_delete: button_delete }\n });\n portlet.append(options.$el);\n portlet.$el.addClass(\"section-row\").hide();\n this.list[options.id] = portlet;\n this.$list.append(portlet.$el.fadeIn(\"fast\"));\n this.options.max > 0 && this.size() >= this.options.max && this.button_new.disable();\n this._refresh();\n },\n\n /** Delete repeat block */\n del: function(id) {\n if (!this.list[id]) {\n Galaxy.emit.debug(\"form-repeat::del()\", \"Invalid repeat block id.\");\n return;\n }\n this.$list.find(`#${id}`).remove();\n delete this.list[id];\n this.button_new.enable();\n this._refresh();\n },\n\n /** Remove all */\n delAll: function() {\n for (var id in this.list) {\n this.del(id);\n }\n },\n\n /** Hides add/del options */\n hideOptions: function() {\n this.button_new.$el.hide();\n _.each(this.list, portlet => {\n portlet.hideOperation(\"button_delete\");\n });\n _.isEmpty(this.list) &&\n this.$el.append(\n $(\"
\")\n .addClass(\"ui-form-info\")\n .html(this.options.empty_text)\n );\n },\n\n /** Refresh view */\n _refresh: function() {\n var index = 0;\n for (var id in this.list) {\n var portlet = this.list[id];\n portlet.title(`${++index}: ${this.options.title}`);\n portlet[this.size() > this.options.min ? \"showOperation\" : \"hideOperation\"](\"button_delete\");\n }\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-repeat.js","/**\n This class creates a form input element wrapper\n*/\n\nexport default Backbone.View.extend({\n initialize: function(app, options) {\n this.app = app;\n this.app_options = app.model ? app.model.attributes : {};\n this.field = (options && options.field) || new Backbone.View();\n this.model =\n (options && options.model) ||\n new Backbone.Model({\n text_enable: this.app_options.text_enable || \"Enable\",\n text_disable: this.app_options.text_disable || \"Disable\",\n cls_enable: this.app_options.cls_enable || \"fa fa-caret-square-o-down\",\n cls_disable: this.app_options.cls_disable || \"fa fa-caret-square-o-up\",\n always_refresh: this.app_options.always_refresh\n }).set(options);\n\n // set element and link components\n this.setElement(this._template());\n this.$field = this.$(\".ui-form-field\");\n this.$info = this.$(\".ui-form-info\");\n this.$preview = this.$(\".ui-form-preview\");\n this.$collapsible = this.$(\".ui-form-collapsible\");\n this.$collapsible_text = this.$(\".ui-form-collapsible-text\");\n this.$collapsible_icon = this.$(\".ui-form-collapsible-icon\");\n this.$title = this.$(\".ui-form-title\");\n this.$title_text = this.$(\".ui-form-title-text\");\n this.$error_text = this.$(\".ui-form-error-text\");\n this.$error = this.$(\".ui-form-error\");\n this.$backdrop = this.$(\".ui-form-backdrop\");\n\n // add field element\n this.$field.prepend(this.field.$el);\n\n // decide wether to expand or collapse fields\n var collapsible_value = this.model.get(\"collapsible_value\");\n this.field.collapsed =\n collapsible_value !== undefined &&\n JSON.stringify(this.model.get(\"value\")) == JSON.stringify(collapsible_value);\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n\n // add click handler\n var self = this;\n this.$collapsible.on(\"click\", () => {\n self.field.collapsed = !self.field.collapsed;\n app.trigger && app.trigger(\"change\");\n self.render();\n });\n\n // hide error on value change\n if (this.field.model && !this.model.get(\"always_refresh\")) {\n this.listenTo(this.field.model, \"change:value\", () => {\n self.reset();\n });\n }\n },\n\n /** Set backdrop for input element */\n backdrop: function() {\n this.model.set(\"backdrop\", true);\n },\n\n /** Set error text */\n error: function(text) {\n this.model.set(\"error_text\", text);\n },\n\n /** Reset this view */\n reset: function() {\n !this.model.get(\"fixed\") && this.model.set(\"error_text\", null);\n },\n\n render: function() {\n // render help\n $(\".tooltip\").hide();\n var help_text = this.model.get(\"help\", \"\");\n var help_argument = this.model.get(\"argument\");\n if (help_argument && help_text.indexOf(`(${help_argument})`) == -1) {\n help_text += ` (${help_argument})`;\n }\n this.$info.html(help_text);\n // render visibility\n this.$el[this.model.get(\"hidden\") ? \"hide\" : \"show\"]();\n // render preview view for collapsed fields\n this.$preview[\n (this.field.collapsed && this.model.get(\"collapsible_preview\")) || this.model.get(\"disabled\")\n ? \"show\"\n : \"hide\"\n ]().html(_.escape(this.model.get(\"text_value\")));\n // render error messages\n var error_text = this.model.get(\"error_text\");\n this.$error[error_text ? \"show\" : \"hide\"]();\n this.$el[error_text ? \"addClass\" : \"removeClass\"](\"ui-error\");\n this.$error_text.html(error_text);\n // render backdrop\n this.$backdrop[this.model.get(\"backdrop\") ? \"show\" : \"hide\"]();\n // render input field\n this.field.collapsed || this.model.get(\"disabled\") ? this.$field.hide() : this.$field.show();\n // render input field color and style\n this.field.model &&\n this.field.model.set({\n color: this.model.get(\"color\"),\n style: this.model.get(\"style\")\n });\n // render collapsible options\n if (!this.model.get(\"disabled\") && this.model.get(\"collapsible_value\") !== undefined) {\n var collapsible_state = this.field.collapsed ? \"enable\" : \"disable\";\n this.$title_text.hide();\n this.$collapsible.show();\n this.$collapsible_text.text(this.model.get(\"label\"));\n this.$collapsible_icon\n .removeClass()\n .addClass(\"icon\")\n .addClass(this.model.get(`cls_${collapsible_state}`))\n .attr(\"data-original-title\", this.model.get(`text_${collapsible_state}`))\n .tooltip({ placement: \"bottom\" });\n } else {\n this.$title_text.show().text(this.model.get(\"label\"));\n this.$collapsible.hide();\n }\n },\n\n _template: function() {\n return $(\"
\")\n .addClass(\"ui-form-element\")\n .append(\n $(\"
\")\n .addClass(\"ui-form-error ui-error\")\n .append($(\"\").addClass(\"fa fa-arrow-down\"))\n .append($(\"\").addClass(\"ui-form-error-text\"))\n )\n .append(\n $(\"
\")\n .addClass(\"ui-form-title\")\n .append(\n $(\"
\")\n .addClass(\"ui-form-collapsible\")\n .append($(\"\").addClass(\"ui-form-collapsible-icon\"))\n .append($(\"\").addClass(\"ui-form-collapsible-text\"))\n )\n .append($(\"\").addClass(\"ui-form-title-text\"))\n )\n .append(\n $(\"
\")\n .addClass(\"ui-form-field\")\n .append($(\"\").addClass(\"ui-form-info\"))\n .append($(\"
\").addClass(\"ui-form-backdrop\"))\n )\n .append($(\"
\").addClass(\"ui-form-preview\"));\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-input.js","/**\n This class creates input elements. New input parameter types should be added to the types dictionary.\n*/\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport SelectContent from \"mvc/ui/ui-select-content\";\nimport SelectLibrary from \"mvc/ui/ui-select-library\";\nimport SelectFtp from \"mvc/ui/ui-select-ftp\";\nimport SelectGenomeSpace from \"mvc/ui/ui-select-genomespace\";\nimport ColorPicker from \"mvc/ui/ui-color-picker\";\n// create form view\nexport default Backbone.Model.extend({\n /** Available parameter types */\n types: {\n text: \"_fieldText\",\n password: \"_fieldText\",\n select: \"_fieldSelect\",\n data_column: \"_fieldSelect\",\n genomebuild: \"_fieldSelect\",\n data: \"_fieldData\",\n data_collection: \"_fieldData\",\n integer: \"_fieldSlider\",\n float: \"_fieldSlider\",\n boolean: \"_fieldBoolean\",\n drill_down: \"_fieldDrilldown\",\n color: \"_fieldColor\",\n hidden: \"_fieldHidden\",\n hidden_data: \"_fieldHidden\",\n baseurl: \"_fieldHidden\",\n library_data: \"_fieldLibrary\",\n ftpfile: \"_fieldFtp\",\n upload: \"_fieldUpload\",\n genomespacefile: \"_fieldGenomeSpace\"\n },\n\n /** Returns an input field for a given field type */\n create: function(input_def) {\n var fieldClass = this.types[input_def.type];\n var field = typeof this[fieldClass] === \"function\" ? this[fieldClass].call(this, input_def) : null;\n if (!field) {\n field = input_def.options ? this._fieldSelect(input_def) : this._fieldText(input_def);\n Galaxy.emit.debug(\"form-parameters::_addRow()\", `Auto matched field type (${input_def.type}).`);\n }\n input_def.value === undefined && (input_def.value = null);\n field.value(input_def.value);\n return field;\n },\n\n /** Data input field */\n _fieldData: function(input_def) {\n return new SelectContent.View({\n id: `field-${input_def.id}`,\n extensions: input_def.extensions,\n optional: input_def.optional,\n multiple: input_def.multiple,\n type: input_def.type,\n flavor: input_def.flavor,\n data: input_def.options,\n onchange: input_def.onchange\n });\n },\n\n /** Select/Checkbox/Radio options field */\n _fieldSelect: function(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // customize properties\n if (input_def.type == \"data_column\") {\n input_def.error_text = \"Missing columns in referenced dataset.\";\n }\n\n // identify available options\n var data = input_def.data;\n if (!data) {\n data = [];\n _.each(input_def.options, option => {\n data.push({ label: option[0], value: option[1] });\n });\n }\n\n // identify display type\n var SelectClass = Ui.Select;\n switch (input_def.display) {\n case \"checkboxes\":\n SelectClass = Ui.Checkbox;\n break;\n case \"radio\":\n SelectClass = Ui.Radio;\n break;\n case \"radiobutton\":\n SelectClass = Ui.RadioButton;\n break;\n }\n\n // create select field\n return new SelectClass.View({\n id: `field-${input_def.id}`,\n data: data,\n error_text: input_def.error_text || \"No options available\",\n readonly: input_def.readonly,\n multiple: input_def.multiple,\n optional: input_def.optional,\n onchange: input_def.onchange,\n individual: input_def.individual,\n searchable: input_def.flavor !== \"workflow\"\n });\n },\n\n /** Drill down options field */\n _fieldDrilldown: function(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // create drill down field\n return new Ui.Drilldown.View({\n id: `field-${input_def.id}`,\n data: input_def.options,\n display: input_def.display,\n optional: input_def.optional,\n onchange: input_def.onchange\n });\n },\n\n /** Text input field */\n _fieldText: function(input_def) {\n // field replaces e.g. a select field\n if (input_def.options && input_def.data) {\n input_def.area = input_def.multiple;\n if (Utils.isEmpty(input_def.value)) {\n input_def.value = null;\n } else {\n if ($.isArray(input_def.value)) {\n var str_value = \"\";\n for (var i in input_def.value) {\n str_value += String(input_def.value[i]);\n if (!input_def.multiple) {\n break;\n }\n str_value += \"\\n\";\n }\n input_def.value = str_value;\n }\n }\n }\n // create input element\n return new Ui.Input({\n id: `field-${input_def.id}`,\n type: input_def.type,\n area: input_def.area,\n readonly: input_def.readonly,\n placeholder: input_def.placeholder,\n datalist: input_def.datalist,\n onchange: input_def.onchange\n });\n },\n\n /** Slider field */\n _fieldSlider: function(input_def) {\n return new Ui.Slider.View({\n id: `field-${input_def.id}`,\n precise: input_def.type == \"float\",\n is_workflow: input_def.is_workflow,\n min: input_def.min,\n max: input_def.max,\n onchange: input_def.onchange\n });\n },\n\n /** Hidden field */\n _fieldHidden: function(input_def) {\n return new Ui.Hidden({\n id: `field-${input_def.id}`,\n info: input_def.info\n });\n },\n\n /** Boolean field */\n _fieldBoolean: function(input_def) {\n return new Ui.RadioButton.View({\n id: `field-${input_def.id}`,\n data: [{ label: \"Yes\", value: \"true\" }, { label: \"No\", value: \"false\" }],\n onchange: input_def.onchange\n });\n },\n\n /** Color picker field */\n _fieldColor: function(input_def) {\n return new ColorPicker({\n id: `field-${input_def.id}`,\n onchange: input_def.onchange\n });\n },\n\n /** Library dataset field */\n _fieldLibrary: function(input_def) {\n return new SelectLibrary.View({\n id: `field-${input_def.id}`,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** FTP file field */\n _fieldFtp: function(input_def) {\n return new SelectFtp.View({\n id: `field-${input_def.id}`,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** GenomeSpace file select field\n */\n _fieldGenomeSpace: function(input_def) {\n var self = this;\n return new SelectGenomeSpace.View({\n id: `field-${input_def.id}`,\n onchange: function() {\n self.app.trigger(\"change\");\n }\n });\n },\n\n /** Upload file field */\n _fieldUpload: function(input_def) {\n return new Ui.Upload({\n id: `field-${input_def.id}`,\n onchange: input_def.onchange\n });\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-parameters.js","import Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport Select from \"mvc/ui/ui-select-default\";\n/** Batch mode variations */\nvar Batch = { DISABLED: \"disabled\", ENABLED: \"enabled\", LINKED: \"linked\" };\n\n/** List of available content selectors options */\nvar Configurations = {\n data: [\n {\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n },\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.LINKED\n },\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.LINKED\n }\n ],\n data_multiple: [\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n },\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collections\",\n multiple: true,\n batch: Batch.DISABLED\n }\n ],\n data_collection: [\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }\n ],\n workflow_data: [\n {\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }\n ],\n workflow_data_multiple: [\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n }\n ],\n workflow_data_collection: [\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }\n ],\n module_data: [\n {\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n },\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.ENABLED\n }\n ],\n module_data_collection: [\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n },\n {\n src: \"hdca\",\n icon: \"fa-folder\",\n tooltip: \"Multiple collections\",\n multiple: true,\n batch: Batch.ENABLED\n }\n ]\n};\n\n/** View for hda and hdca content selector ui elements */\nvar View = Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n this.model =\n (options && options.model) ||\n new Backbone.Model({\n src_labels: { hda: \"dataset\", hdca: \"dataset collection\" },\n pagelimit: 100,\n statustimer: 1000\n }).set(options);\n this.setElement($(\"
\").addClass(\"ui-select-content\"));\n this.button_product = new Ui.RadioButton.View({\n value: \"false\",\n data: [\n {\n icon: \"fa fa-chain\",\n value: \"false\",\n tooltip:\n \"Linked inputs will be run in matched order with other datasets e.g. use this for matching forward and reverse reads.\"\n },\n {\n icon: \"fa fa-chain-broken\",\n value: \"true\",\n tooltip: \"Unlinked dataset inputs will be run against *all* other inputs.\"\n }\n ]\n });\n var $batch_div = $(\"
\")\n .addClass(\"ui-form-info\")\n .append($(\"\").addClass(\"fa fa-sitemap\"))\n .append(\n $(\"\").html(\n \"This is a batch mode input field. Separate jobs will be triggered for each dataset selection.\"\n )\n );\n this.$batch = {\n linked: $batch_div.clone(),\n enabled: $batch_div\n .clone()\n .append(\n $(\"
\")\n .append(\n $(\"
\")\n .addClass(\"ui-form-title\")\n .html(\"Batch options:\")\n )\n .append(this.button_product.$el)\n )\n .append($(\"
\").css(\"clear\", \"both\"))\n };\n\n // add drag-drop event handlers\n this.$el\n .on(\"dragenter\", function(e) {\n this.lastenter = e.target;\n self.$el.addClass(\"ui-dragover\");\n })\n .on(\"dragover\", e => {\n e.preventDefault();\n })\n .on(\"dragleave\", function(e) {\n this.lastenter === e.target && self.$el.removeClass(\"ui-dragover\");\n })\n .on(\"drop\", e => {\n self._handleDrop(e);\n });\n\n // track current history elements\n this.history = {};\n\n // add listeners\n this.listenTo(this.model, \"change:data\", this._changeData, this);\n this.listenTo(this.model, \"change:wait\", this._changeWait, this);\n this.listenTo(this.model, \"change:current\", this._changeCurrent, this);\n this.listenTo(this.model, \"change:value\", this._changeValue, this);\n this.listenTo(\n this.model,\n \"change:type change:optional change:multiple change:extensions\",\n this._changeType,\n this\n );\n this.render();\n\n // add change event\n this.on(\"change\", () => {\n options.onchange && options.onchange(self.value());\n });\n },\n\n render: function() {\n this._changeType();\n this._changeValue();\n this._changeWait();\n },\n\n /** Indicate that select fields are being updated */\n wait: function() {\n this.model.set(\"wait\", true);\n },\n\n /** Indicate that the options update has been completed */\n unwait: function() {\n this.model.set(\"wait\", false);\n },\n\n /** Update data representing selectable options */\n update: function(options) {\n this.model.set(\"data\", options);\n },\n\n /** Return the currently selected dataset values */\n value: function(new_value) {\n new_value !== undefined && this.model.set(\"value\", new_value);\n var current = this.model.get(\"current\");\n if (this.config[current]) {\n var id_list = this.fields[current].value();\n if (id_list !== null) {\n id_list = $.isArray(id_list) ? id_list : [id_list];\n if (id_list.length > 0) {\n var result = this._batch({ values: [] });\n for (var i in id_list) {\n var details = this.history[`${id_list[i]}_${this.config[current].src}`];\n if (details) {\n result.values.push(details);\n } else {\n Galaxy.emit.debug(\n \"ui-select-content::value()\",\n `Requested details not found for '${id_list[i]}'.`\n );\n return null;\n }\n }\n result.values.sort((a, b) => a.hid - b.hid);\n return result;\n }\n }\n } else {\n Galaxy.emit.debug(\"ui-select-content::value()\", `Invalid value/source '${new_value}'.`);\n }\n return null;\n },\n\n /** Change of current select field */\n _changeCurrent: function() {\n var self = this;\n _.each(this.fields, (field, i) => {\n if (self.model.get(\"current\") == i) {\n field.$el.show();\n _.each(self.$batch, ($batchfield, batchmode) => {\n $batchfield[self.config[i].batch == batchmode ? \"show\" : \"hide\"]();\n });\n self.button_type.value(i);\n } else {\n field.$el.hide();\n }\n });\n },\n\n /** Change of type */\n _changeType: function() {\n var self = this;\n\n // identify selector type identifier i.e. [ flavor ]_[ type ]_[ multiple ]\n var config_id =\n (this.model.get(\"flavor\") ? `${this.model.get(\"flavor\")}_` : \"\") +\n String(this.model.get(\"type\")) +\n (this.model.get(\"multiple\") ? \"_multiple\" : \"\");\n if (Configurations[config_id]) {\n this.config = Configurations[config_id];\n } else {\n this.config = Configurations[\"data\"];\n Galaxy.emit.debug(\"ui-select-content::_changeType()\", `Invalid configuration/type id '${config_id}'.`);\n }\n\n // prepare extension component of error message\n var data = self.model.get(\"data\");\n var extensions = Utils.textify(this.model.get(\"extensions\"));\n var src_labels = this.model.get(\"src_labels\");\n\n // build views\n this.fields = [];\n this.button_data = [];\n _.each(this.config, (c, i) => {\n self.button_data.push({\n value: i,\n icon: c.icon,\n tooltip: c.tooltip\n });\n self.fields.push(\n new Select.View({\n optional: self.model.get(\"optional\"),\n multiple: c.multiple,\n searchable:\n !c.multiple || (data && data[c.src] && data[c.src].length > self.model.get(\"pagelimit\")),\n individual: true,\n error_text: `No ${extensions ? `${extensions} ` : \"\"}${src_labels[c.src] || \"content\"} available.`,\n onchange: function() {\n self.trigger(\"change\");\n }\n })\n );\n });\n this.button_type = new Ui.RadioButton.View({\n value: this.model.get(\"current\"),\n data: this.button_data,\n onchange: function(value) {\n self.model.set(\"current\", value);\n self.trigger(\"change\");\n }\n });\n\n // append views\n this.$el.empty();\n var button_width = 0;\n if (this.fields.length > 1) {\n this.$el.append(this.button_type.$el);\n button_width = `${Math.max(0, this.fields.length * 36)}px`;\n }\n _.each(this.fields, field => {\n self.$el.append(field.$el.css({ \"margin-left\": button_width }));\n });\n _.each(this.$batch, ($batchfield, batchmode) => {\n self.$el.append($batchfield.css({ \"margin-left\": button_width }));\n });\n this.model.set(\"current\", 0);\n this._changeCurrent();\n this._changeData();\n },\n\n /** Change of wait flag */\n _changeWait: function() {\n var self = this;\n _.each(this.fields, field => {\n field[self.model.get(\"wait\") ? \"wait\" : \"unwait\"]();\n });\n },\n\n /** Change of available options */\n _changeData: function() {\n var options = this.model.get(\"data\");\n var self = this;\n var select_options = {};\n _.each(options, (items, src) => {\n select_options[src] = [];\n _.each(items, item => {\n select_options[src].push({\n hid: item.hid,\n keep: item.keep,\n label: `${item.hid}: ${item.name}`,\n value: item.id,\n tags: item.tags\n });\n self.history[`${item.id}_${src}`] = item;\n });\n });\n _.each(this.config, (c, i) => {\n select_options[c.src] && self.fields[i].add(select_options[c.src], (a, b) => b.hid - a.hid);\n });\n },\n\n /** Change of incoming value */\n _changeValue: function() {\n var new_value = this.model.get(\"value\");\n if (new_value && new_value.values && new_value.values.length > 0) {\n // create list with content ids\n var list = [];\n _.each(new_value.values, value => {\n list.push(value.id);\n });\n // sniff first suitable field type from config list\n var src = new_value.values[0].src;\n var multiple = new_value.values.length > 1;\n for (var i = 0; i < this.config.length; i++) {\n var field = this.fields[i];\n var c = this.config[i];\n if (c.src == src && [multiple, true].indexOf(c.multiple) !== -1) {\n this.model.set(\"current\", i);\n field.value(list);\n break;\n }\n }\n } else {\n _.each(this.fields, field => {\n field.value(null);\n });\n }\n },\n\n /** Handles drop events e.g. from history panel */\n _handleDrop: function(ev) {\n try {\n var data = this.model.get(\"data\");\n var current = this.model.get(\"current\");\n var config = this.config[current];\n var field = this.fields[current];\n var drop_data = JSON.parse(ev.originalEvent.dataTransfer.getData(\"text\"))[0];\n var new_id = drop_data.id;\n var new_src = drop_data.history_content_type == \"dataset\" ? \"hda\" : \"hdca\";\n var new_value = { id: new_id, src: new_src };\n if (data && _.findWhere(data[new_src], new_value)) {\n if (config.src == new_src) {\n var current_value = field.value();\n if (current_value && config.multiple) {\n if (current_value.indexOf(new_id) == -1) {\n current_value.push(new_id);\n }\n } else {\n current_value = new_id;\n }\n field.value(current_value);\n } else {\n this.model.set(\"value\", { values: [new_value] });\n this.model.trigger(\"change:value\");\n }\n this.trigger(\"change\");\n this._handleDropStatus(\"success\");\n } else {\n this._handleDropStatus(\"danger\");\n }\n } catch (e) {\n this._handleDropStatus(\"danger\");\n }\n ev.preventDefault();\n },\n\n /** Highlight drag result */\n _handleDropStatus: function(status) {\n var self = this;\n this.$el.removeClass(\"ui-dragover\").addClass(`ui-dragover-${status}`);\n setTimeout(() => {\n self.$el.removeClass(`ui-dragover-${status}`);\n }, this.model.get(\"statustimer\"));\n },\n\n /** Assists in identifying the batch mode */\n _batch: function(result) {\n result[\"batch\"] = false;\n var current = this.model.get(\"current\");\n var config = this.config[current];\n if (config.src == \"hdca\" && !config.multiple) {\n var hdca = this.history[`${this.fields[current].value()}_hdca`];\n if (hdca && hdca.map_over_type) {\n result[\"batch\"] = true;\n }\n }\n if (config.batch == Batch.LINKED || config.batch == Batch.ENABLED) {\n result[\"batch\"] = true;\n if (config.batch == Batch.ENABLED && this.button_product.value() === \"true\") {\n result[\"product\"] = true;\n }\n }\n return result;\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-content.js","// dependencies\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport Table from \"mvc/ui/ui-table\";\nimport List from \"mvc/ui/ui-list\";\n// collection of libraries\nvar Libraries = Backbone.Collection.extend({\n url: `${Galaxy.root}api/libraries?deleted=false`\n});\n\n// collection of dataset\nvar LibraryDatasets = Backbone.Collection.extend({\n initialize: function() {\n var self = this;\n this.config = new Backbone.Model({ library_id: null });\n this.config.on(\"change\", () => {\n self.fetch({ reset: true });\n });\n },\n url: function() {\n return `${Galaxy.root}api/libraries/${this.config.get(\"library_id\")}/contents`;\n }\n});\n\n// hda/hdca content selector ui element\nvar View = Backbone.View.extend({\n // initialize\n initialize: function(options) {\n // link this\n var self = this;\n\n // collections\n this.libraries = new Libraries();\n this.datasets = new LibraryDatasets();\n\n // link app and options\n this.options = options;\n\n // select field for the library\n // TODO: Remove this once the library API supports searching for library datasets\n this.library_select = new Ui.Select.View({\n onchange: function(value) {\n self.datasets.config.set(\"library_id\", value);\n }\n });\n\n // create ui-list view to keep track of selected data libraries\n this.dataset_list = new List.View({\n name: \"dataset\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function() {\n self.trigger(\"change\");\n }\n });\n\n // add reset handler for fetched libraries\n this.libraries.on(\"reset\", () => {\n var data = [];\n self.libraries.each(model => {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n });\n self.library_select.update(data);\n });\n\n // add reset handler for fetched library datasets\n this.datasets.on(\"reset\", () => {\n var data = [];\n var library_current = self.library_select.text();\n if (library_current !== null) {\n self.datasets.each(model => {\n if (model.get(\"type\") === \"file\") {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n }\n });\n }\n self.dataset_list.update(data);\n });\n\n // add change event. fires on trigger\n this.on(\"change\", () => {\n options.onchange && options.onchange(self.value());\n });\n\n // create elements\n this.setElement(this._template());\n this.$(\".library-select\").append(this.library_select.$el);\n this.$el.append(this.dataset_list.$el);\n\n // initial fetch of libraries\n this.libraries.fetch({\n reset: true,\n success: function() {\n self.library_select.trigger(\"change\");\n if (self.options.value !== undefined) {\n self.value(self.options.value);\n }\n }\n });\n },\n\n /** Return/Set currently selected library datasets */\n value: function(val) {\n return this.dataset_list.value(val);\n },\n\n /** Template */\n _template: function() {\n return (\n '
' +\n '
' +\n 'Select Library' +\n '' +\n \"
\" +\n \"
\"\n );\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-library.js","// dependencies\nimport Utils from \"utils/utils\";\nimport List from \"mvc/ui/ui-list\";\n/**\n * FTP file selector\n */\nvar View = Backbone.View.extend({\n // initialize\n initialize: function(options) {\n // link this\n var self = this;\n\n // create ui-list view to keep track of selected ftp files\n this.ftpfile_list = new List.View({\n name: \"file\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function() {\n options.onchange && options.onchange(self.value());\n }\n });\n\n // create elements\n this.setElement(this.ftpfile_list.$el);\n\n // initial fetch of ftps\n Utils.get({\n url: `${Galaxy.root}api/remote_files`,\n success: function(response) {\n var data = [];\n for (var i in response) {\n data.push({\n value: response[i][\"path\"],\n label: response[i][\"path\"]\n });\n }\n self.ftpfile_list.update(data);\n }\n });\n },\n\n /** Return/Set currently selected ftp datasets */\n value: function(val) {\n return this.ftpfile_list.value(val);\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-ftp.js","// dependencies\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport GenomespaceBrowser from \"mvc/tool/tool-genomespace\";\n/**\n * GenomeSpace file selector\n */\nvar View = Backbone.View.extend({\n // initialize\n initialize: function(options) {\n // link this\n var self = this;\n\n // create insert new list element button\n this.browse_button = new Ui.ButtonIcon({\n title: \"Browse\",\n icon: \"fa fa-sign-in\",\n tooltip: \"Browse GenomeSpace\",\n onclick: function() {\n self.browseGenomeSpace();\n }\n });\n\n // create genomespace filepath textbox\n this.filename_textbox = new Ui.Input();\n\n // create genomespace token textbox\n this.token_textbox = new Ui.Input({\n type: \"password\"\n });\n\n // create elements\n this.setElement(this._template(options));\n this.$(\".ui-gs-browse-button\").append(this.browse_button.$el);\n this.$(\".ui-gs-filename-textbox\").append(this.filename_textbox.$el);\n this.$(\".ui-gs-token-textbox\").append(this.token_textbox.$el);\n },\n\n /** Browse GenomeSpace */\n browseGenomeSpace: function(options) {\n var self = this;\n GenomespaceBrowser.openFileBrowser({\n successCallback: function(data) {\n self.value(`${data.destination}^${data.token}`);\n }\n });\n },\n\n /** Main Template */\n _template: function(options) {\n return (\n '
' +\n '
' +\n '' +\n '' +\n \"
\" +\n '
' +\n '
Token
' +\n '' +\n \"
\" +\n \"
\"\n );\n },\n\n /** Return/Set currently selected genomespace filename/token */\n value: function(new_value) {\n // check if new_value is defined\n if (new_value !== undefined) {\n this._setValue(new_value);\n } else {\n return this._getValue();\n }\n },\n\n // get value\n _getValue: function() {\n return `${this.filename_textbox.value()}^${this.token_textbox.value()}`;\n },\n\n // set value\n _setValue: function(new_value) {\n if (new_value) {\n values = new_value.split(\"^\");\n this.filename_textbox.value(values[0]);\n this.token_textbox.value(values[1]);\n }\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-genomespace.js","// Provides support for interacting with the GenomeSpace File Browser popup dialogue\n\n// tool form templates\nexport default {\n openFileBrowser: function(options) {\n var GS_UI_URL = window.Galaxy.config.genomespace_ui_url;\n var GS_UPLOAD_URL = `${GS_UI_URL}upload/loadUrlToGenomespace.html?getLocation=true`;\n\n var newWin = window.open(GS_UPLOAD_URL, \"GenomeSpace File Browser\", \"height=360px,width=600px\");\n\n successCalBack = options[\"successCallback\"];\n window.addEventListener(\n \"message\",\n e => {\n successCalBack(e.data);\n },\n false\n );\n\n newWin.focus();\n\n if (options[\"errorCallback\"] != null) newWin.setCallbackOnGSUploadError = config[\"errorCallback\"];\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/tool/tool-genomespace.js","/** Renders the color picker used e.g. in the tool form **/\nimport Utils from \"utils/utils\";\nexport default Backbone.View.extend({\n colors: {\n standard: [\"c00000\", \"ff0000\", \"ffc000\", \"ffff00\", \"92d050\", \"00b050\", \"00b0f0\", \"0070c0\", \"002060\", \"7030a0\"],\n base: [\"ffffff\", \"000000\", \"eeece1\", \"1f497d\", \"4f81bd\", \"c0504d\", \"9bbb59\", \"8064a2\", \"4bacc6\", \"f79646\"],\n theme: [\n [\"f2f2f2\", \"7f7f7f\", \"ddd9c3\", \"c6d9f0\", \"dbe5f1\", \"f2dcdb\", \"ebf1dd\", \"e5e0ec\", \"dbeef3\", \"fdeada\"],\n [\"d8d8d8\", \"595959\", \"c4bd97\", \"8db3e2\", \"b8cce4\", \"e5b9b7\", \"d7e3bc\", \"ccc1d9\", \"b7dde8\", \"fbd5b5\"],\n [\"bfbfbf\", \"3f3f3f\", \"938953\", \"548dd4\", \"95b3d7\", \"d99694\", \"c3d69b\", \"b2a2c7\", \"92cddc\", \"fac08f\"],\n [\"a5a5a5\", \"262626\", \"494429\", \"17365d\", \"366092\", \"953734\", \"76923c\", \"5f497a\", \"31859b\", \"e36c09\"],\n [\"7f7f7e\", \"0c0c0c\", \"1d1b10\", \"0f243e\", \"244061\", \"632423\", \"4f6128\", \"3f3151\", \"205867\", \"974806\"]\n ]\n },\n\n initialize: function(options) {\n this.options = Utils.merge(options, {});\n this.setElement(this._template());\n this.$panel = this.$(\".ui-color-picker-panel\");\n this.$view = this.$(\".ui-color-picker-view\");\n this.$value = this.$(\".ui-color-picker-value\");\n this.$header = this.$(\".ui-color-picker-header\");\n this._build();\n this.visible = false;\n this.value(this.options.value);\n this.$boxes = this.$(\".ui-color-picker-box\");\n var self = this;\n this.$boxes.on(\"click\", function() {\n self.value($(this).css(\"background-color\"));\n self.$header.trigger(\"click\");\n });\n this.$header.on(\"click\", () => {\n self.visible = !self.visible;\n if (self.visible) {\n self.$view.fadeIn(\"fast\");\n } else {\n self.$view.fadeOut(\"fast\");\n }\n });\n },\n\n /** Get/set value */\n value: function(new_val) {\n if (new_val !== undefined && new_val !== null) {\n this.$value.css(\"background-color\", new_val);\n this.$(\".ui-color-picker-box\").empty();\n this.$(this._getValue()).html(this._templateCheck());\n this.options.onchange && this.options.onchange(new_val);\n }\n return this._getValue();\n },\n\n /** Get value from dom */\n _getValue: function() {\n var rgb = this.$value.css(\"background-color\");\n rgb = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (rgb) {\n function hex(x) {\n return `0${parseInt(x).toString(16)}`.slice(-2);\n }\n return `#${hex(rgb[1])}${hex(rgb[2])}${hex(rgb[3])}`;\n } else {\n return null;\n }\n },\n\n /** Build color panel */\n _build: function() {\n this._content({ colors: this.colors.base });\n for (var i in this.colors.theme) {\n var line_def = {};\n if (i == 0) {\n line_def[\"bottom\"] = true;\n } else if (i != this.colors.theme.length - 1) {\n line_def[\"top\"] = true;\n line_def[\"bottom\"] = true;\n } else {\n line_def[\"top\"] = true;\n }\n line_def[\"colors\"] = this.colors.theme[i];\n this._content(line_def);\n }\n this._content({ colors: this.colors.standard });\n },\n\n /** Create content */\n _content: function(options) {\n var colors = options.colors;\n var $content = $(this._templateContent());\n var $line = $content.find(\".line\");\n this.$panel.append($content);\n for (var i in colors) {\n var $box = $(this._templateBox(colors[i]));\n if (options.top) {\n $box.css(\"border-top\", \"none\");\n $box.css(\"border-top-left-radius\", \"0px\");\n $box.css(\"border-top-right-radius\", \"0px\");\n }\n if (options.bottom) {\n $box.css(\"border-bottom\", \"none\");\n $box.css(\"border-bottom-left-radius\", \"0px\");\n $box.css(\"border-bottom-right-radius\", \"0px\");\n }\n $line.append($box);\n }\n return $content;\n },\n\n /** Check icon */\n _templateCheck: function() {\n return '
';\n },\n\n /** Content template */\n _templateContent: function() {\n return '
' + '
' + \"
\";\n },\n\n /** Box template */\n _templateBox: function(color) {\n return `
`;\n },\n\n /** Main template */\n _template: function() {\n return (\n '
' +\n '
' +\n '
' +\n '
Select a color
' +\n \"
\" +\n '
' +\n '
' +\n \"
\"\n );\n (\"
\");\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-color-picker.js","/**\n * Parser.js\n * Copyright 2012-13 Mayank Lahiri\n * mlahiri@gmail.com\n * Released under the BSD License.\n *\n * A forgiving Bibtex parser that can:\n * \n * (1) operate in streaming or block mode, extracting entries as dictionaries. \n * (2) convert Latex special characters to UTF-8.\n * (3) best-effort parse malformed entries.\n * (4) run in a CommonJS environment or a browser, without any dependencies.\n * (5) be advanced-compiled by Google Closure Compiler.\n * \n * Handwritten as a labor of love, not auto-generated from a grammar. \n *\n * Modes of usage:\n *\n * (1) Synchronous, string\n *\n * var entries = BibtexParser(text);\n * console.log(entries);\n *\n * (2) Asynchronous, stream\n *\n * var entryCallback = function(entry) { console.log(entry); }\n * var parser = new BibtexParser(entryCallback);\n * parser.parse(chunk1);\n * parser.parse(chunk2);\n * ...\n * \n * @param {text|function(Object)} arg Either a Bibtex string or callback \n * function for processing parsed entries.\n * @constructor\n */\nfunction BibtexParser(arg0) {\n // Determine how this function is to be used\n if (typeof arg0 == 'string') {\n // Passed a string, synchronous call without 'new'\n var tempStorage = {};\n var entries = [];\n function accumulator(entry) {\n entries.push(entry);\n }\n var parser = BibtexParser.call(tempStorage, accumulator);\n parser.parse(arg0);\n return {\n 'entries': entries,\n 'errors': parser.getErrors()\n }\n }\n if (typeof arg0 != 'function') {\n throw 'Invalid parser construction.';\n }\n\n /** @enum {number} */\n this.STATES_ = {\n ENTRY_OR_JUNK: 0,\n OBJECT_TYPE: 1,\n ENTRY_KEY: 2, \n KV_KEY: 3, \n EQUALS: 4,\n KV_VALUE: 5 \n }\n /** @private */ this.DATA_ = {};\n /** @private */ this.CALLBACK_ = arg0;\n /** @private */ this.CHAR_ = 0;\n /** @private */ this.LINE_ = 1;\n /** @private */ this.CHAR_IN_LINE_ = 0;\n /** @private */ this.SKIPWS_ = true;\n /** @private */ this.SKIPCOMMENT_ = true;\n /** @private */ this.PARSETMP_ = {};\n /** @private */ this.SKIPTILLEOL_ = false;\n /** @private */ this.VALBRACES_ = null;\n /** @private */ this.BRACETYPE_ = null;\n /** @private */ this.BRACECOUNT_ = 0;\n /** @private */ this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n /** @private */ this.ERRORS_ = [];\n /** @private */ this.ENTRY_TYPES_ = {\n 'inproceedings' : 1,\n 'proceedings' : 2,\n 'article' : 3,\n 'techreport' : 4,\n 'misc' : 5,\n 'mastersthesis' : 6,\n 'book' : 7,\n 'phdthesis' : 8,\n 'incollection' : 9,\n 'unpublished' : 10,\n 'inbook' : 11,\n 'manual' : 12,\n 'periodical' : 13,\n 'booklet' : 14,\n 'masterthesis' : 15,\n 'conference' : 16\n }\n /** @private */ this.MACROS_ = {\n 'jan' : 'January',\n 'feb' : 'February',\n 'mar' : 'March',\n 'apr' : 'April',\n 'may' : 'May',\n 'jun' : 'June',\n 'jul' : 'July',\n 'aug' : 'August',\n 'sep' : 'September',\n 'oct' : 'October',\n 'nov' : 'November',\n 'dec' : 'December',\n 'Jan' : 'January',\n 'Feb' : 'February',\n 'Mar' : 'March',\n 'Apr' : 'April',\n 'May' : 'May',\n 'Jun' : 'June',\n 'Jul' : 'July',\n 'Aug' : 'August',\n 'Sep' : 'September',\n 'Oct' : 'October',\n 'Nov' : 'November',\n 'Dec' : 'December'\n }\n\n /**\n * Gets an array of all errors encountered during parsing.\n * Array entries are of the format:\n * [ line number, character in line, character in stream, error text ]\n *\n * @returns Array\n * @public\n */\n this.getErrors = function() {\n return this.ERRORS_;\n }\n\n /**\n * Processes a chunk of data\n * @public\n */\n this.parse = function(chunk) {\n for (var i = 0; i < chunk.length; i++)\n this.processCharacter_(chunk[i]);\n }\n\n /**\n * Logs error at current stream position.\n *\n * @private\n */\n this.error_ = function(text) {\n this.ERRORS_.push([ this.LINE_, \n this.CHAR_IN_LINE_,\n this.CHAR_,\n text ])\n }\n\n /**\n * Called after an entire entry has been parsed from the stream.\n * Performs post-processing and invokes the entry callback pointed to by\n * this.CALLBACK_. Parsed (but unprocessed) entry data is in this.DATA_.\n */\n this.processEntry_ = function() {\n var data = this.DATA_;\n if (data.Fields) \n for (var f in data.Fields) {\n var raw = data.Fields[f];\n\n // Convert Latex/Bibtex special characters to UTF-8 equivalents\n for (var i = 0; i < this.CHARCONV_.length; i++) {\n var re = this.CHARCONV_[i][0];\n var rep = this.CHARCONV_[i][1];\n raw = raw.replace(re, rep);\n }\n\n // Basic substitutions\n raw = raw.replace(/[\\n\\r\\t]/g, ' ')\n .replace(/\\s\\s+/g, ' ')\n .replace(/^\\s+|\\s+$/g, '')\n\n // Remove braces and backslashes\n var len = raw.length;\n var processed = '';\n for (var i = 0; i < len; i++) {\n var c = raw[i];\n var skip = false;\n if (c == '\\\\' && i < len-1) \n c = raw[++i];\n else {\n if (c == '{' || c == '}')\n skip = true;\n }\n if (!skip)\n processed += c;\n }\n data.Fields[f] = processed\n }\n\n if (data.ObjectType == 'string') {\n for (var f in data.Fields) { \n this.MACROS_[f] = data.Fields[f];\n }\n } else {\n // Parsed a new Bibtex entry\n this.CALLBACK_(data);\n }\n }\n\n\n /**\n * Processes next character in the stream, invoking the callback after \n * each entry has been found and processed.\n * \n * @private\n * @param {string} c Next character in input stream\n */\n this.processCharacter_ = function(c) {\n // Housekeeping\n this.CHAR_++;\n this.CHAR_IN_LINE_++;\n if (c == '\\n') {\n this.LINE_++;\n this.CHAR_IN_LINE_ = 1;\n }\n\n // Convenience states for skipping whitespace when needed\n if (this.SKIPTILLEOL_) {\n if (c == '\\n')\n this.SKIPTILLEOL_ = false;\n return;\n }\n if (this.SKIPCOMMENT_ && c == '%') {\n this.SKIPTILLEOL_ = true;\n return;\n }\n if (this.SKIPWS_ && /\\s/.test(c))\n return;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n this.SKIPTILLEOL_ = false;\n\n // Main state machine\n var AnotherIteration = true;\n while (AnotherIteration) {\n //console.log(this.LINE_, this.CHAR_IN_LINE_, this.STATE_, c)\n AnotherIteration = false;\n switch(this.STATE_) {\n // -- Scan for an object marker ('@')\n // -- Reset temporary data structure in case previous entry was garbled\n case this.STATES_.ENTRY_OR_JUNK:\n if (c == '@') {\n // SUCCESS: Parsed a valid start-of-object marker.\n // NEXT_STATE: OBJECT_TYPE\n this.STATE_ = this.STATES_.OBJECT_TYPE;\n this.DATA_ = {\n ObjectType : ''\n };\n }\n this.BRACETYPE_ = null;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n\n // Start at first non-whitespace character after start-of-object '@'\n // -- Accept [A-Za-z], break on non-matching character\n // -- Populate this.DATA_.EntryType and this.DATA_.ObjectType\n case this.STATES_.OBJECT_TYPE:\n if (/[A-Za-z]/.test(c)) {\n this.DATA_.ObjectType += c.toLowerCase();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // Break from state and validate object type\n var ot = this.DATA_.ObjectType;\n if (ot == 'comment') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot == 'string') {\n this.DATA_.ObjectType = ot;\n this.DATA_.Fields = {};\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.STATE_ = this.STATES_.KV_KEY;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.PARSETMP_ = {\n Key: ''\n }\n } else {\n if (ot == 'preamble') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot in this.ENTRY_TYPES_) {\n // SUCCESS: Parsed a valid object type.\n // NEXT_STATE: ENTRY_KEY\n this.DATA_.ObjectType = 'entry';\n this.DATA_.EntryType = ot;\n this.DATA_.EntryKey = '';\n this.STATE_ = this.STATES_.ENTRY_KEY;\n AnotherIteration = true;\n } else {\n // ERROR: Unrecognized object type.\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Unrecognized object type: \"' +\n this.DATA_.ObjectType + '\"')\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n }\n }\n }\n }\n }\n break;\n\n // Start at first non-alphabetic character after an entry type\n // -- Populate this.DATA_.EntryKey\n case this.STATES_.ENTRY_KEY:\n if ((c === '{' || c === '(') && this.BRACETYPE_ == null) {\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n }\n if (/[,%\\s]/.test(c)) {\n if (this.DATA_.EntryKey.length < 1) { \n // Skip comments and whitespace before entry key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n if (this.BRACETYPE_ == null) {\n // ERROR: No opening brace for object\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('No opening brace for object.');\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n // SUCCESS: Parsed an entry key\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n AnotherIteration = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.PARSETMP_.Key= '';\n this.DATA_.Fields = {};\n }\n }\n } else {\n this.DATA_.EntryKey += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n }\n break;\n\n // Start at first non-whitespace/comment character after entry key.\n // -- Populate this.PARSETMP_.Key\n case this.STATES_.KV_KEY:\n // Test for end of entry\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // SUCCESS: Parsed an entry, possible incomplete\n // NEXT_STATE: ENTRY_OR_JUNK\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (/[\\-A-Za-z:]/.test(c)) {\n // Add to key\n this.PARSETMP_.Key += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // Either end of key or we haven't encountered start of key\n if (this.PARSETMP_.Key.length < 1) {\n // Keep going till we see a key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // SUCCESS: Found full key in K/V pair\n // NEXT_STATE: EQUALS\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.EQUALS;\n AnotherIteration = true;\n }\n }\n break;\n\n // Start at first non-alphabetic character after K/V pair key.\n case this.STATES_.EQUALS:\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // ERROR: K/V pair with key but no value\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Key-value pair has key \"' +\n this.PARSETMP_.Key + '\", but no value.');\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (c == '=') {\n // SUCCESS: found an equal signs separating key and value\n // NEXT_STATE: KV_VALUE\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_VALUE;\n this.PARSETMP_.Value = '';\n this.VALBRACES_ = { '\"' : [], '{' : [] };\n }\n break;\n\n // Start at first non-whitespace/comment character after '=' \n // -- Populate this.PARSETMP_.Value\n case this.STATES_.KV_VALUE:\n var delim = this.VALBRACES_;\n var val = this.PARSETMP_.Value;\n var doneParsingValue = false;\n\n // Test for special characters\n if (c == '\"' || c == '{' || c == '}' || c == ',') {\n if (c == ',') {\n // This comma can mean:\n // (1) just another comma literal\n // (2) end of a macro reference\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of a macro reference\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n doneParsingValue = true;\n }\n }\n if (c == '\"') {\n // This quote can mean:\n // (1) opening delimiter\n // (2) closing delimiter\n // (3) literal, if we have a '{' on the stack\n if (0 === delim['\"'].length + delim['{'].length) {\n // opening delimiter\n delim['\"'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n break;\n }\n if (delim['\"'].length == 1 && delim['{'].length == 0 &&\n (val.length==0 || val[val.length-1] != '\\\\')) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // literal, add to value\n }\n }\n if (c == '{') {\n // This brace can mean:\n // (1) opening delimiter\n // (2) stacked verbatim delimiter\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n delim['{'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // literal, add to value\n }\n }\n if (c == '}') {\n // This brace can mean:\n // (1) closing delimiter\n // (2) closing stacked verbatim delimiter\n // (3) end of object definition if value was a macro\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of object definition, after macro\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n AnotherIteration = true;\n doneParsingValue = true;\n } else {\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n if (delim['{'].length > 0) {\n // pop stack for stacked verbatim delimiter\n delim['{'].splice(delim['{'].length-1, 1)\n if (0 == delim['{'].length + delim['\"'].length) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // end verbatim block\n }\n }\n } else {\n // literal, add to value\n }\n }\n }\n }\n\n // If here, then we are either done parsing the value or \n // have a literal that should be added to the value.\n if (doneParsingValue) {\n // SUCCESS: value parsed\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.DATA_.Fields[this.PARSETMP_.Key] = this.PARSETMP_.Value;\n this.PARSETMP_ = { Key: '' };\n this.VALBRACES_ = null;\n } else {\n this.PARSETMP_.Value += c;\n }\n break;\n } // end switch (this.STATE_)\n } // end while(AnotherIteration)\n } // end function processCharacter \n\n /** @private */ this.CHARCONV_ = [\n [ /\\\\space /g, '\\u0020' ],\n [ /\\\\textdollar /g, '\\u0024' ],\n [ /\\\\textquotesingle /g, '\\u0027' ],\n [ /\\\\ast /g, '\\u002A' ],\n [ /\\\\textbackslash /g, '\\u005C' ],\n [ /\\\\\\^\\{\\}/g, '\\u005E' ],\n [ /\\\\textasciigrave /g, '\\u0060' ],\n [ /\\\\lbrace /g, '\\u007B' ],\n [ /\\\\vert /g, '\\u007C' ],\n [ /\\\\rbrace /g, '\\u007D' ],\n [ /\\\\textasciitilde /g, '\\u007E' ],\n [ /\\\\textexclamdown /g, '\\u00A1' ],\n [ /\\\\textcent /g, '\\u00A2' ],\n [ /\\\\textsterling /g, '\\u00A3' ],\n [ /\\\\textcurrency /g, '\\u00A4' ],\n [ /\\\\textyen /g, '\\u00A5' ],\n [ /\\\\textbrokenbar /g, '\\u00A6' ],\n [ /\\\\textsection /g, '\\u00A7' ],\n [ /\\\\textasciidieresis /g, '\\u00A8' ],\n [ /\\\\textcopyright /g, '\\u00A9' ],\n [ /\\\\textordfeminine /g, '\\u00AA' ],\n [ /\\\\guillemotleft /g, '\\u00AB' ],\n [ /\\\\lnot /g, '\\u00AC' ],\n [ /\\\\textregistered /g, '\\u00AE' ],\n [ /\\\\textasciimacron /g, '\\u00AF' ],\n [ /\\\\textdegree /g, '\\u00B0' ],\n [ /\\\\pm /g, '\\u00B1' ],\n [ /\\\\textasciiacute /g, '\\u00B4' ],\n [ /\\\\mathrm\\{\\\\mu\\}/g, '\\u00B5' ],\n [ /\\\\textparagraph /g, '\\u00B6' ],\n [ /\\\\cdot /g, '\\u00B7' ],\n [ /\\\\c\\{\\}/g, '\\u00B8' ],\n [ /\\\\textordmasculine /g, '\\u00BA' ],\n [ /\\\\guillemotright /g, '\\u00BB' ],\n [ /\\\\textonequarter /g, '\\u00BC' ],\n [ /\\\\textonehalf /g, '\\u00BD' ],\n [ /\\\\textthreequarters /g, '\\u00BE' ],\n [ /\\\\textquestiondown /g, '\\u00BF' ],\n [ /\\\\`\\{A\\}/g, '\\u00C0' ],\n [ /\\\\'\\{A\\}/g, '\\u00C1' ],\n [ /\\\\\\^\\{A\\}/g, '\\u00C2' ],\n [ /\\\\~\\{A\\}/g, '\\u00C3' ],\n [ /\\\\\"\\{A\\}/g, '\\u00C4' ],\n [ /\\\\AA /g, '\\u00C5' ],\n [ /\\\\AE /g, '\\u00C6' ],\n [ /\\\\c\\{C\\}/g, '\\u00C7' ],\n [ /\\\\`\\{E\\}/g, '\\u00C8' ],\n [ /\\\\'\\{E\\}/g, '\\u00C9' ],\n [ /\\\\\\^\\{E\\}/g, '\\u00CA' ],\n [ /\\\\\"\\{E\\}/g, '\\u00CB' ],\n [ /\\\\`\\{I\\}/g, '\\u00CC' ],\n [ /\\\\'\\{I\\}/g, '\\u00CD' ],\n [ /\\\\\\^\\{I\\}/g, '\\u00CE' ],\n [ /\\\\\"\\{I\\}/g, '\\u00CF' ],\n [ /\\\\DH /g, '\\u00D0' ],\n [ /\\\\~\\{N\\}/g, '\\u00D1' ],\n [ /\\\\`\\{O\\}/g, '\\u00D2' ],\n [ /\\\\'\\{O\\}/g, '\\u00D3' ],\n [ /\\\\\\^\\{O\\}/g, '\\u00D4' ],\n [ /\\\\~\\{O\\}/g, '\\u00D5' ],\n [ /\\\\\"\\{O\\}/g, '\\u00D6' ],\n [ /\\\\texttimes /g, '\\u00D7' ],\n [ /\\\\O /g, '\\u00D8' ],\n [ /\\\\`\\{U\\}/g, '\\u00D9' ],\n [ /\\\\'\\{U\\}/g, '\\u00DA' ],\n [ /\\\\\\^\\{U\\}/g, '\\u00DB' ],\n [ /\\\\\"\\{U\\}/g, '\\u00DC' ],\n [ /\\\\'\\{Y\\}/g, '\\u00DD' ],\n [ /\\\\TH /g, '\\u00DE' ],\n [ /\\\\ss /g, '\\u00DF' ],\n [ /\\\\`\\{a\\}/g, '\\u00E0' ],\n [ /\\\\'\\{a\\}/g, '\\u00E1' ],\n [ /\\\\\\^\\{a\\}/g, '\\u00E2' ],\n [ /\\\\~\\{a\\}/g, '\\u00E3' ],\n [ /\\\\\"\\{a\\}/g, '\\u00E4' ],\n [ /\\\\aa /g, '\\u00E5' ],\n [ /\\\\ae /g, '\\u00E6' ],\n [ /\\\\c\\{c\\}/g, '\\u00E7' ],\n [ /\\\\`\\{e\\}/g, '\\u00E8' ],\n [ /\\\\'\\{e\\}/g, '\\u00E9' ],\n [ /\\\\\\^\\{e\\}/g, '\\u00EA' ],\n [ /\\\\\"\\{e\\}/g, '\\u00EB' ],\n [ /\\\\`\\{\\\\i\\}/g, '\\u00EC' ],\n [ /\\\\'\\{\\\\i\\}/g, '\\u00ED' ],\n [ /\\\\\\^\\{\\\\i\\}/g, '\\u00EE' ],\n [ /\\\\\"\\{\\\\i\\}/g, '\\u00EF' ],\n [ /\\\\dh /g, '\\u00F0' ],\n [ /\\\\~\\{n\\}/g, '\\u00F1' ],\n [ /\\\\`\\{o\\}/g, '\\u00F2' ],\n [ /\\\\'\\{o\\}/g, '\\u00F3' ],\n [ /\\\\\\^\\{o\\}/g, '\\u00F4' ],\n [ /\\\\~\\{o\\}/g, '\\u00F5' ],\n [ /\\\\\"\\{o\\}/g, '\\u00F6' ],\n [ /\\\\div /g, '\\u00F7' ],\n [ /\\\\o /g, '\\u00F8' ],\n [ /\\\\`\\{u\\}/g, '\\u00F9' ],\n [ /\\\\'\\{u\\}/g, '\\u00FA' ],\n [ /\\\\\\^\\{u\\}/g, '\\u00FB' ],\n [ /\\\\\"\\{u\\}/g, '\\u00FC' ],\n [ /\\\\'\\{y\\}/g, '\\u00FD' ],\n [ /\\\\th /g, '\\u00FE' ],\n [ /\\\\\"\\{y\\}/g, '\\u00FF' ],\n [ /\\\\=\\{A\\}/g, '\\u0100' ],\n [ /\\\\=\\{a\\}/g, '\\u0101' ],\n [ /\\\\u\\{A\\}/g, '\\u0102' ],\n [ /\\\\u\\{a\\}/g, '\\u0103' ],\n [ /\\\\k\\{A\\}/g, '\\u0104' ],\n [ /\\\\k\\{a\\}/g, '\\u0105' ],\n [ /\\\\'\\{C\\}/g, '\\u0106' ],\n [ /\\\\'\\{c\\}/g, '\\u0107' ],\n [ /\\\\\\^\\{C\\}/g, '\\u0108' ],\n [ /\\\\\\^\\{c\\}/g, '\\u0109' ],\n [ /\\\\.\\{C\\}/g, '\\u010A' ],\n [ /\\\\.\\{c\\}/g, '\\u010B' ],\n [ /\\\\v\\{C\\}/g, '\\u010C' ],\n [ /\\\\v\\{c\\}/g, '\\u010D' ],\n [ /\\\\v\\{D\\}/g, '\\u010E' ],\n [ /\\\\v\\{d\\}/g, '\\u010F' ],\n [ /\\\\DJ /g, '\\u0110' ],\n [ /\\\\dj /g, '\\u0111' ],\n [ /\\\\=\\{E\\}/g, '\\u0112' ],\n [ /\\\\=\\{e\\}/g, '\\u0113' ],\n [ /\\\\u\\{E\\}/g, '\\u0114' ],\n [ /\\\\u\\{e\\}/g, '\\u0115' ],\n [ /\\\\.\\{E\\}/g, '\\u0116' ],\n [ /\\\\.\\{e\\}/g, '\\u0117' ],\n [ /\\\\k\\{E\\}/g, '\\u0118' ],\n [ /\\\\k\\{e\\}/g, '\\u0119' ],\n [ /\\\\v\\{E\\}/g, '\\u011A' ],\n [ /\\\\v\\{e\\}/g, '\\u011B' ],\n [ /\\\\\\^\\{G\\}/g, '\\u011C' ],\n [ /\\\\\\^\\{g\\}/g, '\\u011D' ],\n [ /\\\\u\\{G\\}/g, '\\u011E' ],\n [ /\\\\u\\{g\\}/g, '\\u011F' ],\n [ /\\\\.\\{G\\}/g, '\\u0120' ],\n [ /\\\\.\\{g\\}/g, '\\u0121' ],\n [ /\\\\c\\{G\\}/g, '\\u0122' ],\n [ /\\\\c\\{g\\}/g, '\\u0123' ],\n [ /\\\\\\^\\{H\\}/g, '\\u0124' ],\n [ /\\\\\\^\\{h\\}/g, '\\u0125' ],\n [ /\\\\Elzxh /g, '\\u0127' ],\n [ /\\\\~\\{I\\}/g, '\\u0128' ],\n [ /\\\\~\\{\\\\i\\}/g, '\\u0129' ],\n [ /\\\\=\\{I\\}/g, '\\u012A' ],\n [ /\\\\=\\{\\\\i\\}/g, '\\u012B' ],\n [ /\\\\u\\{I\\}/g, '\\u012C' ],\n [ /\\\\u\\{\\\\i\\}/g, '\\u012D' ],\n [ /\\\\k\\{I\\}/g, '\\u012E' ],\n [ /\\\\k\\{i\\}/g, '\\u012F' ],\n [ /\\\\.\\{I\\}/g, '\\u0130' ],\n [ /\\\\i /g, '\\u0131' ],\n [ /\\\\\\^\\{J\\}/g, '\\u0134' ],\n [ /\\\\\\^\\{\\\\j\\}/g, '\\u0135' ],\n [ /\\\\c\\{K\\}/g, '\\u0136' ],\n [ /\\\\c\\{k\\}/g, '\\u0137' ],\n [ /\\\\'\\{L\\}/g, '\\u0139' ],\n [ /\\\\'\\{l\\}/g, '\\u013A' ],\n [ /\\\\c\\{L\\}/g, '\\u013B' ],\n [ /\\\\c\\{l\\}/g, '\\u013C' ],\n [ /\\\\v\\{L\\}/g, '\\u013D' ],\n [ /\\\\v\\{l\\}/g, '\\u013E' ],\n [ /\\\\L /g, '\\u0141' ],\n [ /\\\\l /g, '\\u0142' ],\n [ /\\\\'\\{N\\}/g, '\\u0143' ],\n [ /\\\\'\\{n\\}/g, '\\u0144' ],\n [ /\\\\c\\{N\\}/g, '\\u0145' ],\n [ /\\\\c\\{n\\}/g, '\\u0146' ],\n [ /\\\\v\\{N\\}/g, '\\u0147' ],\n [ /\\\\v\\{n\\}/g, '\\u0148' ],\n [ /\\\\NG /g, '\\u014A' ],\n [ /\\\\ng /g, '\\u014B' ],\n [ /\\\\=\\{O\\}/g, '\\u014C' ],\n [ /\\\\=\\{o\\}/g, '\\u014D' ],\n [ /\\\\u\\{O\\}/g, '\\u014E' ],\n [ /\\\\u\\{o\\}/g, '\\u014F' ],\n [ /\\\\H\\{O\\}/g, '\\u0150' ],\n [ /\\\\H\\{o\\}/g, '\\u0151' ],\n [ /\\\\OE /g, '\\u0152' ],\n [ /\\\\oe /g, '\\u0153' ],\n [ /\\\\'\\{R\\}/g, '\\u0154' ],\n [ /\\\\'\\{r\\}/g, '\\u0155' ],\n [ /\\\\c\\{R\\}/g, '\\u0156' ],\n [ /\\\\c\\{r\\}/g, '\\u0157' ],\n [ /\\\\v\\{R\\}/g, '\\u0158' ],\n [ /\\\\v\\{r\\}/g, '\\u0159' ],\n [ /\\\\'\\{S\\}/g, '\\u015A' ],\n [ /\\\\'\\{s\\}/g, '\\u015B' ],\n [ /\\\\\\^\\{S\\}/g, '\\u015C' ],\n [ /\\\\\\^\\{s\\}/g, '\\u015D' ],\n [ /\\\\c\\{S\\}/g, '\\u015E' ],\n [ /\\\\c\\{s\\}/g, '\\u015F' ],\n [ /\\\\v\\{S\\}/g, '\\u0160' ],\n [ /\\\\v\\{s\\}/g, '\\u0161' ],\n [ /\\\\c\\{T\\}/g, '\\u0162' ],\n [ /\\\\c\\{t\\}/g, '\\u0163' ],\n [ /\\\\v\\{T\\}/g, '\\u0164' ],\n [ /\\\\v\\{t\\}/g, '\\u0165' ],\n [ /\\\\~\\{U\\}/g, '\\u0168' ],\n [ /\\\\~\\{u\\}/g, '\\u0169' ],\n [ /\\\\=\\{U\\}/g, '\\u016A' ],\n [ /\\\\=\\{u\\}/g, '\\u016B' ],\n [ /\\\\u\\{U\\}/g, '\\u016C' ],\n [ /\\\\u\\{u\\}/g, '\\u016D' ],\n [ /\\\\r\\{U\\}/g, '\\u016E' ],\n [ /\\\\r\\{u\\}/g, '\\u016F' ],\n [ /\\\\H\\{U\\}/g, '\\u0170' ],\n [ /\\\\H\\{u\\}/g, '\\u0171' ],\n [ /\\\\k\\{U\\}/g, '\\u0172' ],\n [ /\\\\k\\{u\\}/g, '\\u0173' ],\n [ /\\\\\\^\\{W\\}/g, '\\u0174' ],\n [ /\\\\\\^\\{w\\}/g, '\\u0175' ],\n [ /\\\\\\^\\{Y\\}/g, '\\u0176' ],\n [ /\\\\\\^\\{y\\}/g, '\\u0177' ],\n [ /\\\\\"\\{Y\\}/g, '\\u0178' ],\n [ /\\\\'\\{Z\\}/g, '\\u0179' ],\n [ /\\\\'\\{z\\}/g, '\\u017A' ],\n [ /\\\\.\\{Z\\}/g, '\\u017B' ],\n [ /\\\\.\\{z\\}/g, '\\u017C' ],\n [ /\\\\v\\{Z\\}/g, '\\u017D' ],\n [ /\\\\v\\{z\\}/g, '\\u017E' ],\n [ /\\\\texthvlig /g, '\\u0195' ],\n [ /\\\\textnrleg /g, '\\u019E' ],\n [ /\\\\eth /g, '\\u01AA' ],\n [ /\\\\textdoublepipe /g, '\\u01C2' ],\n [ /\\\\'\\{g\\}/g, '\\u01F5' ],\n [ /\\\\Elztrna /g, '\\u0250' ],\n [ /\\\\Elztrnsa /g, '\\u0252' ],\n [ /\\\\Elzopeno /g, '\\u0254' ],\n [ /\\\\Elzrtld /g, '\\u0256' ],\n [ /\\\\Elzschwa /g, '\\u0259' ],\n [ /\\\\varepsilon /g, '\\u025B' ],\n [ /\\\\Elzpgamma /g, '\\u0263' ],\n [ /\\\\Elzpbgam /g, '\\u0264' ],\n [ /\\\\Elztrnh /g, '\\u0265' ],\n [ /\\\\Elzbtdl /g, '\\u026C' ],\n [ /\\\\Elzrtll /g, '\\u026D' ],\n [ /\\\\Elztrnm /g, '\\u026F' ],\n [ /\\\\Elztrnmlr /g, '\\u0270' ],\n [ /\\\\Elzltlmr /g, '\\u0271' ],\n [ /\\\\Elzltln /g, '\\u0272' ],\n [ /\\\\Elzrtln /g, '\\u0273' ],\n [ /\\\\Elzclomeg /g, '\\u0277' ],\n [ /\\\\textphi /g, '\\u0278' ],\n [ /\\\\Elztrnr /g, '\\u0279' ],\n [ /\\\\Elztrnrl /g, '\\u027A' ],\n [ /\\\\Elzrttrnr /g, '\\u027B' ],\n [ /\\\\Elzrl /g, '\\u027C' ],\n [ /\\\\Elzrtlr /g, '\\u027D' ],\n [ /\\\\Elzfhr /g, '\\u027E' ],\n [ /\\\\Elzrtls /g, '\\u0282' ],\n [ /\\\\Elzesh /g, '\\u0283' ],\n [ /\\\\Elztrnt /g, '\\u0287' ],\n [ /\\\\Elzrtlt /g, '\\u0288' ],\n [ /\\\\Elzpupsil /g, '\\u028A' ],\n [ /\\\\Elzpscrv /g, '\\u028B' ],\n [ /\\\\Elzinvv /g, '\\u028C' ],\n [ /\\\\Elzinvw /g, '\\u028D' ],\n [ /\\\\Elztrny /g, '\\u028E' ],\n [ /\\\\Elzrtlz /g, '\\u0290' ],\n [ /\\\\Elzyogh /g, '\\u0292' ],\n [ /\\\\Elzglst /g, '\\u0294' ],\n [ /\\\\Elzreglst /g, '\\u0295' ],\n [ /\\\\Elzinglst /g, '\\u0296' ],\n [ /\\\\textturnk /g, '\\u029E' ],\n [ /\\\\Elzdyogh /g, '\\u02A4' ],\n [ /\\\\Elztesh /g, '\\u02A7' ],\n [ /\\\\textasciicaron /g, '\\u02C7' ],\n [ /\\\\Elzverts /g, '\\u02C8' ],\n [ /\\\\Elzverti /g, '\\u02CC' ],\n [ /\\\\Elzlmrk /g, '\\u02D0' ],\n [ /\\\\Elzhlmrk /g, '\\u02D1' ],\n [ /\\\\Elzsbrhr /g, '\\u02D2' ],\n [ /\\\\Elzsblhr /g, '\\u02D3' ],\n [ /\\\\Elzrais /g, '\\u02D4' ],\n [ /\\\\Elzlow /g, '\\u02D5' ],\n [ /\\\\textasciibreve /g, '\\u02D8' ],\n [ /\\\\textperiodcentered /g, '\\u02D9' ],\n [ /\\\\r\\{\\}/g, '\\u02DA' ],\n [ /\\\\k\\{\\}/g, '\\u02DB' ],\n [ /\\\\texttildelow /g, '\\u02DC' ],\n [ /\\\\H\\{\\}/g, '\\u02DD' ],\n [ /\\\\tone\\{55\\}/g, '\\u02E5' ],\n [ /\\\\tone\\{44\\}/g, '\\u02E6' ],\n [ /\\\\tone\\{33\\}/g, '\\u02E7' ],\n [ /\\\\tone\\{22\\}/g, '\\u02E8' ],\n [ /\\\\tone\\{11\\}/g, '\\u02E9' ],\n [ /\\\\cyrchar\\\\C/g, '\\u030F' ],\n [ /\\\\Elzpalh /g, '\\u0321' ],\n [ /\\\\Elzrh /g, '\\u0322' ],\n [ /\\\\Elzsbbrg /g, '\\u032A' ],\n [ /\\\\Elzxl /g, '\\u0335' ],\n [ /\\\\Elzbar /g, '\\u0336' ],\n [ /\\\\'\\{A\\}/g, '\\u0386' ],\n [ /\\\\'\\{E\\}/g, '\\u0388' ],\n [ /\\\\'\\{H\\}/g, '\\u0389' ],\n [ /\\\\'\\{\\}\\{I\\}/g, '\\u038A' ],\n [ /\\\\'\\{\\}O/g, '\\u038C' ],\n [ /\\\\mathrm\\{'Y\\}/g, '\\u038E' ],\n [ /\\\\mathrm\\{'\\\\Omega\\}/g, '\\u038F' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\iota\\}\\}/g, '\\u0390' ],\n [ /\\\\Alpha /g, '\\u0391' ],\n [ /\\\\Beta /g, '\\u0392' ],\n [ /\\\\Gamma /g, '\\u0393' ],\n [ /\\\\Delta /g, '\\u0394' ],\n [ /\\\\Epsilon /g, '\\u0395' ],\n [ /\\\\Zeta /g, '\\u0396' ],\n [ /\\\\Eta /g, '\\u0397' ],\n [ /\\\\Theta /g, '\\u0398' ],\n [ /\\\\Iota /g, '\\u0399' ],\n [ /\\\\Kappa /g, '\\u039A' ],\n [ /\\\\Lambda /g, '\\u039B' ],\n [ /\\\\Xi /g, '\\u039E' ],\n [ /\\\\Pi /g, '\\u03A0' ],\n [ /\\\\Rho /g, '\\u03A1' ],\n [ /\\\\Sigma /g, '\\u03A3' ],\n [ /\\\\Tau /g, '\\u03A4' ],\n [ /\\\\Upsilon /g, '\\u03A5' ],\n [ /\\\\Phi /g, '\\u03A6' ],\n [ /\\\\Chi /g, '\\u03A7' ],\n [ /\\\\Psi /g, '\\u03A8' ],\n [ /\\\\Omega /g, '\\u03A9' ],\n [ /\\\\mathrm\\{\\\\ddot\\{I\\}\\}/g, '\\u03AA' ],\n [ /\\\\mathrm\\{\\\\ddot\\{Y\\}\\}/g, '\\u03AB' ],\n [ /\\\\'\\{\\$\\\\alpha\\$\\}/g, '\\u03AC' ],\n [ /\\\\acute\\{\\\\epsilon\\}/g, '\\u03AD' ],\n [ /\\\\acute\\{\\\\eta\\}/g, '\\u03AE' ],\n [ /\\\\acute\\{\\\\iota\\}/g, '\\u03AF' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\upsilon\\}\\}/g, '\\u03B0' ],\n [ /\\\\alpha /g, '\\u03B1' ],\n [ /\\\\beta /g, '\\u03B2' ],\n [ /\\\\gamma /g, '\\u03B3' ],\n [ /\\\\delta /g, '\\u03B4' ],\n [ /\\\\epsilon /g, '\\u03B5' ],\n [ /\\\\zeta /g, '\\u03B6' ],\n [ /\\\\eta /g, '\\u03B7' ],\n [ /\\\\texttheta /g, '\\u03B8' ],\n [ /\\\\iota /g, '\\u03B9' ],\n [ /\\\\kappa /g, '\\u03BA' ],\n [ /\\\\lambda /g, '\\u03BB' ],\n [ /\\\\mu /g, '\\u03BC' ],\n [ /\\\\nu /g, '\\u03BD' ],\n [ /\\\\xi /g, '\\u03BE' ],\n [ /\\\\pi /g, '\\u03C0' ],\n [ /\\\\rho /g, '\\u03C1' ],\n [ /\\\\varsigma /g, '\\u03C2' ],\n [ /\\\\sigma /g, '\\u03C3' ],\n [ /\\\\tau /g, '\\u03C4' ],\n [ /\\\\upsilon /g, '\\u03C5' ],\n [ /\\\\varphi /g, '\\u03C6' ],\n [ /\\\\chi /g, '\\u03C7' ],\n [ /\\\\psi /g, '\\u03C8' ],\n [ /\\\\omega /g, '\\u03C9' ],\n [ /\\\\ddot\\{\\\\iota\\}/g, '\\u03CA' ],\n [ /\\\\ddot\\{\\\\upsilon\\}/g, '\\u03CB' ],\n [ /\\\\'\\{o\\}/g, '\\u03CC' ],\n [ /\\\\acute\\{\\\\upsilon\\}/g, '\\u03CD' ],\n [ /\\\\acute\\{\\\\omega\\}/g, '\\u03CE' ],\n [ /\\\\Pisymbol\\{ppi022\\}\\{87\\}/g, '\\u03D0' ],\n [ /\\\\textvartheta /g, '\\u03D1' ],\n [ /\\\\Upsilon /g, '\\u03D2' ],\n [ /\\\\phi /g, '\\u03D5' ],\n [ /\\\\varpi /g, '\\u03D6' ],\n [ /\\\\Stigma /g, '\\u03DA' ],\n [ /\\\\Digamma /g, '\\u03DC' ],\n [ /\\\\digamma /g, '\\u03DD' ],\n [ /\\\\Koppa /g, '\\u03DE' ],\n [ /\\\\Sampi /g, '\\u03E0' ],\n [ /\\\\varkappa /g, '\\u03F0' ],\n [ /\\\\varrho /g, '\\u03F1' ],\n [ /\\\\textTheta /g, '\\u03F4' ],\n [ /\\\\backepsilon /g, '\\u03F6' ],\n [ /\\\\cyrchar\\\\CYRYO /g, '\\u0401' ],\n [ /\\\\cyrchar\\\\CYRDJE /g, '\\u0402' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRG\\}/g, '\\u0403' ],\n [ /\\\\cyrchar\\\\CYRIE /g, '\\u0404' ],\n [ /\\\\cyrchar\\\\CYRDZE /g, '\\u0405' ],\n [ /\\\\cyrchar\\\\CYRII /g, '\\u0406' ],\n [ /\\\\cyrchar\\\\CYRYI /g, '\\u0407' ],\n [ /\\\\cyrchar\\\\CYRJE /g, '\\u0408' ],\n [ /\\\\cyrchar\\\\CYRLJE /g, '\\u0409' ],\n [ /\\\\cyrchar\\\\CYRNJE /g, '\\u040A' ],\n [ /\\\\cyrchar\\\\CYRTSHE /g, '\\u040B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRK\\}/g, '\\u040C' ],\n [ /\\\\cyrchar\\\\CYRUSHRT /g, '\\u040E' ],\n [ /\\\\cyrchar\\\\CYRDZHE /g, '\\u040F' ],\n [ /\\\\cyrchar\\\\CYRA /g, '\\u0410' ],\n [ /\\\\cyrchar\\\\CYRB /g, '\\u0411' ],\n [ /\\\\cyrchar\\\\CYRV /g, '\\u0412' ],\n [ /\\\\cyrchar\\\\CYRG /g, '\\u0413' ],\n [ /\\\\cyrchar\\\\CYRD /g, '\\u0414' ],\n [ /\\\\cyrchar\\\\CYRE /g, '\\u0415' ],\n [ /\\\\cyrchar\\\\CYRZH /g, '\\u0416' ],\n [ /\\\\cyrchar\\\\CYRZ /g, '\\u0417' ],\n [ /\\\\cyrchar\\\\CYRI /g, '\\u0418' ],\n [ /\\\\cyrchar\\\\CYRISHRT /g, '\\u0419' ],\n [ /\\\\cyrchar\\\\CYRK /g, '\\u041A' ],\n [ /\\\\cyrchar\\\\CYRL /g, '\\u041B' ],\n [ /\\\\cyrchar\\\\CYRM /g, '\\u041C' ],\n [ /\\\\cyrchar\\\\CYRN /g, '\\u041D' ],\n [ /\\\\cyrchar\\\\CYRO /g, '\\u041E' ],\n [ /\\\\cyrchar\\\\CYRP /g, '\\u041F' ],\n [ /\\\\cyrchar\\\\CYRR /g, '\\u0420' ],\n [ /\\\\cyrchar\\\\CYRS /g, '\\u0421' ],\n [ /\\\\cyrchar\\\\CYRT /g, '\\u0422' ],\n [ /\\\\cyrchar\\\\CYRU /g, '\\u0423' ],\n [ /\\\\cyrchar\\\\CYRF /g, '\\u0424' ],\n [ /\\\\cyrchar\\\\CYRH /g, '\\u0425' ],\n [ /\\\\cyrchar\\\\CYRC /g, '\\u0426' ],\n [ /\\\\cyrchar\\\\CYRCH /g, '\\u0427' ],\n [ /\\\\cyrchar\\\\CYRSH /g, '\\u0428' ],\n [ /\\\\cyrchar\\\\CYRSHCH /g, '\\u0429' ],\n [ /\\\\cyrchar\\\\CYRHRDSN /g, '\\u042A' ],\n [ /\\\\cyrchar\\\\CYRERY /g, '\\u042B' ],\n [ /\\\\cyrchar\\\\CYRSFTSN /g, '\\u042C' ],\n [ /\\\\cyrchar\\\\CYREREV /g, '\\u042D' ],\n [ /\\\\cyrchar\\\\CYRYU /g, '\\u042E' ],\n [ /\\\\cyrchar\\\\CYRYA /g, '\\u042F' ],\n [ /\\\\cyrchar\\\\cyra /g, '\\u0430' ],\n [ /\\\\cyrchar\\\\cyrb /g, '\\u0431' ],\n [ /\\\\cyrchar\\\\cyrv /g, '\\u0432' ],\n [ /\\\\cyrchar\\\\cyrg /g, '\\u0433' ],\n [ /\\\\cyrchar\\\\cyrd /g, '\\u0434' ],\n [ /\\\\cyrchar\\\\cyre /g, '\\u0435' ],\n [ /\\\\cyrchar\\\\cyrzh /g, '\\u0436' ],\n [ /\\\\cyrchar\\\\cyrz /g, '\\u0437' ],\n [ /\\\\cyrchar\\\\cyri /g, '\\u0438' ],\n [ /\\\\cyrchar\\\\cyrishrt /g, '\\u0439' ],\n [ /\\\\cyrchar\\\\cyrk /g, '\\u043A' ],\n [ /\\\\cyrchar\\\\cyrl /g, '\\u043B' ],\n [ /\\\\cyrchar\\\\cyrm /g, '\\u043C' ],\n [ /\\\\cyrchar\\\\cyrn /g, '\\u043D' ],\n [ /\\\\cyrchar\\\\cyro /g, '\\u043E' ],\n [ /\\\\cyrchar\\\\cyrp /g, '\\u043F' ],\n [ /\\\\cyrchar\\\\cyrr /g, '\\u0440' ],\n [ /\\\\cyrchar\\\\cyrs /g, '\\u0441' ],\n [ /\\\\cyrchar\\\\cyrt /g, '\\u0442' ],\n [ /\\\\cyrchar\\\\cyru /g, '\\u0443' ],\n [ /\\\\cyrchar\\\\cyrf /g, '\\u0444' ],\n [ /\\\\cyrchar\\\\cyrh /g, '\\u0445' ],\n [ /\\\\cyrchar\\\\cyrc /g, '\\u0446' ],\n [ /\\\\cyrchar\\\\cyrch /g, '\\u0447' ],\n [ /\\\\cyrchar\\\\cyrsh /g, '\\u0448' ],\n [ /\\\\cyrchar\\\\cyrshch /g, '\\u0449' ],\n [ /\\\\cyrchar\\\\cyrhrdsn /g, '\\u044A' ],\n [ /\\\\cyrchar\\\\cyrery /g, '\\u044B' ],\n [ /\\\\cyrchar\\\\cyrsftsn /g, '\\u044C' ],\n [ /\\\\cyrchar\\\\cyrerev /g, '\\u044D' ],\n [ /\\\\cyrchar\\\\cyryu /g, '\\u044E' ],\n [ /\\\\cyrchar\\\\cyrya /g, '\\u044F' ],\n [ /\\\\cyrchar\\\\cyryo /g, '\\u0451' ],\n [ /\\\\cyrchar\\\\cyrdje /g, '\\u0452' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrg\\}/g, '\\u0453' ],\n [ /\\\\cyrchar\\\\cyrie /g, '\\u0454' ],\n [ /\\\\cyrchar\\\\cyrdze /g, '\\u0455' ],\n [ /\\\\cyrchar\\\\cyrii /g, '\\u0456' ],\n [ /\\\\cyrchar\\\\cyryi /g, '\\u0457' ],\n [ /\\\\cyrchar\\\\cyrje /g, '\\u0458' ],\n [ /\\\\cyrchar\\\\cyrlje /g, '\\u0459' ],\n [ /\\\\cyrchar\\\\cyrnje /g, '\\u045A' ],\n [ /\\\\cyrchar\\\\cyrtshe /g, '\\u045B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrk\\}/g, '\\u045C' ],\n [ /\\\\cyrchar\\\\cyrushrt /g, '\\u045E' ],\n [ /\\\\cyrchar\\\\cyrdzhe /g, '\\u045F' ],\n [ /\\\\cyrchar\\\\CYROMEGA /g, '\\u0460' ],\n [ /\\\\cyrchar\\\\cyromega /g, '\\u0461' ],\n [ /\\\\cyrchar\\\\CYRYAT /g, '\\u0462' ],\n [ /\\\\cyrchar\\\\CYRIOTE /g, '\\u0464' ],\n [ /\\\\cyrchar\\\\cyriote /g, '\\u0465' ],\n [ /\\\\cyrchar\\\\CYRLYUS /g, '\\u0466' ],\n [ /\\\\cyrchar\\\\cyrlyus /g, '\\u0467' ],\n [ /\\\\cyrchar\\\\CYRIOTLYUS /g, '\\u0468' ],\n [ /\\\\cyrchar\\\\cyriotlyus /g, '\\u0469' ],\n [ /\\\\cyrchar\\\\CYRBYUS /g, '\\u046A' ],\n [ /\\\\cyrchar\\\\CYRIOTBYUS /g, '\\u046C' ],\n [ /\\\\cyrchar\\\\cyriotbyus /g, '\\u046D' ],\n [ /\\\\cyrchar\\\\CYRKSI /g, '\\u046E' ],\n [ /\\\\cyrchar\\\\cyrksi /g, '\\u046F' ],\n [ /\\\\cyrchar\\\\CYRPSI /g, '\\u0470' ],\n [ /\\\\cyrchar\\\\cyrpsi /g, '\\u0471' ],\n [ /\\\\cyrchar\\\\CYRFITA /g, '\\u0472' ],\n [ /\\\\cyrchar\\\\CYRIZH /g, '\\u0474' ],\n [ /\\\\cyrchar\\\\CYRUK /g, '\\u0478' ],\n [ /\\\\cyrchar\\\\cyruk /g, '\\u0479' ],\n [ /\\\\cyrchar\\\\CYROMEGARND /g, '\\u047A' ],\n [ /\\\\cyrchar\\\\cyromegarnd /g, '\\u047B' ],\n [ /\\\\cyrchar\\\\CYROMEGATITLO /g, '\\u047C' ],\n [ /\\\\cyrchar\\\\cyromegatitlo /g, '\\u047D' ],\n [ /\\\\cyrchar\\\\CYROT /g, '\\u047E' ],\n [ /\\\\cyrchar\\\\cyrot /g, '\\u047F' ],\n [ /\\\\cyrchar\\\\CYRKOPPA /g, '\\u0480' ],\n [ /\\\\cyrchar\\\\cyrkoppa /g, '\\u0481' ],\n [ /\\\\cyrchar\\\\cyrthousands /g, '\\u0482' ],\n [ /\\\\cyrchar\\\\cyrhundredthousands /g, '\\u0488' ],\n [ /\\\\cyrchar\\\\cyrmillions /g, '\\u0489' ],\n [ /\\\\cyrchar\\\\CYRSEMISFTSN /g, '\\u048C' ],\n [ /\\\\cyrchar\\\\cyrsemisftsn /g, '\\u048D' ],\n [ /\\\\cyrchar\\\\CYRRTICK /g, '\\u048E' ],\n [ /\\\\cyrchar\\\\cyrrtick /g, '\\u048F' ],\n [ /\\\\cyrchar\\\\CYRGUP /g, '\\u0490' ],\n [ /\\\\cyrchar\\\\cyrgup /g, '\\u0491' ],\n [ /\\\\cyrchar\\\\CYRGHCRS /g, '\\u0492' ],\n [ /\\\\cyrchar\\\\cyrghcrs /g, '\\u0493' ],\n [ /\\\\cyrchar\\\\CYRGHK /g, '\\u0494' ],\n [ /\\\\cyrchar\\\\cyrghk /g, '\\u0495' ],\n [ /\\\\cyrchar\\\\CYRZHDSC /g, '\\u0496' ],\n [ /\\\\cyrchar\\\\cyrzhdsc /g, '\\u0497' ],\n [ /\\\\cyrchar\\\\CYRZDSC /g, '\\u0498' ],\n [ /\\\\cyrchar\\\\cyrzdsc /g, '\\u0499' ],\n [ /\\\\cyrchar\\\\CYRKDSC /g, '\\u049A' ],\n [ /\\\\cyrchar\\\\cyrkdsc /g, '\\u049B' ],\n [ /\\\\cyrchar\\\\CYRKVCRS /g, '\\u049C' ],\n [ /\\\\cyrchar\\\\cyrkvcrs /g, '\\u049D' ],\n [ /\\\\cyrchar\\\\CYRKHCRS /g, '\\u049E' ],\n [ /\\\\cyrchar\\\\cyrkhcrs /g, '\\u049F' ],\n [ /\\\\cyrchar\\\\CYRKBEAK /g, '\\u04A0' ],\n [ /\\\\cyrchar\\\\cyrkbeak /g, '\\u04A1' ],\n [ /\\\\cyrchar\\\\CYRNDSC /g, '\\u04A2' ],\n [ /\\\\cyrchar\\\\cyrndsc /g, '\\u04A3' ],\n [ /\\\\cyrchar\\\\CYRNG /g, '\\u04A4' ],\n [ /\\\\cyrchar\\\\cyrng /g, '\\u04A5' ],\n [ /\\\\cyrchar\\\\CYRPHK /g, '\\u04A6' ],\n [ /\\\\cyrchar\\\\cyrphk /g, '\\u04A7' ],\n [ /\\\\cyrchar\\\\CYRABHHA /g, '\\u04A8' ],\n [ /\\\\cyrchar\\\\cyrabhha /g, '\\u04A9' ],\n [ /\\\\cyrchar\\\\CYRSDSC /g, '\\u04AA' ],\n [ /\\\\cyrchar\\\\cyrsdsc /g, '\\u04AB' ],\n [ /\\\\cyrchar\\\\CYRTDSC /g, '\\u04AC' ],\n [ /\\\\cyrchar\\\\cyrtdsc /g, '\\u04AD' ],\n [ /\\\\cyrchar\\\\CYRY /g, '\\u04AE' ],\n [ /\\\\cyrchar\\\\cyry /g, '\\u04AF' ],\n [ /\\\\cyrchar\\\\CYRYHCRS /g, '\\u04B0' ],\n [ /\\\\cyrchar\\\\cyryhcrs /g, '\\u04B1' ],\n [ /\\\\cyrchar\\\\CYRHDSC /g, '\\u04B2' ],\n [ /\\\\cyrchar\\\\cyrhdsc /g, '\\u04B3' ],\n [ /\\\\cyrchar\\\\CYRTETSE /g, '\\u04B4' ],\n [ /\\\\cyrchar\\\\cyrtetse /g, '\\u04B5' ],\n [ /\\\\cyrchar\\\\CYRCHRDSC /g, '\\u04B6' ],\n [ /\\\\cyrchar\\\\cyrchrdsc /g, '\\u04B7' ],\n [ /\\\\cyrchar\\\\CYRCHVCRS /g, '\\u04B8' ],\n [ /\\\\cyrchar\\\\cyrchvcrs /g, '\\u04B9' ],\n [ /\\\\cyrchar\\\\CYRSHHA /g, '\\u04BA' ],\n [ /\\\\cyrchar\\\\cyrshha /g, '\\u04BB' ],\n [ /\\\\cyrchar\\\\CYRABHCH /g, '\\u04BC' ],\n [ /\\\\cyrchar\\\\cyrabhch /g, '\\u04BD' ],\n [ /\\\\cyrchar\\\\CYRABHCHDSC /g, '\\u04BE' ],\n [ /\\\\cyrchar\\\\cyrabhchdsc /g, '\\u04BF' ],\n [ /\\\\cyrchar\\\\CYRpalochka /g, '\\u04C0' ],\n [ /\\\\cyrchar\\\\CYRKHK /g, '\\u04C3' ],\n [ /\\\\cyrchar\\\\cyrkhk /g, '\\u04C4' ],\n [ /\\\\cyrchar\\\\CYRNHK /g, '\\u04C7' ],\n [ /\\\\cyrchar\\\\cyrnhk /g, '\\u04C8' ],\n [ /\\\\cyrchar\\\\CYRCHLDSC /g, '\\u04CB' ],\n [ /\\\\cyrchar\\\\cyrchldsc /g, '\\u04CC' ],\n [ /\\\\cyrchar\\\\CYRAE /g, '\\u04D4' ],\n [ /\\\\cyrchar\\\\cyrae /g, '\\u04D5' ],\n [ /\\\\cyrchar\\\\CYRSCHWA /g, '\\u04D8' ],\n [ /\\\\cyrchar\\\\cyrschwa /g, '\\u04D9' ],\n [ /\\\\cyrchar\\\\CYRABHDZE /g, '\\u04E0' ],\n [ /\\\\cyrchar\\\\cyrabhdze /g, '\\u04E1' ],\n [ /\\\\cyrchar\\\\CYROTLD /g, '\\u04E8' ],\n [ /\\\\cyrchar\\\\cyrotld /g, '\\u04E9' ],\n [ /\\\\hspace\\{0.6em\\}/g, '\\u2002' ],\n [ /\\\\hspace\\{1em\\}/g, '\\u2003' ],\n [ /\\\\hspace\\{0.33em\\}/g, '\\u2004' ],\n [ /\\\\hspace\\{0.25em\\}/g, '\\u2005' ],\n [ /\\\\hspace\\{0.166em\\}/g, '\\u2006' ],\n [ /\\\\hphantom\\{0\\}/g, '\\u2007' ],\n [ /\\\\hphantom\\{,\\}/g, '\\u2008' ],\n [ /\\\\hspace\\{0.167em\\}/g, '\\u2009' ],\n [ /\\\\mkern1mu /g, '\\u200A' ],\n [ /\\\\textendash /g, '\\u2013' ],\n [ /\\\\textemdash /g, '\\u2014' ],\n [ /\\\\rule\\{1em\\}\\{1pt\\}/g, '\\u2015' ],\n [ /\\\\Vert /g, '\\u2016' ],\n [ /\\\\Elzreapos /g, '\\u201B' ],\n [ /\\\\textquotedblleft /g, '\\u201C' ],\n [ /\\\\textquotedblright /g, '\\u201D' ],\n [ /\\\\textdagger /g, '\\u2020' ],\n [ /\\\\textdaggerdbl /g, '\\u2021' ],\n [ /\\\\textbullet /g, '\\u2022' ],\n [ /\\\\ldots /g, '\\u2026' ],\n [ /\\\\textperthousand /g, '\\u2030' ],\n [ /\\\\textpertenthousand /g, '\\u2031' ],\n [ /\\\\backprime /g, '\\u2035' ],\n [ /\\\\guilsinglleft /g, '\\u2039' ],\n [ /\\\\guilsinglright /g, '\\u203A' ],\n [ /\\\\mkern4mu /g, '\\u205F' ],\n [ /\\\\nolinebreak /g, '\\u2060' ],\n [ /\\\\ensuremath\\{\\\\Elzpes\\}/g, '\\u20A7' ],\n [ /\\\\mbox\\{\\\\texteuro\\} /g, '\\u20AC' ],\n [ /\\\\dddot /g, '\\u20DB' ],\n [ /\\\\ddddot /g, '\\u20DC' ],\n [ /\\\\mathbb\\{C\\}/g, '\\u2102' ],\n [ /\\\\mathscr\\{g\\}/g, '\\u210A' ],\n [ /\\\\mathscr\\{H\\}/g, '\\u210B' ],\n [ /\\\\mathfrak\\{H\\}/g, '\\u210C' ],\n [ /\\\\mathbb\\{H\\}/g, '\\u210D' ],\n [ /\\\\hslash /g, '\\u210F' ],\n [ /\\\\mathscr\\{I\\}/g, '\\u2110' ],\n [ /\\\\mathfrak\\{I\\}/g, '\\u2111' ],\n [ /\\\\mathscr\\{L\\}/g, '\\u2112' ],\n [ /\\\\mathscr\\{l\\}/g, '\\u2113' ],\n [ /\\\\mathbb\\{N\\}/g, '\\u2115' ],\n [ /\\\\cyrchar\\\\textnumero /g, '\\u2116' ],\n [ /\\\\wp /g, '\\u2118' ],\n [ /\\\\mathbb\\{P\\}/g, '\\u2119' ],\n [ /\\\\mathbb\\{Q\\}/g, '\\u211A' ],\n [ /\\\\mathscr\\{R\\}/g, '\\u211B' ],\n [ /\\\\mathfrak\\{R\\}/g, '\\u211C' ],\n [ /\\\\mathbb\\{R\\}/g, '\\u211D' ],\n [ /\\\\Elzxrat /g, '\\u211E' ],\n [ /\\\\texttrademark /g, '\\u2122' ],\n [ /\\\\mathbb\\{Z\\}/g, '\\u2124' ],\n [ /\\\\Omega /g, '\\u2126' ],\n [ /\\\\mho /g, '\\u2127' ],\n [ /\\\\mathfrak\\{Z\\}/g, '\\u2128' ],\n [ /\\\\ElsevierGlyph\\{2129\\}/g, '\\u2129' ],\n [ /\\\\AA /g, '\\u212B' ],\n [ /\\\\mathscr\\{B\\}/g, '\\u212C' ],\n [ /\\\\mathfrak\\{C\\}/g, '\\u212D' ],\n [ /\\\\mathscr\\{e\\}/g, '\\u212F' ],\n [ /\\\\mathscr\\{E\\}/g, '\\u2130' ],\n [ /\\\\mathscr\\{F\\}/g, '\\u2131' ],\n [ /\\\\mathscr\\{M\\}/g, '\\u2133' ],\n [ /\\\\mathscr\\{o\\}/g, '\\u2134' ],\n [ /\\\\aleph /g, '\\u2135' ],\n [ /\\\\beth /g, '\\u2136' ],\n [ /\\\\gimel /g, '\\u2137' ],\n [ /\\\\daleth /g, '\\u2138' ],\n [ /\\\\textfrac\\{1\\}\\{3\\}/g, '\\u2153' ],\n [ /\\\\textfrac\\{2\\}\\{3\\}/g, '\\u2154' ],\n [ /\\\\textfrac\\{1\\}\\{5\\}/g, '\\u2155' ],\n [ /\\\\textfrac\\{2\\}\\{5\\}/g, '\\u2156' ],\n [ /\\\\textfrac\\{3\\}\\{5\\}/g, '\\u2157' ],\n [ /\\\\textfrac\\{4\\}\\{5\\}/g, '\\u2158' ],\n [ /\\\\textfrac\\{1\\}\\{6\\}/g, '\\u2159' ],\n [ /\\\\textfrac\\{5\\}\\{6\\}/g, '\\u215A' ],\n [ /\\\\textfrac\\{1\\}\\{8\\}/g, '\\u215B' ],\n [ /\\\\textfrac\\{3\\}\\{8\\}/g, '\\u215C' ],\n [ /\\\\textfrac\\{5\\}\\{8\\}/g, '\\u215D' ],\n [ /\\\\textfrac\\{7\\}\\{8\\}/g, '\\u215E' ],\n [ /\\\\leftarrow /g, '\\u2190' ],\n [ /\\\\uparrow /g, '\\u2191' ],\n [ /\\\\rightarrow /g, '\\u2192' ],\n [ /\\\\downarrow /g, '\\u2193' ],\n [ /\\\\leftrightarrow /g, '\\u2194' ],\n [ /\\\\updownarrow /g, '\\u2195' ],\n [ /\\\\nwarrow /g, '\\u2196' ],\n [ /\\\\nearrow /g, '\\u2197' ],\n [ /\\\\searrow /g, '\\u2198' ],\n [ /\\\\swarrow /g, '\\u2199' ],\n [ /\\\\nleftarrow /g, '\\u219A' ],\n [ /\\\\nrightarrow /g, '\\u219B' ],\n [ /\\\\arrowwaveright /g, '\\u219C' ],\n [ /\\\\arrowwaveright /g, '\\u219D' ],\n [ /\\\\twoheadleftarrow /g, '\\u219E' ],\n [ /\\\\twoheadrightarrow /g, '\\u21A0' ],\n [ /\\\\leftarrowtail /g, '\\u21A2' ],\n [ /\\\\rightarrowtail /g, '\\u21A3' ],\n [ /\\\\mapsto /g, '\\u21A6' ],\n [ /\\\\hookleftarrow /g, '\\u21A9' ],\n [ /\\\\hookrightarrow /g, '\\u21AA' ],\n [ /\\\\looparrowleft /g, '\\u21AB' ],\n [ /\\\\looparrowright /g, '\\u21AC' ],\n [ /\\\\leftrightsquigarrow /g, '\\u21AD' ],\n [ /\\\\nleftrightarrow /g, '\\u21AE' ],\n [ /\\\\Lsh /g, '\\u21B0' ],\n [ /\\\\Rsh /g, '\\u21B1' ],\n [ /\\\\ElsevierGlyph\\{21B3\\}/g, '\\u21B3' ],\n [ /\\\\curvearrowleft /g, '\\u21B6' ],\n [ /\\\\curvearrowright /g, '\\u21B7' ],\n [ /\\\\circlearrowleft /g, '\\u21BA' ],\n [ /\\\\circlearrowright /g, '\\u21BB' ],\n [ /\\\\leftharpoonup /g, '\\u21BC' ],\n [ /\\\\leftharpoondown /g, '\\u21BD' ],\n [ /\\\\upharpoonright /g, '\\u21BE' ],\n [ /\\\\upharpoonleft /g, '\\u21BF' ],\n [ /\\\\rightharpoonup /g, '\\u21C0' ],\n [ /\\\\rightharpoondown /g, '\\u21C1' ],\n [ /\\\\downharpoonright /g, '\\u21C2' ],\n [ /\\\\downharpoonleft /g, '\\u21C3' ],\n [ /\\\\rightleftarrows /g, '\\u21C4' ],\n [ /\\\\dblarrowupdown /g, '\\u21C5' ],\n [ /\\\\leftrightarrows /g, '\\u21C6' ],\n [ /\\\\leftleftarrows /g, '\\u21C7' ],\n [ /\\\\upuparrows /g, '\\u21C8' ],\n [ /\\\\rightrightarrows /g, '\\u21C9' ],\n [ /\\\\downdownarrows /g, '\\u21CA' ],\n [ /\\\\leftrightharpoons /g, '\\u21CB' ],\n [ /\\\\rightleftharpoons /g, '\\u21CC' ],\n [ /\\\\nLeftarrow /g, '\\u21CD' ],\n [ /\\\\nLeftrightarrow /g, '\\u21CE' ],\n [ /\\\\nRightarrow /g, '\\u21CF' ],\n [ /\\\\Leftarrow /g, '\\u21D0' ],\n [ /\\\\Uparrow /g, '\\u21D1' ],\n [ /\\\\Rightarrow /g, '\\u21D2' ],\n [ /\\\\Downarrow /g, '\\u21D3' ],\n [ /\\\\Leftrightarrow /g, '\\u21D4' ],\n [ /\\\\Updownarrow /g, '\\u21D5' ],\n [ /\\\\Lleftarrow /g, '\\u21DA' ],\n [ /\\\\Rrightarrow /g, '\\u21DB' ],\n [ /\\\\rightsquigarrow /g, '\\u21DD' ],\n [ /\\\\DownArrowUpArrow /g, '\\u21F5' ],\n [ /\\\\forall /g, '\\u2200' ],\n [ /\\\\complement /g, '\\u2201' ],\n [ /\\\\partial /g, '\\u2202' ],\n [ /\\\\exists /g, '\\u2203' ],\n [ /\\\\nexists /g, '\\u2204' ],\n [ /\\\\varnothing /g, '\\u2205' ],\n [ /\\\\nabla /g, '\\u2207' ],\n [ /\\\\in /g, '\\u2208' ],\n [ /\\\\not\\\\in /g, '\\u2209' ],\n [ /\\\\ni /g, '\\u220B' ],\n [ /\\\\not\\\\ni /g, '\\u220C' ],\n [ /\\\\prod /g, '\\u220F' ],\n [ /\\\\coprod /g, '\\u2210' ],\n [ /\\\\sum /g, '\\u2211' ],\n [ /\\\\mp /g, '\\u2213' ],\n [ /\\\\dotplus /g, '\\u2214' ],\n [ /\\\\setminus /g, '\\u2216' ],\n [ /\\\\circ /g, '\\u2218' ],\n [ /\\\\bullet /g, '\\u2219' ],\n [ /\\\\surd /g, '\\u221A' ],\n [ /\\\\propto /g, '\\u221D' ],\n [ /\\\\infty /g, '\\u221E' ],\n [ /\\\\rightangle /g, '\\u221F' ],\n [ /\\\\angle /g, '\\u2220' ],\n [ /\\\\measuredangle /g, '\\u2221' ],\n [ /\\\\sphericalangle /g, '\\u2222' ],\n [ /\\\\mid /g, '\\u2223' ],\n [ /\\\\nmid /g, '\\u2224' ],\n [ /\\\\parallel /g, '\\u2225' ],\n [ /\\\\nparallel /g, '\\u2226' ],\n [ /\\\\wedge /g, '\\u2227' ],\n [ /\\\\vee /g, '\\u2228' ],\n [ /\\\\cap /g, '\\u2229' ],\n [ /\\\\cup /g, '\\u222A' ],\n [ /\\\\int /g, '\\u222B' ],\n [ /\\\\int\\\\!\\\\int /g, '\\u222C' ],\n [ /\\\\int\\\\!\\\\int\\\\!\\\\int /g, '\\u222D' ],\n [ /\\\\oint /g, '\\u222E' ],\n [ /\\\\surfintegral /g, '\\u222F' ],\n [ /\\\\volintegral /g, '\\u2230' ],\n [ /\\\\clwintegral /g, '\\u2231' ],\n [ /\\\\ElsevierGlyph\\{2232\\}/g, '\\u2232' ],\n [ /\\\\ElsevierGlyph\\{2233\\}/g, '\\u2233' ],\n [ /\\\\therefore /g, '\\u2234' ],\n [ /\\\\because /g, '\\u2235' ],\n [ /\\\\Colon /g, '\\u2237' ],\n [ /\\\\ElsevierGlyph\\{2238\\}/g, '\\u2238' ],\n [ /\\\\mathbin\\{\\{:\\}\\\\!\\\\!\\{\\-\\}\\\\!\\\\!\\{:\\}\\}/g, '\\u223A' ],\n [ /\\\\homothetic /g, '\\u223B' ],\n [ /\\\\sim /g, '\\u223C' ],\n [ /\\\\backsim /g, '\\u223D' ],\n [ /\\\\lazysinv /g, '\\u223E' ],\n [ /\\\\wr /g, '\\u2240' ],\n [ /\\\\not\\\\sim /g, '\\u2241' ],\n [ /\\\\ElsevierGlyph\\{2242\\}/g, '\\u2242' ],\n [ /\\\\NotEqualTilde /g, '\\u2242-00338' ],\n [ /\\\\simeq /g, '\\u2243' ],\n [ /\\\\not\\\\simeq /g, '\\u2244' ],\n [ /\\\\cong /g, '\\u2245' ],\n [ /\\\\approxnotequal /g, '\\u2246' ],\n [ /\\\\not\\\\cong /g, '\\u2247' ],\n [ /\\\\approx /g, '\\u2248' ],\n [ /\\\\not\\\\approx /g, '\\u2249' ],\n [ /\\\\approxeq /g, '\\u224A' ],\n [ /\\\\tildetrpl /g, '\\u224B' ],\n [ /\\\\not\\\\apid /g, '\\u224B-00338' ],\n [ /\\\\allequal /g, '\\u224C' ],\n [ /\\\\asymp /g, '\\u224D' ],\n [ /\\\\Bumpeq /g, '\\u224E' ],\n [ /\\\\NotHumpDownHump /g, '\\u224E-00338' ],\n [ /\\\\bumpeq /g, '\\u224F' ],\n [ /\\\\NotHumpEqual /g, '\\u224F-00338' ],\n [ /\\\\doteq /g, '\\u2250' ],\n [ /\\\\not\\\\doteq/g, '\\u2250-00338' ],\n [ /\\\\doteqdot /g, '\\u2251' ],\n [ /\\\\fallingdotseq /g, '\\u2252' ],\n [ /\\\\risingdotseq /g, '\\u2253' ],\n [ /\\\\eqcirc /g, '\\u2256' ],\n [ /\\\\circeq /g, '\\u2257' ],\n [ /\\\\estimates /g, '\\u2259' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u225A' ],\n [ /\\\\starequal /g, '\\u225B' ],\n [ /\\\\triangleq /g, '\\u225C' ],\n [ /\\\\ElsevierGlyph\\{225F\\}/g, '\\u225F' ],\n [ /\\\\not =/g, '\\u2260' ],\n [ /\\\\equiv /g, '\\u2261' ],\n [ /\\\\not\\\\equiv /g, '\\u2262' ],\n [ /\\\\leq /g, '\\u2264' ],\n [ /\\\\geq /g, '\\u2265' ],\n [ /\\\\leqq /g, '\\u2266' ],\n [ /\\\\geqq /g, '\\u2267' ],\n [ /\\\\lneqq /g, '\\u2268' ],\n [ /\\\\lvertneqq /g, '\\u2268-0FE00' ],\n [ /\\\\gneqq /g, '\\u2269' ],\n [ /\\\\gvertneqq /g, '\\u2269-0FE00' ],\n [ /\\\\ll /g, '\\u226A' ],\n [ /\\\\NotLessLess /g, '\\u226A-00338' ],\n [ /\\\\gg /g, '\\u226B' ],\n [ /\\\\NotGreaterGreater /g, '\\u226B-00338' ],\n [ /\\\\between /g, '\\u226C' ],\n [ /\\\\not\\\\kern\\-0.3em\\\\times /g, '\\u226D' ],\n [ /\\\\not/g, '\\u226F' ],\n [ /\\\\not\\\\leq /g, '\\u2270' ],\n [ /\\\\not\\\\geq /g, '\\u2271' ],\n [ /\\\\lessequivlnt /g, '\\u2272' ],\n [ /\\\\greaterequivlnt /g, '\\u2273' ],\n [ /\\\\ElsevierGlyph\\{2274\\}/g, '\\u2274' ],\n [ /\\\\ElsevierGlyph\\{2275\\}/g, '\\u2275' ],\n [ /\\\\lessgtr /g, '\\u2276' ],\n [ /\\\\gtrless /g, '\\u2277' ],\n [ /\\\\notlessgreater /g, '\\u2278' ],\n [ /\\\\notgreaterless /g, '\\u2279' ],\n [ /\\\\prec /g, '\\u227A' ],\n [ /\\\\succ /g, '\\u227B' ],\n [ /\\\\preccurlyeq /g, '\\u227C' ],\n [ /\\\\succcurlyeq /g, '\\u227D' ],\n [ /\\\\precapprox /g, '\\u227E' ],\n [ /\\\\NotPrecedesTilde /g, '\\u227E-00338' ],\n [ /\\\\succapprox /g, '\\u227F' ],\n [ /\\\\NotSucceedsTilde /g, '\\u227F-00338' ],\n [ /\\\\not\\\\prec /g, '\\u2280' ],\n [ /\\\\not\\\\succ /g, '\\u2281' ],\n [ /\\\\subset /g, '\\u2282' ],\n [ /\\\\supset /g, '\\u2283' ],\n [ /\\\\not\\\\subset /g, '\\u2284' ],\n [ /\\\\not\\\\supset /g, '\\u2285' ],\n [ /\\\\subseteq /g, '\\u2286' ],\n [ /\\\\supseteq /g, '\\u2287' ],\n [ /\\\\not\\\\subseteq /g, '\\u2288' ],\n [ /\\\\not\\\\supseteq /g, '\\u2289' ],\n [ /\\\\subsetneq /g, '\\u228A' ],\n [ /\\\\varsubsetneqq /g, '\\u228A-0FE00' ],\n [ /\\\\supsetneq /g, '\\u228B' ],\n [ /\\\\varsupsetneq /g, '\\u228B-0FE00' ],\n [ /\\\\uplus /g, '\\u228E' ],\n [ /\\\\sqsubset /g, '\\u228F' ],\n [ /\\\\NotSquareSubset /g, '\\u228F-00338' ],\n [ /\\\\sqsupset /g, '\\u2290' ],\n [ /\\\\NotSquareSuperset /g, '\\u2290-00338' ],\n [ /\\\\sqsubseteq /g, '\\u2291' ],\n [ /\\\\sqsupseteq /g, '\\u2292' ],\n [ /\\\\sqcap /g, '\\u2293' ],\n [ /\\\\sqcup /g, '\\u2294' ],\n [ /\\\\oplus /g, '\\u2295' ],\n [ /\\\\ominus /g, '\\u2296' ],\n [ /\\\\otimes /g, '\\u2297' ],\n [ /\\\\oslash /g, '\\u2298' ],\n [ /\\\\odot /g, '\\u2299' ],\n [ /\\\\circledcirc /g, '\\u229A' ],\n [ /\\\\circledast /g, '\\u229B' ],\n [ /\\\\circleddash /g, '\\u229D' ],\n [ /\\\\boxplus /g, '\\u229E' ],\n [ /\\\\boxminus /g, '\\u229F' ],\n [ /\\\\boxtimes /g, '\\u22A0' ],\n [ /\\\\boxdot /g, '\\u22A1' ],\n [ /\\\\vdash /g, '\\u22A2' ],\n [ /\\\\dashv /g, '\\u22A3' ],\n [ /\\\\top /g, '\\u22A4' ],\n [ /\\\\perp /g, '\\u22A5' ],\n [ /\\\\truestate /g, '\\u22A7' ],\n [ /\\\\forcesextra /g, '\\u22A8' ],\n [ /\\\\Vdash /g, '\\u22A9' ],\n [ /\\\\Vvdash /g, '\\u22AA' ],\n [ /\\\\VDash /g, '\\u22AB' ],\n [ /\\\\nvdash /g, '\\u22AC' ],\n [ /\\\\nvDash /g, '\\u22AD' ],\n [ /\\\\nVdash /g, '\\u22AE' ],\n [ /\\\\nVDash /g, '\\u22AF' ],\n [ /\\\\vartriangleleft /g, '\\u22B2' ],\n [ /\\\\vartriangleright /g, '\\u22B3' ],\n [ /\\\\trianglelefteq /g, '\\u22B4' ],\n [ /\\\\trianglerighteq /g, '\\u22B5' ],\n [ /\\\\original /g, '\\u22B6' ],\n [ /\\\\image /g, '\\u22B7' ],\n [ /\\\\multimap /g, '\\u22B8' ],\n [ /\\\\hermitconjmatrix /g, '\\u22B9' ],\n [ /\\\\intercal /g, '\\u22BA' ],\n [ /\\\\veebar /g, '\\u22BB' ],\n [ /\\\\rightanglearc /g, '\\u22BE' ],\n [ /\\\\ElsevierGlyph\\{22C0\\}/g, '\\u22C0' ],\n [ /\\\\ElsevierGlyph\\{22C1\\}/g, '\\u22C1' ],\n [ /\\\\bigcap /g, '\\u22C2' ],\n [ /\\\\bigcup /g, '\\u22C3' ],\n [ /\\\\diamond /g, '\\u22C4' ],\n [ /\\\\cdot /g, '\\u22C5' ],\n [ /\\\\star /g, '\\u22C6' ],\n [ /\\\\divideontimes /g, '\\u22C7' ],\n [ /\\\\bowtie /g, '\\u22C8' ],\n [ /\\\\ltimes /g, '\\u22C9' ],\n [ /\\\\rtimes /g, '\\u22CA' ],\n [ /\\\\leftthreetimes /g, '\\u22CB' ],\n [ /\\\\rightthreetimes /g, '\\u22CC' ],\n [ /\\\\backsimeq /g, '\\u22CD' ],\n [ /\\\\curlyvee /g, '\\u22CE' ],\n [ /\\\\curlywedge /g, '\\u22CF' ],\n [ /\\\\Subset /g, '\\u22D0' ],\n [ /\\\\Supset /g, '\\u22D1' ],\n [ /\\\\Cap /g, '\\u22D2' ],\n [ /\\\\Cup /g, '\\u22D3' ],\n [ /\\\\pitchfork /g, '\\u22D4' ],\n [ /\\\\lessdot /g, '\\u22D6' ],\n [ /\\\\gtrdot /g, '\\u22D7' ],\n [ /\\\\verymuchless /g, '\\u22D8' ],\n [ /\\\\verymuchgreater /g, '\\u22D9' ],\n [ /\\\\lesseqgtr /g, '\\u22DA' ],\n [ /\\\\gtreqless /g, '\\u22DB' ],\n [ /\\\\curlyeqprec /g, '\\u22DE' ],\n [ /\\\\curlyeqsucc /g, '\\u22DF' ],\n [ /\\\\not\\\\sqsubseteq /g, '\\u22E2' ],\n [ /\\\\not\\\\sqsupseteq /g, '\\u22E3' ],\n [ /\\\\Elzsqspne /g, '\\u22E5' ],\n [ /\\\\lnsim /g, '\\u22E6' ],\n [ /\\\\gnsim /g, '\\u22E7' ],\n [ /\\\\precedesnotsimilar /g, '\\u22E8' ],\n [ /\\\\succnsim /g, '\\u22E9' ],\n [ /\\\\ntriangleleft /g, '\\u22EA' ],\n [ /\\\\ntriangleright /g, '\\u22EB' ],\n [ /\\\\ntrianglelefteq /g, '\\u22EC' ],\n [ /\\\\ntrianglerighteq /g, '\\u22ED' ],\n [ /\\\\vdots /g, '\\u22EE' ],\n [ /\\\\cdots /g, '\\u22EF' ],\n [ /\\\\upslopeellipsis /g, '\\u22F0' ],\n [ /\\\\downslopeellipsis /g, '\\u22F1' ],\n [ /\\\\barwedge /g, '\\u2305' ],\n [ /\\\\perspcorrespond /g, '\\u2306' ],\n [ /\\\\lceil /g, '\\u2308' ],\n [ /\\\\rceil /g, '\\u2309' ],\n [ /\\\\lfloor /g, '\\u230A' ],\n [ /\\\\rfloor /g, '\\u230B' ],\n [ /\\\\recorder /g, '\\u2315' ],\n [ /\\\\mathchar\"2208/g, '\\u2316' ],\n [ /\\\\ulcorner /g, '\\u231C' ],\n [ /\\\\urcorner /g, '\\u231D' ],\n [ /\\\\llcorner /g, '\\u231E' ],\n [ /\\\\lrcorner /g, '\\u231F' ],\n [ /\\\\frown /g, '\\u2322' ],\n [ /\\\\smile /g, '\\u2323' ],\n [ /\\\\langle /g, '\\u2329' ],\n [ /\\\\rangle /g, '\\u232A' ],\n [ /\\\\ElsevierGlyph\\{E838\\}/g, '\\u233D' ],\n [ /\\\\Elzdlcorn /g, '\\u23A3' ],\n [ /\\\\lmoustache /g, '\\u23B0' ],\n [ /\\\\rmoustache /g, '\\u23B1' ],\n [ /\\\\textvisiblespace /g, '\\u2423' ],\n [ /\\\\ding\\{172\\}/g, '\\u2460' ],\n [ /\\\\ding\\{173\\}/g, '\\u2461' ],\n [ /\\\\ding\\{174\\}/g, '\\u2462' ],\n [ /\\\\ding\\{175\\}/g, '\\u2463' ],\n [ /\\\\ding\\{176\\}/g, '\\u2464' ],\n [ /\\\\ding\\{177\\}/g, '\\u2465' ],\n [ /\\\\ding\\{178\\}/g, '\\u2466' ],\n [ /\\\\ding\\{179\\}/g, '\\u2467' ],\n [ /\\\\ding\\{180\\}/g, '\\u2468' ],\n [ /\\\\ding\\{181\\}/g, '\\u2469' ],\n [ /\\\\circledS /g, '\\u24C8' ],\n [ /\\\\Elzdshfnc /g, '\\u2506' ],\n [ /\\\\Elzsqfnw /g, '\\u2519' ],\n [ /\\\\diagup /g, '\\u2571' ],\n [ /\\\\ding\\{110\\}/g, '\\u25A0' ],\n [ /\\\\square /g, '\\u25A1' ],\n [ /\\\\blacksquare /g, '\\u25AA' ],\n [ /\\\\fbox\\{~~\\}/g, '\\u25AD' ],\n [ /\\\\Elzvrecto /g, '\\u25AF' ],\n [ /\\\\ElsevierGlyph\\{E381\\}/g, '\\u25B1' ],\n [ /\\\\ding\\{115\\}/g, '\\u25B2' ],\n [ /\\\\bigtriangleup /g, '\\u25B3' ],\n [ /\\\\blacktriangle /g, '\\u25B4' ],\n [ /\\\\vartriangle /g, '\\u25B5' ],\n [ /\\\\blacktriangleright /g, '\\u25B8' ],\n [ /\\\\triangleright /g, '\\u25B9' ],\n [ /\\\\ding\\{116\\}/g, '\\u25BC' ],\n [ /\\\\bigtriangledown /g, '\\u25BD' ],\n [ /\\\\blacktriangledown /g, '\\u25BE' ],\n [ /\\\\triangledown /g, '\\u25BF' ],\n [ /\\\\blacktriangleleft /g, '\\u25C2' ],\n [ /\\\\triangleleft /g, '\\u25C3' ],\n [ /\\\\ding\\{117\\}/g, '\\u25C6' ],\n [ /\\\\lozenge /g, '\\u25CA' ],\n [ /\\\\bigcirc /g, '\\u25CB' ],\n [ /\\\\ding\\{108\\}/g, '\\u25CF' ],\n [ /\\\\Elzcirfl /g, '\\u25D0' ],\n [ /\\\\Elzcirfr /g, '\\u25D1' ],\n [ /\\\\Elzcirfb /g, '\\u25D2' ],\n [ /\\\\ding\\{119\\}/g, '\\u25D7' ],\n [ /\\\\Elzrvbull /g, '\\u25D8' ],\n [ /\\\\Elzsqfl /g, '\\u25E7' ],\n [ /\\\\Elzsqfr /g, '\\u25E8' ],\n [ /\\\\Elzsqfse /g, '\\u25EA' ],\n [ /\\\\bigcirc /g, '\\u25EF' ],\n [ /\\\\ding\\{72\\}/g, '\\u2605' ],\n [ /\\\\ding\\{73\\}/g, '\\u2606' ],\n [ /\\\\ding\\{37\\}/g, '\\u260E' ],\n [ /\\\\ding\\{42\\}/g, '\\u261B' ],\n [ /\\\\ding\\{43\\}/g, '\\u261E' ],\n [ /\\\\rightmoon /g, '\\u263E' ],\n [ /\\\\mercury /g, '\\u263F' ],\n [ /\\\\venus /g, '\\u2640' ],\n [ /\\\\male /g, '\\u2642' ],\n [ /\\\\jupiter /g, '\\u2643' ],\n [ /\\\\saturn /g, '\\u2644' ],\n [ /\\\\uranus /g, '\\u2645' ],\n [ /\\\\neptune /g, '\\u2646' ],\n [ /\\\\pluto /g, '\\u2647' ],\n [ /\\\\aries /g, '\\u2648' ],\n [ /\\\\taurus /g, '\\u2649' ],\n [ /\\\\gemini /g, '\\u264A' ],\n [ /\\\\cancer /g, '\\u264B' ],\n [ /\\\\leo /g, '\\u264C' ],\n [ /\\\\virgo /g, '\\u264D' ],\n [ /\\\\libra /g, '\\u264E' ],\n [ /\\\\scorpio /g, '\\u264F' ],\n [ /\\\\sagittarius /g, '\\u2650' ],\n [ /\\\\capricornus /g, '\\u2651' ],\n [ /\\\\aquarius /g, '\\u2652' ],\n [ /\\\\pisces /g, '\\u2653' ],\n [ /\\\\ding\\{171\\}/g, '\\u2660' ],\n [ /\\\\diamond /g, '\\u2662' ],\n [ /\\\\ding\\{168\\}/g, '\\u2663' ],\n [ /\\\\ding\\{170\\}/g, '\\u2665' ],\n [ /\\\\ding\\{169\\}/g, '\\u2666' ],\n [ /\\\\quarternote /g, '\\u2669' ],\n [ /\\\\eighthnote /g, '\\u266A' ],\n [ /\\\\flat /g, '\\u266D' ],\n [ /\\\\natural /g, '\\u266E' ],\n [ /\\\\sharp /g, '\\u266F' ],\n [ /\\\\ding\\{33\\}/g, '\\u2701' ],\n [ /\\\\ding\\{34\\}/g, '\\u2702' ],\n [ /\\\\ding\\{35\\}/g, '\\u2703' ],\n [ /\\\\ding\\{36\\}/g, '\\u2704' ],\n [ /\\\\ding\\{38\\}/g, '\\u2706' ],\n [ /\\\\ding\\{39\\}/g, '\\u2707' ],\n [ /\\\\ding\\{40\\}/g, '\\u2708' ],\n [ /\\\\ding\\{41\\}/g, '\\u2709' ],\n [ /\\\\ding\\{44\\}/g, '\\u270C' ],\n [ /\\\\ding\\{45\\}/g, '\\u270D' ],\n [ /\\\\ding\\{46\\}/g, '\\u270E' ],\n [ /\\\\ding\\{47\\}/g, '\\u270F' ],\n [ /\\\\ding\\{48\\}/g, '\\u2710' ],\n [ /\\\\ding\\{49\\}/g, '\\u2711' ],\n [ /\\\\ding\\{50\\}/g, '\\u2712' ],\n [ /\\\\ding\\{51\\}/g, '\\u2713' ],\n [ /\\\\ding\\{52\\}/g, '\\u2714' ],\n [ /\\\\ding\\{53\\}/g, '\\u2715' ],\n [ /\\\\ding\\{54\\}/g, '\\u2716' ],\n [ /\\\\ding\\{55\\}/g, '\\u2717' ],\n [ /\\\\ding\\{56\\}/g, '\\u2718' ],\n [ /\\\\ding\\{57\\}/g, '\\u2719' ],\n [ /\\\\ding\\{58\\}/g, '\\u271A' ],\n [ /\\\\ding\\{59\\}/g, '\\u271B' ],\n [ /\\\\ding\\{60\\}/g, '\\u271C' ],\n [ /\\\\ding\\{61\\}/g, '\\u271D' ],\n [ /\\\\ding\\{62\\}/g, '\\u271E' ],\n [ /\\\\ding\\{63\\}/g, '\\u271F' ],\n [ /\\\\ding\\{64\\}/g, '\\u2720' ],\n [ /\\\\ding\\{65\\}/g, '\\u2721' ],\n [ /\\\\ding\\{66\\}/g, '\\u2722' ],\n [ /\\\\ding\\{67\\}/g, '\\u2723' ],\n [ /\\\\ding\\{68\\}/g, '\\u2724' ],\n [ /\\\\ding\\{69\\}/g, '\\u2725' ],\n [ /\\\\ding\\{70\\}/g, '\\u2726' ],\n [ /\\\\ding\\{71\\}/g, '\\u2727' ],\n [ /\\\\ding\\{73\\}/g, '\\u2729' ],\n [ /\\\\ding\\{74\\}/g, '\\u272A' ],\n [ /\\\\ding\\{75\\}/g, '\\u272B' ],\n [ /\\\\ding\\{76\\}/g, '\\u272C' ],\n [ /\\\\ding\\{77\\}/g, '\\u272D' ],\n [ /\\\\ding\\{78\\}/g, '\\u272E' ],\n [ /\\\\ding\\{79\\}/g, '\\u272F' ],\n [ /\\\\ding\\{80\\}/g, '\\u2730' ],\n [ /\\\\ding\\{81\\}/g, '\\u2731' ],\n [ /\\\\ding\\{82\\}/g, '\\u2732' ],\n [ /\\\\ding\\{83\\}/g, '\\u2733' ],\n [ /\\\\ding\\{84\\}/g, '\\u2734' ],\n [ /\\\\ding\\{85\\}/g, '\\u2735' ],\n [ /\\\\ding\\{86\\}/g, '\\u2736' ],\n [ /\\\\ding\\{87\\}/g, '\\u2737' ],\n [ /\\\\ding\\{88\\}/g, '\\u2738' ],\n [ /\\\\ding\\{89\\}/g, '\\u2739' ],\n [ /\\\\ding\\{90\\}/g, '\\u273A' ],\n [ /\\\\ding\\{91\\}/g, '\\u273B' ],\n [ /\\\\ding\\{92\\}/g, '\\u273C' ],\n [ /\\\\ding\\{93\\}/g, '\\u273D' ],\n [ /\\\\ding\\{94\\}/g, '\\u273E' ],\n [ /\\\\ding\\{95\\}/g, '\\u273F' ],\n [ /\\\\ding\\{96\\}/g, '\\u2740' ],\n [ /\\\\ding\\{97\\}/g, '\\u2741' ],\n [ /\\\\ding\\{98\\}/g, '\\u2742' ],\n [ /\\\\ding\\{99\\}/g, '\\u2743' ],\n [ /\\\\ding\\{100\\}/g, '\\u2744' ],\n [ /\\\\ding\\{101\\}/g, '\\u2745' ],\n [ /\\\\ding\\{102\\}/g, '\\u2746' ],\n [ /\\\\ding\\{103\\}/g, '\\u2747' ],\n [ /\\\\ding\\{104\\}/g, '\\u2748' ],\n [ /\\\\ding\\{105\\}/g, '\\u2749' ],\n [ /\\\\ding\\{106\\}/g, '\\u274A' ],\n [ /\\\\ding\\{107\\}/g, '\\u274B' ],\n [ /\\\\ding\\{109\\}/g, '\\u274D' ],\n [ /\\\\ding\\{111\\}/g, '\\u274F' ],\n [ /\\\\ding\\{112\\}/g, '\\u2750' ],\n [ /\\\\ding\\{113\\}/g, '\\u2751' ],\n [ /\\\\ding\\{114\\}/g, '\\u2752' ],\n [ /\\\\ding\\{118\\}/g, '\\u2756' ],\n [ /\\\\ding\\{120\\}/g, '\\u2758' ],\n [ /\\\\ding\\{121\\}/g, '\\u2759' ],\n [ /\\\\ding\\{122\\}/g, '\\u275A' ],\n [ /\\\\ding\\{123\\}/g, '\\u275B' ],\n [ /\\\\ding\\{124\\}/g, '\\u275C' ],\n [ /\\\\ding\\{125\\}/g, '\\u275D' ],\n [ /\\\\ding\\{126\\}/g, '\\u275E' ],\n [ /\\\\ding\\{161\\}/g, '\\u2761' ],\n [ /\\\\ding\\{162\\}/g, '\\u2762' ],\n [ /\\\\ding\\{163\\}/g, '\\u2763' ],\n [ /\\\\ding\\{164\\}/g, '\\u2764' ],\n [ /\\\\ding\\{165\\}/g, '\\u2765' ],\n [ /\\\\ding\\{166\\}/g, '\\u2766' ],\n [ /\\\\ding\\{167\\}/g, '\\u2767' ],\n [ /\\\\ding\\{182\\}/g, '\\u2776' ],\n [ /\\\\ding\\{183\\}/g, '\\u2777' ],\n [ /\\\\ding\\{184\\}/g, '\\u2778' ],\n [ /\\\\ding\\{185\\}/g, '\\u2779' ],\n [ /\\\\ding\\{186\\}/g, '\\u277A' ],\n [ /\\\\ding\\{187\\}/g, '\\u277B' ],\n [ /\\\\ding\\{188\\}/g, '\\u277C' ],\n [ /\\\\ding\\{189\\}/g, '\\u277D' ],\n [ /\\\\ding\\{190\\}/g, '\\u277E' ],\n [ /\\\\ding\\{191\\}/g, '\\u277F' ],\n [ /\\\\ding\\{192\\}/g, '\\u2780' ],\n [ /\\\\ding\\{193\\}/g, '\\u2781' ],\n [ /\\\\ding\\{194\\}/g, '\\u2782' ],\n [ /\\\\ding\\{195\\}/g, '\\u2783' ],\n [ /\\\\ding\\{196\\}/g, '\\u2784' ],\n [ /\\\\ding\\{197\\}/g, '\\u2785' ],\n [ /\\\\ding\\{198\\}/g, '\\u2786' ],\n [ /\\\\ding\\{199\\}/g, '\\u2787' ],\n [ /\\\\ding\\{200\\}/g, '\\u2788' ],\n [ /\\\\ding\\{201\\}/g, '\\u2789' ],\n [ /\\\\ding\\{202\\}/g, '\\u278A' ],\n [ /\\\\ding\\{203\\}/g, '\\u278B' ],\n [ /\\\\ding\\{204\\}/g, '\\u278C' ],\n [ /\\\\ding\\{205\\}/g, '\\u278D' ],\n [ /\\\\ding\\{206\\}/g, '\\u278E' ],\n [ /\\\\ding\\{207\\}/g, '\\u278F' ],\n [ /\\\\ding\\{208\\}/g, '\\u2790' ],\n [ /\\\\ding\\{209\\}/g, '\\u2791' ],\n [ /\\\\ding\\{210\\}/g, '\\u2792' ],\n [ /\\\\ding\\{211\\}/g, '\\u2793' ],\n [ /\\\\ding\\{212\\}/g, '\\u2794' ],\n [ /\\\\ding\\{216\\}/g, '\\u2798' ],\n [ /\\\\ding\\{217\\}/g, '\\u2799' ],\n [ /\\\\ding\\{218\\}/g, '\\u279A' ],\n [ /\\\\ding\\{219\\}/g, '\\u279B' ],\n [ /\\\\ding\\{220\\}/g, '\\u279C' ],\n [ /\\\\ding\\{221\\}/g, '\\u279D' ],\n [ /\\\\ding\\{222\\}/g, '\\u279E' ],\n [ /\\\\ding\\{223\\}/g, '\\u279F' ],\n [ /\\\\ding\\{224\\}/g, '\\u27A0' ],\n [ /\\\\ding\\{225\\}/g, '\\u27A1' ],\n [ /\\\\ding\\{226\\}/g, '\\u27A2' ],\n [ /\\\\ding\\{227\\}/g, '\\u27A3' ],\n [ /\\\\ding\\{228\\}/g, '\\u27A4' ],\n [ /\\\\ding\\{229\\}/g, '\\u27A5' ],\n [ /\\\\ding\\{230\\}/g, '\\u27A6' ],\n [ /\\\\ding\\{231\\}/g, '\\u27A7' ],\n [ /\\\\ding\\{232\\}/g, '\\u27A8' ],\n [ /\\\\ding\\{233\\}/g, '\\u27A9' ],\n [ /\\\\ding\\{234\\}/g, '\\u27AA' ],\n [ /\\\\ding\\{235\\}/g, '\\u27AB' ],\n [ /\\\\ding\\{236\\}/g, '\\u27AC' ],\n [ /\\\\ding\\{237\\}/g, '\\u27AD' ],\n [ /\\\\ding\\{238\\}/g, '\\u27AE' ],\n [ /\\\\ding\\{239\\}/g, '\\u27AF' ],\n [ /\\\\ding\\{241\\}/g, '\\u27B1' ],\n [ /\\\\ding\\{242\\}/g, '\\u27B2' ],\n [ /\\\\ding\\{243\\}/g, '\\u27B3' ],\n [ /\\\\ding\\{244\\}/g, '\\u27B4' ],\n [ /\\\\ding\\{245\\}/g, '\\u27B5' ],\n [ /\\\\ding\\{246\\}/g, '\\u27B6' ],\n [ /\\\\ding\\{247\\}/g, '\\u27B7' ],\n [ /\\\\ding\\{248\\}/g, '\\u27B8' ],\n [ /\\\\ding\\{249\\}/g, '\\u27B9' ],\n [ /\\\\ding\\{250\\}/g, '\\u27BA' ],\n [ /\\\\ding\\{251\\}/g, '\\u27BB' ],\n [ /\\\\ding\\{252\\}/g, '\\u27BC' ],\n [ /\\\\ding\\{253\\}/g, '\\u27BD' ],\n [ /\\\\ding\\{254\\}/g, '\\u27BE' ],\n [ /\\\\longleftarrow /g, '\\u27F5' ],\n [ /\\\\longrightarrow /g, '\\u27F6' ],\n [ /\\\\longleftrightarrow /g, '\\u27F7' ],\n [ /\\\\Longleftarrow /g, '\\u27F8' ],\n [ /\\\\Longrightarrow /g, '\\u27F9' ],\n [ /\\\\Longleftrightarrow /g, '\\u27FA' ],\n [ /\\\\longmapsto /g, '\\u27FC' ],\n [ /\\\\sim\\\\joinrel\\\\leadsto/g, '\\u27FF' ],\n [ /\\\\ElsevierGlyph\\{E212\\}/g, '\\u2905' ],\n [ /\\\\UpArrowBar /g, '\\u2912' ],\n [ /\\\\DownArrowBar /g, '\\u2913' ],\n [ /\\\\ElsevierGlyph\\{E20C\\}/g, '\\u2923' ],\n [ /\\\\ElsevierGlyph\\{E20D\\}/g, '\\u2924' ],\n [ /\\\\ElsevierGlyph\\{E20B\\}/g, '\\u2925' ],\n [ /\\\\ElsevierGlyph\\{E20A\\}/g, '\\u2926' ],\n [ /\\\\ElsevierGlyph\\{E211\\}/g, '\\u2927' ],\n [ /\\\\ElsevierGlyph\\{E20E\\}/g, '\\u2928' ],\n [ /\\\\ElsevierGlyph\\{E20F\\}/g, '\\u2929' ],\n [ /\\\\ElsevierGlyph\\{E210\\}/g, '\\u292A' ],\n [ /\\\\ElsevierGlyph\\{E21C\\}/g, '\\u2933' ],\n [ /\\\\ElsevierGlyph\\{E21D\\}/g, '\\u2933-00338' ],\n [ /\\\\ElsevierGlyph\\{E21A\\}/g, '\\u2936' ],\n [ /\\\\ElsevierGlyph\\{E219\\}/g, '\\u2937' ],\n [ /\\\\Elolarr /g, '\\u2940' ],\n [ /\\\\Elorarr /g, '\\u2941' ],\n [ /\\\\ElzRlarr /g, '\\u2942' ],\n [ /\\\\ElzrLarr /g, '\\u2944' ],\n [ /\\\\Elzrarrx /g, '\\u2947' ],\n [ /\\\\LeftRightVector /g, '\\u294E' ],\n [ /\\\\RightUpDownVector /g, '\\u294F' ],\n [ /\\\\DownLeftRightVector /g, '\\u2950' ],\n [ /\\\\LeftUpDownVector /g, '\\u2951' ],\n [ /\\\\LeftVectorBar /g, '\\u2952' ],\n [ /\\\\RightVectorBar /g, '\\u2953' ],\n [ /\\\\RightUpVectorBar /g, '\\u2954' ],\n [ /\\\\RightDownVectorBar /g, '\\u2955' ],\n [ /\\\\DownLeftVectorBar /g, '\\u2956' ],\n [ /\\\\DownRightVectorBar /g, '\\u2957' ],\n [ /\\\\LeftUpVectorBar /g, '\\u2958' ],\n [ /\\\\LeftDownVectorBar /g, '\\u2959' ],\n [ /\\\\LeftTeeVector /g, '\\u295A' ],\n [ /\\\\RightTeeVector /g, '\\u295B' ],\n [ /\\\\RightUpTeeVector /g, '\\u295C' ],\n [ /\\\\RightDownTeeVector /g, '\\u295D' ],\n [ /\\\\DownLeftTeeVector /g, '\\u295E' ],\n [ /\\\\DownRightTeeVector /g, '\\u295F' ],\n [ /\\\\LeftUpTeeVector /g, '\\u2960' ],\n [ /\\\\LeftDownTeeVector /g, '\\u2961' ],\n [ /\\\\UpEquilibrium /g, '\\u296E' ],\n [ /\\\\ReverseUpEquilibrium /g, '\\u296F' ],\n [ /\\\\RoundImplies /g, '\\u2970' ],\n [ /\\\\ElsevierGlyph\\{E214\\}/g, '\\u297C' ],\n [ /\\\\ElsevierGlyph\\{E215\\}/g, '\\u297D' ],\n [ /\\\\Elztfnc /g, '\\u2980' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u2985' ],\n [ /\\\\Elroang /g, '\\u2986' ],\n [ /\\\\ElsevierGlyph\\{E291\\}/g, '\\u2994' ],\n [ /\\\\Elzddfnc /g, '\\u2999' ],\n [ /\\\\Angle /g, '\\u299C' ],\n [ /\\\\Elzlpargt /g, '\\u29A0' ],\n [ /\\\\ElsevierGlyph\\{E260\\}/g, '\\u29B5' ],\n [ /\\\\ElsevierGlyph\\{E61B\\}/g, '\\u29B6' ],\n [ /\\\\ElzLap /g, '\\u29CA' ],\n [ /\\\\Elzdefas /g, '\\u29CB' ],\n [ /\\\\LeftTriangleBar /g, '\\u29CF' ],\n [ /\\\\NotLeftTriangleBar /g, '\\u29CF-00338' ],\n [ /\\\\RightTriangleBar /g, '\\u29D0' ],\n [ /\\\\NotRightTriangleBar /g, '\\u29D0-00338' ],\n [ /\\\\ElsevierGlyph\\{E372\\}/g, '\\u29DC' ],\n [ /\\\\blacklozenge /g, '\\u29EB' ],\n [ /\\\\RuleDelayed /g, '\\u29F4' ],\n [ /\\\\Elxuplus /g, '\\u2A04' ],\n [ /\\\\ElzThr /g, '\\u2A05' ],\n [ /\\\\Elxsqcup /g, '\\u2A06' ],\n [ /\\\\ElzInf /g, '\\u2A07' ],\n [ /\\\\ElzSup /g, '\\u2A08' ],\n [ /\\\\ElzCint /g, '\\u2A0D' ],\n [ /\\\\clockoint /g, '\\u2A0F' ],\n [ /\\\\ElsevierGlyph\\{E395\\}/g, '\\u2A10' ],\n [ /\\\\sqrint /g, '\\u2A16' ],\n [ /\\\\ElsevierGlyph\\{E25A\\}/g, '\\u2A25' ],\n [ /\\\\ElsevierGlyph\\{E25B\\}/g, '\\u2A2A' ],\n [ /\\\\ElsevierGlyph\\{E25C\\}/g, '\\u2A2D' ],\n [ /\\\\ElsevierGlyph\\{E25D\\}/g, '\\u2A2E' ],\n [ /\\\\ElzTimes /g, '\\u2A2F' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A34' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A35' ],\n [ /\\\\ElsevierGlyph\\{E259\\}/g, '\\u2A3C' ],\n [ /\\\\amalg /g, '\\u2A3F' ],\n [ /\\\\ElzAnd /g, '\\u2A53' ],\n [ /\\\\ElzOr /g, '\\u2A54' ],\n [ /\\\\ElsevierGlyph\\{E36E\\}/g, '\\u2A55' ],\n [ /\\\\ElOr /g, '\\u2A56' ],\n [ /\\\\perspcorrespond /g, '\\u2A5E' ],\n [ /\\\\Elzminhat /g, '\\u2A5F' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u2A63' ],\n [ /\\\\stackrel\\{*\\}\\{=\\}/g, '\\u2A6E' ],\n [ /\\\\Equal /g, '\\u2A75' ],\n [ /\\\\leqslant /g, '\\u2A7D' ],\n [ /\\\\nleqslant /g, '\\u2A7D-00338' ],\n [ /\\\\geqslant /g, '\\u2A7E' ],\n [ /\\\\ngeqslant /g, '\\u2A7E-00338' ],\n [ /\\\\lessapprox /g, '\\u2A85' ],\n [ /\\\\gtrapprox /g, '\\u2A86' ],\n [ /\\\\lneq /g, '\\u2A87' ],\n [ /\\\\gneq /g, '\\u2A88' ],\n [ /\\\\lnapprox /g, '\\u2A89' ],\n [ /\\\\gnapprox /g, '\\u2A8A' ],\n [ /\\\\lesseqqgtr /g, '\\u2A8B' ],\n [ /\\\\gtreqqless /g, '\\u2A8C' ],\n [ /\\\\eqslantless /g, '\\u2A95' ],\n [ /\\\\eqslantgtr /g, '\\u2A96' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{117\\}/g, '\\u2A9D' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{105\\}/g, '\\u2A9E' ],\n [ /\\\\NestedLessLess /g, '\\u2AA1' ],\n [ /\\\\NotNestedLessLess /g, '\\u2AA1-00338' ],\n [ /\\\\NestedGreaterGreater /g, '\\u2AA2' ],\n [ /\\\\NotNestedGreaterGreater /g, '\\u2AA2-00338' ],\n [ /\\\\preceq /g, '\\u2AAF' ],\n [ /\\\\not\\\\preceq /g, '\\u2AAF-00338' ],\n [ /\\\\succeq /g, '\\u2AB0' ],\n [ /\\\\not\\\\succeq /g, '\\u2AB0-00338' ],\n [ /\\\\precneqq /g, '\\u2AB5' ],\n [ /\\\\succneqq /g, '\\u2AB6' ],\n [ /\\\\precapprox /g, '\\u2AB7' ],\n [ /\\\\succapprox /g, '\\u2AB8' ],\n [ /\\\\precnapprox /g, '\\u2AB9' ],\n [ /\\\\succnapprox /g, '\\u2ABA' ],\n [ /\\\\subseteqq /g, '\\u2AC5' ],\n [ /\\\\nsubseteqq /g, '\\u2AC5-00338' ],\n [ /\\\\supseteqq /g, '\\u2AC6' ],\n [ /\\\\nsupseteqq/g, '\\u2AC6-00338' ],\n [ /\\\\subsetneqq /g, '\\u2ACB' ],\n [ /\\\\supsetneqq /g, '\\u2ACC' ],\n [ /\\\\ElsevierGlyph\\{E30D\\}/g, '\\u2AEB' ],\n [ /\\\\Elztdcol /g, '\\u2AF6' ],\n [ /\\\\ElsevierGlyph\\{300A\\}/g, '\\u300A' ],\n [ /\\\\ElsevierGlyph\\{300B\\}/g, '\\u300B' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u3018' ],\n [ /\\\\ElsevierGlyph\\{3019\\}/g, '\\u3019' ],\n [ /\\\\openbracketleft /g, '\\u301A' ],\n [ /\\\\openbracketright /g, '\\u301B' ]\n ]\n\n return this;\n} // end function BibtexParser\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = BibtexParser;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bibtex.js\n// module id = 129\n// module chunks = 3","import baseMVC from \"mvc/base-mvc\";\nimport citationModel from \"mvc/citation/citation-model\";\nimport _l from \"utils/localization\";\nvar CitationView = Backbone.View.extend({\n tagName: \"div\",\n className: \"citations\",\n render: function() {\n this.$el.append(`

${this.formattedReference()}

`);\n return this;\n },\n formattedReference: function() {\n var model = this.model;\n var entryType = model.entryType();\n var fields = model.fields();\n\n var ref = \"\";\n // Code inspired by...\n // https://github.com/vkaravir/bib-publication-list/blob/master/src/bib-publication-list.js\n var authorsAndYear = `${this._asSentence(\n (fields.author ? fields.author : \"\") + (fields.year ? ` (${fields.year})` : \"\")\n )} `;\n var title = fields.title || \"\";\n var pages = fields.pages ? `pp. ${fields.pages}` : \"\";\n var address = fields.address;\n if (entryType == \"article\") {\n var volume =\n (fields.volume ? fields.volume : \"\") +\n (fields.number ? ` (${fields.number})` : \"\") +\n (pages ? `, ${pages}` : \"\");\n ref = `${authorsAndYear +\n this._asSentence(title) +\n (fields.journal ? `In ${fields.journal}, ` : \"\") +\n this._asSentence(volume) +\n this._asSentence(fields.address)}`;\n } else if (entryType == \"inproceedings\" || entryType == \"proceedings\") {\n ref = `${authorsAndYear +\n this._asSentence(title) +\n (fields.booktitle ? `In ${fields.booktitle}, ` : \"\") +\n (pages ? pages : \"\") +\n (address ? `, ${address}` : \"\")}.`;\n } else if (entryType == \"mastersthesis\" || entryType == \"phdthesis\") {\n ref =\n authorsAndYear +\n this._asSentence(title) +\n (fields.howpublished ? `${fields.howpublished}. ` : \"\") +\n (fields.note ? `${fields.note}.` : \"\");\n } else if (entryType == \"techreport\") {\n ref =\n authorsAndYear +\n this._asSentence(title) +\n this._asSentence(fields.institution) +\n this._asSentence(fields.number) +\n this._asSentence(fields.type);\n } else if (entryType == \"book\" || entryType == \"inbook\" || entryType == \"incollection\") {\n ref = `${authorsAndYear} ${this._formatBookInfo(fields)}`;\n } else {\n ref = `${authorsAndYear} ${this._asSentence(title)}${this._asSentence(\n fields.howpublished\n )}${this._asSentence(fields.note)}`;\n }\n var doiUrl = \"\";\n if (fields.doi) {\n doiUrl = `http://dx.doi.org/${fields.doi}`;\n ref += `[doi:${fields.doi}]`;\n }\n var url = fields.url || doiUrl;\n if (url) {\n ref += `[Link]`;\n }\n return ref;\n },\n _formatBookInfo: function(fields) {\n var info = \"\";\n if (fields.chapter) {\n info += `${fields.chapter} in `;\n }\n if (fields.title) {\n info += `${fields.title}`;\n }\n if (fields.editor) {\n info += `, Edited by ${fields.editor}, `;\n }\n if (fields.publisher) {\n info += `, ${fields.publisher}`;\n }\n if (fields.pages) {\n info += `, pp. ${fields.pages}`;\n }\n if (fields.series) {\n info += `, ${fields.series}`;\n }\n if (fields.volume) {\n info += `, Vol.${fields.volume}`;\n }\n if (fields.issn) {\n info += `, ISBN: ${fields.issn}`;\n }\n return `${info}.`;\n },\n _asSentence: function(str) {\n return str && str.trim() ? `${str}. ` : \"\";\n }\n});\n\nvar CitationListView = Backbone.View.extend({\n el: \"#citations\",\n /**\n * Set up view.\n */\n initialize: function() {\n this.listenTo(this.collection, \"add\", this.renderCitation);\n },\n\n events: {\n \"click .citations-to-bibtex\": \"showBibtex\",\n \"click .citations-to-formatted\": \"showFormatted\"\n },\n\n renderCitation: function(citation) {\n var citationView = new CitationView({ model: citation });\n this.$(\".citations-formatted\").append(citationView.render().el);\n var rawTextarea = this.$(\".citations-bibtex-text\");\n rawTextarea.val(`${rawTextarea.val()}\\n\\r${citation.attributes.content}`);\n },\n\n render: function() {\n this.$el.html(this.citationsElement());\n this.collection.each(function(item) {\n this.renderCitation(item);\n }, this);\n this.showFormatted();\n },\n\n showBibtex: function() {\n this.$(\".citations-to-formatted\").show();\n this.$(\".citations-to-bibtex\").hide();\n this.$(\".citations-bibtex\").show();\n this.$(\".citations-formatted\").hide();\n this.$(\".citations-bibtex-text\").select();\n },\n\n showFormatted: function() {\n this.$(\".citations-to-formatted\").hide();\n this.$(\".citations-to-bibtex\").show();\n this.$(\".citations-bibtex\").hide();\n this.$(\".citations-formatted\").show();\n },\n\n partialWarningElement: function() {\n if (this.collection.partial) {\n return [\n '
',\n \"Warning: This is a experimental feature. Most Galaxy tools will not annotate\",\n \" citations explicitly at this time. When writing up your analysis, please manually\",\n \" review your histories and find all references\",\n \" that should be cited in order to completely describe your work. Also, please remember to\",\n ' cite Galaxy.',\n \"
\"\n ].join(\"\");\n } else {\n return \"\";\n }\n },\n\n citationsElement: function() {\n return [\n '
',\n '
',\n _l(\"Citations\"),\n ' ',\n ' ',\n \"
\",\n '
',\n this.partialWarningElement(),\n '',\n \"
\",\n '
',\n '',\n \"
\",\n \"
\"\n ].join(\"\");\n }\n});\n\n//==============================================================================\nexport default {\n CitationView: CitationView,\n CitationListView: CitationListView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/citation/citation-view.js","import visualization from \"viz/visualization\";\nimport * as bigwig from \"libs/bbi/bigwig\";\n/**\n * Data manager for BBI datasets/files, including BigWig and BigBed.\n */\nvar BBIDataManager = visualization.GenomeDataManager.extend({\n /**\n * Load data from server and manage data entries. Adds a Deferred to manager\n * for region; when data becomes available, replaces Deferred with data.\n * Returns the Deferred that resolves when data is available.\n */\n load_data: function(region, mode, resolution, extra_params) {\n var deferred = $.Deferred();\n this.set_data(region, deferred);\n\n var url = `${Galaxy.root}datasets/${this.get(\"dataset\").id}/display`;\n\n var self = this;\n var promise = new $.Deferred();\n $.when(bigwig.makeBwg(url)).then((bb, err) => {\n $.when(bb.readWigData(region.get(\"chrom\"), region.get(\"start\"), region.get(\"end\"))).then(data => {\n // Transform data into \"bigwig\" format for LinePainter. \"bigwig\" format is an array of 2-element arrays\n // where each element is [position, score]; unlike real bigwig format, no gaps are allowed.\n var result = [];\n\n var prev = { max: Number.MIN_VALUE };\n data.forEach(d => {\n // If there is a gap between prev and d, fill it with an interval with score 0.\n // This is necessary for LinePainter to draw correctly.\n if (prev.max !== d.min - 1) {\n // +1 to start after previous region.\n result.push([prev.max + 1, 0]);\n // -2 = -1 for converting from 1-based to 0-based coordinates,\n // -1 for ending before current region.\n result.push([d.min - 2, 0]);\n }\n\n // Add data point for entry start. -1 to convert from wiggle\n // 1-based coordinates to 0-based browser coordinates.\n result.push([d.min - 1, d.score]);\n\n // Add data point for entry end:\n result.push([d.max, d.score]);\n\n prev = d;\n });\n\n var entry = {\n data: result,\n region: region,\n dataset_type: \"bigwig\"\n };\n\n self.set_data(region, entry);\n deferred.resolve(entry);\n });\n });\n\n return deferred;\n }\n});\n\nexport default {\n BBIDataManager: BBIDataManager\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/bbi-data-manager.js","//\n// Author: Jeremy Goecks\n//\n// Modified from:\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// bigwig.js: indexed binary WIG (and BED) files\n//\n\n// Requirements:\n// * jquery and ajax-native plugin for reading binary data, jquery for promises\n// * spans for working working with genomic intervals\n// * jszlib for decompression.\ndefine([\"libs/bbi/spans\", \"libs/bbi/jszlib\", \"libs/bbi/jquery-ajax-native\"], function(spans, jszlib) {\n \"use strict\";\n\n // -- Copied from das.js --\n\n function DASFeature() {\n }\n\n function DASGroup(id) {\n if (id)\n this.id = id;\n }\n\n // -- End copy --\n\n // -- Copied from bin.js --\n\n function readInt(ba, offset) {\n return (ba[offset + 3] << 24) | (ba[offset + 2] << 16) | (ba[offset + 1] << 8) | (ba[offset]);\n }\n\n // -- End copy --\n\n // Some globals.\n var Range = spans.Range;\n var union = spans.union;\n var intersection = spans.intersection;\n\n var jszlib_inflate_buffer = jszlib.inflateBuffer;\n var arrayCopy = jszlib.arrayCopy;\n\n var BIG_WIG_MAGIC = 0x888FFC26;\n var BIG_WIG_MAGIC_BE = 0x26FC8F88;\n var BIG_BED_MAGIC = 0x8789F2EB;\n var BIG_BED_MAGIC_BE = 0xEBF28987;\n\n\n var BIG_WIG_TYPE_GRAPH = 1;\n var BIG_WIG_TYPE_VSTEP = 2;\n var BIG_WIG_TYPE_FSTEP = 3;\n\n var M1 = 256;\n var M2 = 256*256;\n var M3 = 256*256*256;\n var M4 = 256*256*256*256;\n\n var BED_COLOR_REGEXP = new RegExp(\"^[0-9]+,[0-9]+,[0-9]+\");\n\n /**\n * Read binary data from a URL using HTTP Range header. Requires jQuery and ajax-native plugin.\n */\n function read(url, start, size) {\n // Taken from bin.js:\n // This may be necessary for Safari:\n // if ((isSafari || this.opts.salt) && url.indexOf('?') < 0) {\n // url = url + '?salt=' + b64_sha1('' + Date.now() + ',' + (++seed));\n // }\n\n var chunkSizeLimit = Math.pow(10, 6); // 1 MB\n if(size > chunkSizeLimit) {\n // TODO: raise error.\n }\n\n // Read data from remote file.\n return $.ajax({\n type: 'GET',\n dataType: 'native',\n url: url,\n // Potential timeout on first request to catch mixed-content errors on Chromium.\n timeout: 5000,\n beforeSend: function(xhrObj) {\n // (size - 1) because range is inclusive.\n xhrObj.setRequestHeader(\"Range\", \"bytes=\" + start + \"-\" + (start + (size - 1)));\n },\n xhrFields: {\n responseType: 'arraybuffer'\n }\n });\n }\n\n function bwg_readOffset(ba, o) {\n var offset = ba[o] + ba[o+1]*M1 + ba[o+2]*M2 + ba[o+3]*M3 + ba[o+4]*M4;\n return offset;\n }\n\n function BigWig() {\n }\n\n /**\n * Read the chromosome B+ tree header.\n */\n BigWig.prototype.readChromTree = function() {\n var thisB = this;\n this.chromsToIDs = {};\n this.idsToChroms = {};\n this.maxID = 0;\n\n var udo = this.unzoomedDataOffset;\n var eb = (udo - this.chromTreeOffset) & 3;\n udo = udo + 4 - eb;\n\n // Read and parse the chrom tree, return the promise so that subsequent actions can be taken.\n return $.when(read(this.url, this.chromTreeOffset, udo - this.chromTreeOffset)).then(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n var bptReadNode = function(offset) {\n var nodeType = ba[offset];\n var cnt = sa[(offset/2) + 1];\n offset += 4;\n for (var n = 0; n < cnt; ++n) {\n if (nodeType === 0) {\n offset += keySize;\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n childOffset -= thisB.chromTreeOffset;\n bptReadNode(childOffset);\n } else {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode !== 0) {\n key += String.fromCharCode(charCode);\n }\n }\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var chromSize = (ba[offset + 7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n offset += 8;\n\n thisB.chromsToIDs[key] = chromId;\n if (key.indexOf('chr') === 0) {\n thisB.chromsToIDs[key.substr(3)] = chromId;\n }\n thisB.idsToChroms[chromId] = key;\n thisB.maxID = Math.max(thisB.maxID, chromId);\n }\n }\n };\n bptReadNode(rootNodeOffset);\n });\n }\n\n function BigWigView(bwg, cirTreeOffset, cirTreeLength, isSummary) {\n this.bwg = bwg;\n this.cirTreeOffset = cirTreeOffset;\n this.cirTreeLength = cirTreeLength;\n this.isSummary = isSummary;\n }\n\n\n\n BigWigView.prototype.readWigData = function(chrName, min, max) {\n var chr = this.bwg.chromsToIDs[chrName],\n rval;\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n rval = [];\n } else {\n rval = this.readWigDataById(chr, min, max);\n }\n\n return rval;\n };\n\n BigWigView.prototype.readWigDataById = function(chr, min, max) {\n var thisB = this,\n promise = $.Deferred();\n\n // Read the R-tree index header and then read data again.\n if (!this.cirHeader) {\n $.when(read(thisB.bwg.url, this.cirTreeOffset, 48)).then(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n $.when(thisB.readWigDataById(chr, min, max)).then(function(result) {\n promise.resolve(result);\n });\n });\n return promise;\n }\n\n var blocksToFetch = [];\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var filter = function(chromId, fmin, fmax, toks) {\n return ((chr < 0 || chromId == chr) && fmin <= max && fmax >= min);\n };\n\n var cirFobRecur = function(offset, level) {\n if (thisB.bwg.instrument)\n console.log('level=' + level + '; offset=' + offset + '; time=' + (Date.now()|0));\n\n outstanding += offset.length;\n\n if (offset.length == 1 && offset[0] - thisB.cirTreeOffset == 48 && thisB.cachedCirRoot) {\n cirFobRecur2(thisB.cachedCirRoot, 0, level);\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n return;\n }\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n };\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n $.when(read(thisB.bwg.url, fr.min(), fr.max() - fr.min())).then(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n\n if (offset[i] - thisB.cirTreeOffset == 48 && offset[i] - fr.min() === 0)\n thisB.cachedCirRoot = resultBuffer;\n\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n }\n }\n });\n };\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf !== 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if (((chr < 0 || startChrom < chr) || (startChrom == chr && startBase <= max)) &&\n ((chr < 0 || endChrom > chr) || (endChrom == chr && endBase >= min)))\n {\n blocksToFetch.push({offset: blockOffset, size: blockSize});\n }\n offset += 32;\n }\n } else {\n var recurOffsets = [];\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n if ((chr < 0 || startChrom < chr || (startChrom == chr && startBase <= max)) &&\n (chr < 0 || endChrom > chr || (endChrom == chr && endBase >= min)))\n {\n recurOffsets.push(blockOffset);\n }\n offset += 24;\n }\n if (recurOffsets.length > 0) {\n cirFobRecur(recurOffsets, level + 1);\n }\n }\n };\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n return promise;\n };\n\n /**\n * Fetch data for a set of blocks. Returns a promise that resolves to fetched data.\n */\n BigWigView.prototype.fetchFeatures = function(filter, blocksToFetch) {\n var thisB = this,\n promise = $.Deferred();\n\n blocksToFetch.sort(function(b0, b1) {\n return (b0.offset|0) - (b1.offset|0);\n });\n\n if (blocksToFetch.length === 0) {\n return [];\n } else {\n var features = [];\n var createFeature = function(chr, fmin, fmax, opts) {\n if (!opts) {\n opts = {};\n }\n\n var f = new DASFeature();\n f._chromId = chr;\n f.segment = thisB.bwg.idsToChroms[chr];\n f.min = fmin;\n f.max = fmax;\n f.type = thisB.bwg.type;\n\n for (var k in opts) {\n f[k] = opts[k];\n }\n\n features.push(f);\n };\n\n // Recursive function to read blocks of data.\n var tramp = function() {\n if (blocksToFetch.length === 0) {\n var afterBWG = Date.now();\n // dlog('BWG fetch took ' + (afterBWG - beforeBWG) + 'ms');\n return promise.resolve(features);\n }\n else {\n var block = blocksToFetch[0];\n if (block.data) {\n thisB.parseFeatures(block.data, createFeature, filter);\n blocksToFetch.splice(0, 1);\n tramp();\n }\n else {\n var fetchStart = block.offset;\n var fetchSize = block.size;\n var bi = 1;\n while (bi < blocksToFetch.length && blocksToFetch[bi].offset == (fetchStart + fetchSize)) {\n fetchSize += blocksToFetch[bi].size;\n ++bi;\n }\n\n $.when(read(thisB.bwg.url, fetchStart, fetchSize)).then(function(result) {\n var offset = 0;\n var bi = 0;\n while (offset < fetchSize) {\n var fb = blocksToFetch[bi];\n\n var data;\n if (thisB.bwg.uncompressBufSize > 0) {\n data = jszlib_inflate_buffer(result, offset + 2, fb.size - 2);\n } else {\n var tmp = new Uint8Array(fb.size); // FIXME is this really the best we can do?\n arrayCopy(new Uint8Array(result, offset, fb.size), 0, tmp, 0, fb.size);\n data = tmp.buffer;\n }\n fb.data = data;\n\n offset += fb.size;\n ++bi;\n }\n tramp();\n });\n }\n }\n };\n tramp();\n }\n\n return promise;\n };\n\n BigWigView.prototype.parseFeatures = function(data, createFeature, filter) {\n var ba = new Uint8Array(data);\n\n if (this.isSummary) {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var itemCount = data.byteLength/32;\n for (var i = 0; i < itemCount; ++i) {\n var chromId = la[(i*8)];\n var start = la[(i*8)+1];\n var end = la[(i*8)+2];\n var validCnt = la[(i*8)+3];\n var minVal = fa[(i*8)+4];\n var maxVal = fa[(i*8)+5];\n var sumData = fa[(i*8)+6];\n var sumSqData = fa[(i*8)+7];\n\n if (filter(chromId, start + 1, end)) {\n var summaryOpts = {type: 'bigwig', score: sumData/validCnt, maxScore: maxVal};\n if (this.bwg.type == 'bigbed') {\n summaryOpts.type = 'density';\n }\n createFeature(chromId, start + 1, end, summaryOpts);\n }\n }\n }\n else if (this.bwg.type == 'bigwig') {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var chromId = la[0];\n var blockStart = la[1];\n var blockEnd = la[2];\n var itemStep = la[3];\n var itemSpan = la[4];\n var blockType = ba[20];\n var itemCount = sa[11];\n\n if (blockType == BIG_WIG_TYPE_FSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var score = fa[i + 6];\n var fmin = blockStart + (i*itemStep) + 1, fmax = blockStart + (i*itemStep) + itemSpan;\n if (filter(chromId, fmin, fmax))\n createFeature(chromId, fmin, fmax, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_VSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*2) + 6] + 1;\n var end = start + itemSpan - 1;\n var score = fa[(i*2) + 7];\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_GRAPH) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*3) + 6] + 1;\n var end = la[(i*3) + 7];\n var score = fa[(i*3) + 8];\n if (start > end) {\n start = end;\n }\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else {\n console.log('Currently not handling bwgType=' + blockType);\n }\n } else if (this.bwg.type == 'bigbed') {\n var offset = 0;\n var dfc = this.bwg.definedFieldCount;\n var schema = this.bwg.schema;\n\n while (offset < ba.length) {\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var start = (ba[offset+7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n var end = (ba[offset+11]<<24) | (ba[offset+10]<<16) | (ba[offset+9]<<8) | (ba[offset+8]);\n offset += 12;\n var rest = '';\n while (true) {\n var ch = ba[offset++];\n if (ch != 0) {\n rest += String.fromCharCode(ch);\n } else {\n break;\n }\n }\n\n var featureOpts = {};\n\n var bedColumns;\n if (rest.length > 0) {\n bedColumns = rest.split('\\t');\n } else {\n bedColumns = [];\n }\n if (bedColumns.length > 0 && dfc > 3) {\n featureOpts.label = bedColumns[0];\n }\n if (bedColumns.length > 1 && dfc > 4) {\n var score = parseInt(bedColumns[1]);\n if (!isNaN(score))\n featureOpts.score = score;\n }\n if (bedColumns.length > 2 && dfc > 5) {\n featureOpts.orientation = bedColumns[2];\n }\n if (bedColumns.length > 5 && dfc > 8) {\n var color = bedColumns[5];\n if (BED_COLOR_REGEXP.test(color)) {\n featureOpts.itemRgb = 'rgb(' + color + ')';\n }\n }\n\n if (bedColumns.length > dfc-3 && schema) {\n for (var col = dfc - 3; col < bedColumns.length; ++col) {\n featureOpts[schema.fields[col+3].name] = bedColumns[col];\n }\n }\n\n if (filter(chromId, start + 1, end, bedColumns)) {\n if (dfc < 12) {\n createFeature(chromId, start + 1, end, featureOpts);\n } else {\n // TODO: add block starts, sizes, thick start, thick end to feature.\n var thickStart = bedColumns[3]|0;\n var thickEnd = bedColumns[4]|0;\n var blockCount = bedColumns[6]|0;\n var blockSizes = bedColumns[7].split(',');\n var blockStarts = bedColumns[8].split(',');\n\n if (featureOpts.exonFrames) {\n var exonFrames = featureOpts.exonFrames.split(',');\n featureOpts.exonFrames = undefined;\n }\n\n featureOpts.type = 'transcript'\n var grp = new DASGroup();\n for (var k in featureOpts) {\n grp[k] = featureOpts[k];\n }\n grp.id = bedColumns[0];\n grp.segment = this.bwg.idsToChroms[chromId];\n grp.min = start + 1;\n grp.max = end;\n grp.notes = [];\n featureOpts.groups = [grp];\n\n // Moving towards using bigGenePred model, but will\n // still support old Dalliance-style BED12+gene-name for the\n // foreseeable future.\n if (bedColumns.length > 9) {\n var geneId = featureOpts.geneName || bedColumns[9];\n var geneName = geneId;\n if (bedColumns.length > 10) {\n geneName = bedColumns[10];\n }\n if (featureOpts.geneName2)\n geneName = featureOpts.geneName2;\n\n var gg = $.extend({}, grp);\n gg.id = geneId;\n gg.label = geneName;\n gg.type = 'gene';\n featureOpts.groups.push(gg);\n }\n\n var spanList = [];\n for (var b = 0; b < blockCount; ++b) {\n var bmin = (blockStarts[b]|0) + start;\n var bmax = bmin + (blockSizes[b]|0);\n var span = new Range(bmin, bmax);\n spanList.push(span);\n }\n var spans = union(spanList);\n\n var tsList = spans.ranges();\n for (var s = 0; s < tsList.length; ++s) {\n var ts = tsList[s];\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n\n if (thickEnd > thickStart) {\n var codingRegion = (featureOpts.orientation == '+') ?\n new Range(thickStart, thickEnd + 3) :\n new Range(thickStart - 3, thickEnd);\n // +/- 3 to account for stop codon\n\n var tl = intersection(spans, codingRegion);\n if (tl) {\n featureOpts.type = 'translation';\n var tlList = tl.ranges();\n var readingFrame = 0;\n\n var tlOffset = 0;\n while (tlList[0].min() > tsList[tlOffset].max())\n tlOffset++;\n\n for (var s = 0; s < tlList.length; ++s) {\n // Record reading frame for every exon\n var index = s;\n if (featureOpts.orientation == '-')\n index = tlList.length - s - 1;\n var ts = tlList[index];\n featureOpts.readframe = readingFrame;\n if (exonFrames) {\n var brf = parseInt(exonFrames[index + tlOffset]);\n if (typeof(brf) === 'number' && brf >= 0 && brf <= 2) {\n featureOpts.readframe = brf;\n featureOpts.readframeExplicit = true;\n }\n }\n var length = ts.max() - ts.min();\n readingFrame = (readingFrame + length) % 3;\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n }\n }\n }\n }\n }\n } else {\n throw Error(\"Don't know what to do with \" + this.bwg.type);\n }\n }\n\n //\n // nasty cut/paste, should roll back in!\n //\n\n BigWigView.prototype.getFirstAdjacent = function(chrName, pos, dir, callback) {\n var chr = this.bwg.chromsToIDs[chrName];\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n return callback([]);\n } else {\n this.getFirstAdjacentById(chr, pos, dir, callback);\n }\n }\n\n BigWigView.prototype.getFirstAdjacentById = function(chr, pos, dir, callback) {\n var thisB = this;\n if (!this.cirHeader) {\n this.bwg.data.slice(this.cirTreeOffset, 48).fetch(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n thisB.getFirstAdjacentById(chr, pos, dir, callback);\n });\n return;\n }\n\n var blockToFetch = null;\n var bestBlockChr = -1;\n var bestBlockOffset = -1;\n\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var cirFobRecur = function(offset, level) {\n outstanding += offset.length;\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n }\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n thisB.bwg.data.slice(fr.min(), fr.max() - fr.min()).fetch(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n --outstanding;\n if (outstanding == 0) {\n if (!blockToFetch) {\n if (dir > 0 && (chr != 0 || pos > 0)) {\n return thisB.getFirstAdjacentById(0, 0, dir, callback);\n } else if (dir < 0 && (chr != thisB.bwg.maxID || pos < 1000000000)) {\n return thisB.getFirstAdjacentById(thisB.bwg.maxID, 1000000000, dir, callback);\n }\n return callback([]);\n }\n\n thisB.fetchFeatures(function(chrx, fmin, fmax, toks) {\n return (dir < 0 && (chrx < chr || fmax < pos)) || (dir > 0 && (chrx > chr || fmin > pos));\n }, [blockToFetch], function(features) {\n var bestFeature = null;\n var bestChr = -1;\n var bestPos = -1;\n for (var fi = 0; fi < features.length; ++fi) {\n var f = features[fi];\n var chrx = f._chromId, fmin = f.min, fmax = f.max;\n if (bestFeature == null || ((dir < 0) && (chrx > bestChr || fmax > bestPos)) || ((dir > 0) && (chrx < bestChr || fmin < bestPos))) {\n bestFeature = f;\n bestPos = (dir < 0) ? fmax : fmin;\n bestChr = chrx;\n }\n }\n\n if (bestFeature != null)\n return callback([bestFeature]);\n else\n return callback([]);\n });\n }\n }\n }\n });\n }\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf != 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)))))\n {\n // console.log('Got an interesting block: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n if (/_random/.exec(thisB.bwg.idsToChroms[startChrom])) {\n // dlog('skipping random: ' + thisB.bwg.idsToChroms[startChrom]);\n } else if (blockToFetch == null || ((dir < 0) && (endChrom > bestBlockChr || (endChrom == bestBlockChr && endBase > bestBlockOffset)) ||\n (dir > 0) && (startChrom < bestBlockChr || (startChrom == bestBlockChr && startBase < bestBlockOffset))))\n {\n // dlog('best is: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n blockToFetch = {offset: blockOffset, size: blockSize};\n bestBlockOffset = (dir < 0) ? endBase : startBase;\n bestBlockChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 32;\n }\n } else {\n var bestRecur = -1;\n var bestPos = -1;\n var bestChr = -1;\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = (la[lo + 4]<<32) | (la[lo + 5]);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)) &&\n (endChrom >= chr))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)) &&\n (startChrom <= chr))))\n {\n if (bestRecur < 0 || endBase > bestPos) {\n bestRecur = blockOffset;\n bestPos = (dir < 0) ? endBase : startBase;\n bestChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 24;\n }\n if (bestRecur >= 0) {\n cirFobRecur([bestRecur], level + 1);\n }\n }\n };\n\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n }\n\n /**\n * Automatically choose a zoom level and return data from that level.\n */\n BigWig.prototype.readWigData = function(chrName, min, max) {\n // Maximum number of data points to return when reading a bigwig. This is used\n // to choose the appropriate level. One data point ~= 25-65 bytes.\n // FIXME: For targeted sequencing, data points returned is going to be much lower,\n // so this will need to be tuned appropriately.\n var MAX_DATA_POINTS = 25000;\n\n var range = max - min,\n view;\n // If no zooming needed or available (common in bigbed), use unzoomed view.\n if (range <= MAX_DATA_POINTS || this.zoomLevels.length === 0) {\n view = this.getUnzoomedView();\n }\n else {\n // Find reasonable zoom level. Reduction is the # of bases represented\n // by each data point at that level.\n for (var i = 0; i < this.zoomLevels.length; i++) {\n if (range/this.zoomLevels[i].reduction < MAX_DATA_POINTS) {\n view = this.getZoomedView(i);\n break;\n }\n }\n }\n\n return view.readWigData(chrName, min, max);\n }\n\n BigWig.prototype.getUnzoomedView = function() {\n if (!this.unzoomedView) {\n var cirLen = 4000;\n var nzl = this.zoomLevels[0];\n if (nzl) {\n cirLen = this.zoomLevels[0].dataOffset - this.unzoomedIndexOffset;\n }\n this.unzoomedView = new BigWigView(this, this.unzoomedIndexOffset, cirLen, false);\n }\n return this.unzoomedView;\n }\n\n BigWig.prototype.getZoomedView = function(z) {\n var zh = this.zoomLevels[z];\n if (!zh.view) {\n zh.view = new BigWigView(this, zh.indexOffset, /* this.zoomLevels[z + 1].dataOffset - zh.indexOffset */ 4000, true);\n }\n return zh.view;\n }\n\n /**\n * Create a BigWig object using a URL to a bigwig/bigbed file. Returns a promise\n * that resolves to the object when it's available.\n */\n function makeBwg(url) {\n var promise = $.Deferred(),\n bwg = new BigWig();\n bwg.url = url;\n\n // Read and parse bigwig header, including chrom tree.\n $.when(read(bwg.url, 0, 512)).then(function(result) {\n if (!result) {\n return promise.resolve(null, \"Couldn't fetch file\");\n }\n\n var header = result;\n var ba = new Uint8Array(header);\n var sa = new Int16Array(header);\n var la = new Int32Array(header);\n var magic = ba[0] + (M1 * ba[1]) + (M2 * ba[2]) + (M3 * ba[3]);\n if (magic == BIG_WIG_MAGIC) {\n bwg.type = 'bigwig';\n } else if (magic == BIG_BED_MAGIC) {\n bwg.type = 'bigbed';\n } else if (magic == BIG_WIG_MAGIC_BE || magic == BIG_BED_MAGIC_BE) {\n return promise.resolve(null, \"Currently don't support big-endian BBI files\");\n\n } else {\n return promise.resolve(null, \"Not a supported format, magic=0x\" + magic.toString(16));\n\n }\n\n bwg.version = sa[2]; // 4\n bwg.numZoomLevels = sa[3]; // 6\n bwg.chromTreeOffset = bwg_readOffset(ba, 8);\n bwg.unzoomedDataOffset = bwg_readOffset(ba, 16);\n bwg.unzoomedIndexOffset = bwg_readOffset(ba, 24);\n bwg.fieldCount = sa[16]; // 32\n bwg.definedFieldCount = sa[17]; // 34\n bwg.asOffset = bwg_readOffset(ba, 36);\n bwg.totalSummaryOffset = bwg_readOffset(ba, 44);\n bwg.uncompressBufSize = la[13]; // 52\n bwg.extHeaderOffset = bwg_readOffset(ba, 56);\n\n bwg.zoomLevels = [];\n for (var zl = 0; zl < bwg.numZoomLevels; ++zl) {\n var zlReduction = la[zl*6 + 16]\n var zlData = bwg_readOffset(ba, zl*24 + 72);\n var zlIndex = bwg_readOffset(ba, zl*24 + 80);\n bwg.zoomLevels.push({reduction: zlReduction, dataOffset: zlData, indexOffset: zlIndex});\n }\n\n $.when(bwg.readChromTree()).then(function() {\n bwg.getAutoSQL(function(as) {\n bwg.schema = as;\n return promise.resolve(bwg);\n });\n });\n });\n\n return promise;\n }\n\n\n BigWig.prototype._tsFetch = function(zoom, chr, min, max, callback) {\n var bwg = this;\n if (zoom >= this.zoomLevels.length - 1) {\n if (!this.topLevelReductionCache) {\n this.getZoomedView(this.zoomLevels.length - 1).readWigDataById(-1, 0, 300000000, function(feats) {\n bwg.topLevelReductionCache = feats;\n return bwg._tsFetch(zoom, chr, min, max, callback);\n });\n } else {\n var f = [];\n var c = this.topLevelReductionCache;\n for (var fi = 0; fi < c.length; ++fi) {\n if (c[fi]._chromId == chr) {\n f.push(c[fi]);\n }\n }\n return callback(f);\n }\n } else {\n var view;\n if (zoom < 0) {\n view = this.getUnzoomedView();\n } else {\n view = this.getZoomedView(zoom);\n }\n return view.readWigDataById(chr, min, max, callback);\n }\n }\n\n BigWig.prototype.thresholdSearch = function(chrName, referencePoint, dir, threshold, callback) {\n dir = (dir<0) ? -1 : 1;\n var bwg = this;\n var initialChr = this.chromsToIDs[chrName];\n var candidates = [{chrOrd: 0, chr: initialChr, zoom: bwg.zoomLevels.length - 4, min: 0, max: 300000000, fromRef: true}]\n for (var i = 1; i <= this.maxID + 1; ++i) {\n var chrId = (initialChr + (dir*i)) % (this.maxID + 1);\n if (chrId < 0)\n chrId += (this.maxID + 1);\n candidates.push({chrOrd: i, chr: chrId, zoom: bwg.zoomLevels.length - 1, min: 0, max: 300000000})\n }\n\n function fbThresholdSearchRecur() {\n if (candidates.length == 0) {\n return callback(null);\n }\n candidates.sort(function(c1, c2) {\n var d = c1.zoom - c2.zoom;\n if (d != 0)\n return d;\n\n d = c1.chrOrd - c2.chrOrd;\n if (d != 0)\n return d;\n else\n return c1.min - c2.min * dir;\n });\n\n var candidate = candidates.splice(0, 1)[0];\n bwg._tsFetch(candidate.zoom, candidate.chr, candidate.min, candidate.max, function(feats) {\n var rp = dir > 0 ? 0 : 300000000;\n if (candidate.fromRef)\n rp = referencePoint;\n\n for (var fi = 0; fi < feats.length; ++fi) {\n var f = feats[fi];\n var score;\n if (f.maxScore != undefined)\n score = f.maxScore;\n else\n score = f.score;\n\n if (dir > 0) {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.min > rp)\n return callback(f);\n } else if (f.max > rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n } else {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.max < rp)\n return callback(f);\n } else if (f.min < rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n }\n }\n fbThresholdSearchRecur();\n });\n }\n\n fbThresholdSearchRecur();\n }\n\n BigWig.prototype.getAutoSQL = function(callback) {\n var thisB = this;\n if (!this.asOffset)\n return callback(null);\n\n $.when(read(this.url, this.asOffset, 2048)).then(function(result) {\n var ba = new Uint8Array(result);\n var s = '';\n for (var i = 0; i < ba.length; ++i) {\n if (ba[i] == 0)\n break;\n s += String.fromCharCode(ba[i]);\n }\n\n /*\n * Quick'n'dirty attempt to parse autoSql format.\n * See: http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/059/5949/5949l2.html\n */\n\n var header_re = /(\\w+)\\s+(\\w+)\\s+(\"([^\"]+)\")?\\s+\\(\\s*/;\n var field_re = /([\\w\\[\\]]+)\\s+(\\w+)\\s*;\\s*(\"([^\"]+)\")?\\s*/g;\n\n var headerMatch = header_re.exec(s);\n if (headerMatch) {\n var as = {\n declType: headerMatch[1],\n name: headerMatch[2],\n comment: headerMatch[4],\n\n fields: []\n };\n\n s = s.substring(headerMatch[0]);\n for (var m = field_re.exec(s); m != null; m = field_re.exec(s)) {\n as.fields.push({type: m[1],\n name: m[2],\n comment: m[4]});\n }\n\n return callback(as);\n }\n });\n };\n\n BigWig.prototype.getExtraIndices = function(callback) {\n var thisB = this;\n if (this.version < 4 || this.extHeaderOffset == 0 || this.type != 'bigbed') {\n return callback(null);\n } else {\n this.data.slice(this.extHeaderOffset, 64).fetch(function(result) {\n if (!result) {\n return callback(null, \"Couldn't fetch extension header\");\n }\n\n var ba = new Uint8Array(result);\n var sa = new Int16Array(result);\n var la = new Int32Array(result);\n\n var extHeaderSize = sa[0];\n var extraIndexCount = sa[1];\n var extraIndexListOffset = bwg_readOffset(ba, 4);\n\n if (extraIndexCount == 0) {\n return callback(null);\n }\n\n // FIXME 20byte records only make sense for single-field indices.\n // Right now, these seem to be the only things around, but the format\n // is actually more general.\n thisB.data.slice(extraIndexListOffset, extraIndexCount * 20).fetch(function(eil) {\n if (!eil) {\n return callback(null, \"Couldn't fetch index info\");\n }\n\n var ba = new Uint8Array(eil);\n var sa = new Int16Array(eil);\n var la = new Int32Array(eil);\n\n var indices = [];\n for (var ii = 0; ii < extraIndexCount; ++ii) {\n var eiType = sa[ii*10];\n var eiFieldCount = sa[ii*10 + 1];\n var eiOffset = bwg_readOffset(ba, ii*20 + 4);\n var eiField = sa[ii*10 + 8]\n var index = new BBIExtraIndex(thisB, eiType, eiFieldCount, eiOffset, eiField);\n indices.push(index);\n }\n callback(indices);\n });\n });\n }\n }\n\n function BBIExtraIndex(bbi, type, fieldCount, offset, field) {\n this.bbi = bbi;\n this.type = type;\n this.fieldCount = fieldCount;\n this.offset = offset;\n this.field = field;\n }\n\n BBIExtraIndex.prototype.lookup = function(name, callback) {\n var thisB = this;\n\n this.bbi.data.slice(this.offset, 32).fetch(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n function bptReadNode(nodeOffset) {\n thisB.bbi.data.slice(nodeOffset, 4 + (blockSize * (keySize + valSize))).fetch(function(node) {\n var ba = new Uint8Array(node);\n var sa = new Uint16Array(node);\n var la = new Uint32Array(node);\n\n var nodeType = ba[0];\n var cnt = sa[1];\n\n var offset = 4;\n if (nodeType == 0) {\n var lastChildOffset = null;\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n\n if (name.localeCompare(key) < 0 && lastChildOffset) {\n bptReadNode(lastChildOffset);\n return;\n }\n lastChildOffset = childOffset;\n }\n bptReadNode(lastChildOffset);\n } else {\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n // Specific for EI case.\n if (key == name) {\n var start = bwg_readOffset(ba, offset);\n var length = readInt(ba, offset + 8);\n\n return thisB.bbi.getUnzoomedView().fetchFeatures(\n function(chr, min, max, toks) {\n if (toks && toks.length > thisB.field - 3)\n return toks[thisB.field - 3] == name;\n },\n [{offset: start, size: length}],\n callback);\n }\n offset += valSize;\n }\n return callback([]);\n }\n });\n }\n\n bptReadNode(thisB.offset + rootNodeOffset);\n });\n }\n\n return {\n makeBwg: makeBwg\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/bigwig.js\n// module id = 132\n// module chunks = 3","/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// spans.js: JavaScript Intset/Location port.\n//\n\ndefine([], function() {\n\n\"use strict\";\n\n\nfunction Range(min, max)\n{\n if (typeof(min) != 'number' || typeof(max) != 'number')\n throw 'Bad range ' + min + ',' + max;\n this._min = min;\n this._max = max;\n}\n\nRange.prototype.min = function() {\n return this._min;\n}\n\nRange.prototype.max = function() {\n return this._max;\n}\n\nRange.prototype.contains = function(pos) {\n return pos >= this._min && pos <= this._max;\n}\n\nRange.prototype.isContiguous = function() {\n return true;\n}\n\nRange.prototype.ranges = function() {\n return [this];\n}\n\nRange.prototype._pushRanges = function(ranges) {\n ranges.push(this);\n}\n\nRange.prototype.toString = function() {\n return '[' + this._min + '-' + this._max + ']';\n}\n\nfunction _Compound(ranges) {\n // given: a set of unsorted possibly overlapping ranges\n // sort the input ranges\n var sorted = ranges.sort(_rangeOrder);\n // merge overlaps between adjacent ranges\n var merged = [];\n var current = sorted.shift();\n sorted.forEach(function(range) {\n if (range._min <= current._max) {\n if (range._max > current._max) {\n current._max = range._max;\n }\n }\n else {\n merged.push(current);\n current = range;\n }\n });\n merged.push(current);\n this._ranges = merged;\n}\n\n_Compound.prototype.min = function() {\n return this._ranges[0].min();\n}\n\n_Compound.prototype.max = function() {\n return this._ranges[this._ranges.length - 1].max();\n}\n\n// returns the index of the first range that is not less than pos\n_Compound.prototype.lower_bound = function(pos) {\n // first check if pos is out of range\n var r = this.ranges();\n if (pos > this.max()) return r.length;\n if (pos < this.min()) return 0;\n // do a binary search\n var a=0, b=r.length - 1;\n while (a <= b) {\n var m = Math.floor((a+b)/2);\n if (pos > r[m]._max) {\n a = m+1;\n }\n else if (pos < r[m]._min) {\n b = m-1;\n }\n else {\n return m;\n }\n }\n return a;\n}\n\n_Compound.prototype.contains = function(pos) {\n var lb = this.lower_bound(pos);\n if (lb < this._ranges.length && this._ranges[lb].contains(pos)) {\n return true;\n }\n return false;\n}\n\n_Compound.prototype.insertRange = function(range) {\n var lb = this.lower_bound(range._min);\n if (lb === this._ranges.length) { // range follows this\n this._ranges.push(range);\n return;\n }\n\n var r = this.ranges();\n if (range._max < r[lb]._min) { // range preceeds lb\n this._ranges.splice(lb,0,range);\n return;\n }\n\n // range overlaps lb (at least)\n if (r[lb]._min < range._min) range._min = r[lb]._min;\n var ub = lb+1;\n while (ub < r.length && r[ub]._min <= range._max) {\n ub++;\n }\n ub--;\n // ub is the upper bound of the new range\n if (r[ub]._max > range._max) range._max = r[ub]._max;\n\n // splice range into this._ranges\n this._ranges.splice(lb,ub-lb+1,range);\n return;\n}\n\n_Compound.prototype.isContiguous = function() {\n return this._ranges.length > 1;\n}\n\n_Compound.prototype.ranges = function() {\n return this._ranges;\n}\n\n_Compound.prototype._pushRanges = function(ranges) {\n for (var ri = 0; ri < this._ranges.length; ++ri)\n ranges.push(this._ranges[ri]);\n}\n\n_Compound.prototype.toString = function() {\n var s = '';\n for (var r = 0; r < this._ranges.length; ++r) {\n if (r>0) {\n s = s + ',';\n }\n s = s + this._ranges[r].toString();\n }\n return s;\n}\n\nfunction union(s0, s1) {\n if (! (s0 instanceof _Compound)) {\n if (! (s0 instanceof Array))\n s0 = [s0];\n s0 = new _Compound(s0);\n }\n\n if (s1)\n s0.insertRange(s1);\n\n return s0;\n}\n\nfunction intersection(s0, s1) {\n var r0 = s0.ranges();\n var r1 = s1.ranges();\n var l0 = r0.length, l1 = r1.length;\n var i0 = 0, i1 = 0;\n var or = [];\n\n while (i0 < l0 && i1 < l1) {\n var s0 = r0[i0], s1 = r1[i1];\n var lapMin = Math.max(s0.min(), s1.min());\n var lapMax = Math.min(s0.max(), s1.max());\n if (lapMax >= lapMin) {\n or.push(new Range(lapMin, lapMax));\n }\n if (s0.max() > s1.max()) {\n ++i1;\n } else {\n ++i0;\n }\n }\n\n if (or.length == 0) {\n return null; // FIXME\n } else if (or.length == 1) {\n return or[0];\n } else {\n return new _Compound(or);\n }\n}\n\nfunction coverage(s) {\n var tot = 0;\n var rl = s.ranges();\n for (var ri = 0; ri < rl.length; ++ri) {\n var r = rl[ri];\n tot += (r.max() - r.min() + 1);\n }\n return tot;\n}\n\n\n\nfunction rangeOrder(a, b)\n{\n if (a.min() < b.min()) {\n return -1;\n } else if (a.min() > b.min()) {\n return 1;\n } else if (a.max() < b.max()) {\n return -1;\n } else if (b.max() > a.max()) {\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction _rangeOrder(a, b)\n{\n if (a._min < b._min) {\n return -1;\n } else if (a._min > b._min) {\n return 1;\n } else if (a._max < b._max) {\n return -1;\n } else if (b._max > a._max) {\n return 1;\n } else {\n return 0;\n }\n}\n\nreturn {\n Range: Range,\n union: union,\n intersection: intersection,\n coverage: coverage,\n rangeOver: rangeOrder,\n _rangeOrder: _rangeOrder\n};\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/spans.js\n// module id = 133\n// module chunks = 3","/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Javascript ZLib\n// By Thomas Down 2010-2011\n//\n// Based very heavily on portions of jzlib (by ymnk@jcraft.com), who in\n// turn credits Jean-loup Gailly and Mark Adler for the original zlib code.\n//\n// inflate.js: ZLib inflate code\n//\n\n//\n// Shared constants\n//\n\ndefine([],function() {\n\nvar MAX_WBITS=15; // 32K LZ77 window\nvar DEF_WBITS=MAX_WBITS;\nvar MAX_MEM_LEVEL=9;\nvar MANY=1440;\nvar BMAX = 15;\n\n// preset dictionary flag in zlib header\nvar PRESET_DICT=0x20;\n\nvar Z_NO_FLUSH=0;\nvar Z_PARTIAL_FLUSH=1;\nvar Z_SYNC_FLUSH=2;\nvar Z_FULL_FLUSH=3;\nvar Z_FINISH=4;\n\nvar Z_DEFLATED=8;\n\nvar Z_OK=0;\nvar Z_STREAM_END=1;\nvar Z_NEED_DICT=2;\nvar Z_ERRNO=-1;\nvar Z_STREAM_ERROR=-2;\nvar Z_DATA_ERROR=-3;\nvar Z_MEM_ERROR=-4;\nvar Z_BUF_ERROR=-5;\nvar Z_VERSION_ERROR=-6;\n\nvar METHOD=0; // waiting for method byte\nvar FLAG=1; // waiting for flag byte\nvar DICT4=2; // four dictionary check bytes to go\nvar DICT3=3; // three dictionary check bytes to go\nvar DICT2=4; // two dictionary check bytes to go\nvar DICT1=5; // one dictionary check byte to go\nvar DICT0=6; // waiting for inflateSetDictionary\nvar BLOCKS=7; // decompressing blocks\nvar CHECK4=8; // four check bytes to go\nvar CHECK3=9; // three check bytes to go\nvar CHECK2=10; // two check bytes to go\nvar CHECK1=11; // one check byte to go\nvar DONE=12; // finished check, done\nvar BAD=13; // got an error--stay here\n\nvar inflate_mask = [0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff];\n\nvar IB_TYPE=0; // get type bits (3, including end bit)\nvar IB_LENS=1; // get lengths for stored\nvar IB_STORED=2;// processing stored block\nvar IB_TABLE=3; // get table lengths\nvar IB_BTREE=4; // get bit lengths tree for a dynamic block\nvar IB_DTREE=5; // get length, distance trees for a dynamic block\nvar IB_CODES=6; // processing fixed or dynamic block\nvar IB_DRY=7; // output remaining window bytes\nvar IB_DONE=8; // finished last block, done\nvar IB_BAD=9; // ot a data error--stuck here\n\nvar fixed_bl = 9;\nvar fixed_bd = 5;\n\nvar fixed_tl = [\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,192,\n 80,7,10, 0,8,96, 0,8,32, 0,9,160,\n 0,8,0, 0,8,128, 0,8,64, 0,9,224,\n 80,7,6, 0,8,88, 0,8,24, 0,9,144,\n 83,7,59, 0,8,120, 0,8,56, 0,9,208,\n 81,7,17, 0,8,104, 0,8,40, 0,9,176,\n 0,8,8, 0,8,136, 0,8,72, 0,9,240,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,200,\n 81,7,13, 0,8,100, 0,8,36, 0,9,168,\n 0,8,4, 0,8,132, 0,8,68, 0,9,232,\n 80,7,8, 0,8,92, 0,8,28, 0,9,152,\n 84,7,83, 0,8,124, 0,8,60, 0,9,216,\n 82,7,23, 0,8,108, 0,8,44, 0,9,184,\n 0,8,12, 0,8,140, 0,8,76, 0,9,248,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,196,\n 81,7,11, 0,8,98, 0,8,34, 0,9,164,\n 0,8,2, 0,8,130, 0,8,66, 0,9,228,\n 80,7,7, 0,8,90, 0,8,26, 0,9,148,\n 84,7,67, 0,8,122, 0,8,58, 0,9,212,\n 82,7,19, 0,8,106, 0,8,42, 0,9,180,\n 0,8,10, 0,8,138, 0,8,74, 0,9,244,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,204,\n 81,7,15, 0,8,102, 0,8,38, 0,9,172,\n 0,8,6, 0,8,134, 0,8,70, 0,9,236,\n 80,7,9, 0,8,94, 0,8,30, 0,9,156,\n 84,7,99, 0,8,126, 0,8,62, 0,9,220,\n 82,7,27, 0,8,110, 0,8,46, 0,9,188,\n 0,8,14, 0,8,142, 0,8,78, 0,9,252,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,194,\n 80,7,10, 0,8,97, 0,8,33, 0,9,162,\n 0,8,1, 0,8,129, 0,8,65, 0,9,226,\n 80,7,6, 0,8,89, 0,8,25, 0,9,146,\n 83,7,59, 0,8,121, 0,8,57, 0,9,210,\n 81,7,17, 0,8,105, 0,8,41, 0,9,178,\n 0,8,9, 0,8,137, 0,8,73, 0,9,242,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,202,\n 81,7,13, 0,8,101, 0,8,37, 0,9,170,\n 0,8,5, 0,8,133, 0,8,69, 0,9,234,\n 80,7,8, 0,8,93, 0,8,29, 0,9,154,\n 84,7,83, 0,8,125, 0,8,61, 0,9,218,\n 82,7,23, 0,8,109, 0,8,45, 0,9,186,\n 0,8,13, 0,8,141, 0,8,77, 0,9,250,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,198,\n 81,7,11, 0,8,99, 0,8,35, 0,9,166,\n 0,8,3, 0,8,131, 0,8,67, 0,9,230,\n 80,7,7, 0,8,91, 0,8,27, 0,9,150,\n 84,7,67, 0,8,123, 0,8,59, 0,9,214,\n 82,7,19, 0,8,107, 0,8,43, 0,9,182,\n 0,8,11, 0,8,139, 0,8,75, 0,9,246,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,206,\n 81,7,15, 0,8,103, 0,8,39, 0,9,174,\n 0,8,7, 0,8,135, 0,8,71, 0,9,238,\n 80,7,9, 0,8,95, 0,8,31, 0,9,158,\n 84,7,99, 0,8,127, 0,8,63, 0,9,222,\n 82,7,27, 0,8,111, 0,8,47, 0,9,190,\n 0,8,15, 0,8,143, 0,8,79, 0,9,254,\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,193,\n\n 80,7,10, 0,8,96, 0,8,32, 0,9,161,\n 0,8,0, 0,8,128, 0,8,64, 0,9,225,\n 80,7,6, 0,8,88, 0,8,24, 0,9,145,\n 83,7,59, 0,8,120, 0,8,56, 0,9,209,\n 81,7,17, 0,8,104, 0,8,40, 0,9,177,\n 0,8,8, 0,8,136, 0,8,72, 0,9,241,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,201,\n 81,7,13, 0,8,100, 0,8,36, 0,9,169,\n 0,8,4, 0,8,132, 0,8,68, 0,9,233,\n 80,7,8, 0,8,92, 0,8,28, 0,9,153,\n 84,7,83, 0,8,124, 0,8,60, 0,9,217,\n 82,7,23, 0,8,108, 0,8,44, 0,9,185,\n 0,8,12, 0,8,140, 0,8,76, 0,9,249,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,197,\n 81,7,11, 0,8,98, 0,8,34, 0,9,165,\n 0,8,2, 0,8,130, 0,8,66, 0,9,229,\n 80,7,7, 0,8,90, 0,8,26, 0,9,149,\n 84,7,67, 0,8,122, 0,8,58, 0,9,213,\n 82,7,19, 0,8,106, 0,8,42, 0,9,181,\n 0,8,10, 0,8,138, 0,8,74, 0,9,245,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,205,\n 81,7,15, 0,8,102, 0,8,38, 0,9,173,\n 0,8,6, 0,8,134, 0,8,70, 0,9,237,\n 80,7,9, 0,8,94, 0,8,30, 0,9,157,\n 84,7,99, 0,8,126, 0,8,62, 0,9,221,\n 82,7,27, 0,8,110, 0,8,46, 0,9,189,\n 0,8,14, 0,8,142, 0,8,78, 0,9,253,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,195,\n 80,7,10, 0,8,97, 0,8,33, 0,9,163,\n 0,8,1, 0,8,129, 0,8,65, 0,9,227,\n 80,7,6, 0,8,89, 0,8,25, 0,9,147,\n 83,7,59, 0,8,121, 0,8,57, 0,9,211,\n 81,7,17, 0,8,105, 0,8,41, 0,9,179,\n 0,8,9, 0,8,137, 0,8,73, 0,9,243,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,203,\n 81,7,13, 0,8,101, 0,8,37, 0,9,171,\n 0,8,5, 0,8,133, 0,8,69, 0,9,235,\n 80,7,8, 0,8,93, 0,8,29, 0,9,155,\n 84,7,83, 0,8,125, 0,8,61, 0,9,219,\n 82,7,23, 0,8,109, 0,8,45, 0,9,187,\n 0,8,13, 0,8,141, 0,8,77, 0,9,251,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,199,\n 81,7,11, 0,8,99, 0,8,35, 0,9,167,\n 0,8,3, 0,8,131, 0,8,67, 0,9,231,\n 80,7,7, 0,8,91, 0,8,27, 0,9,151,\n 84,7,67, 0,8,123, 0,8,59, 0,9,215,\n 82,7,19, 0,8,107, 0,8,43, 0,9,183,\n 0,8,11, 0,8,139, 0,8,75, 0,9,247,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,207,\n 81,7,15, 0,8,103, 0,8,39, 0,9,175,\n 0,8,7, 0,8,135, 0,8,71, 0,9,239,\n 80,7,9, 0,8,95, 0,8,31, 0,9,159,\n 84,7,99, 0,8,127, 0,8,63, 0,9,223,\n 82,7,27, 0,8,111, 0,8,47, 0,9,191,\n 0,8,15, 0,8,143, 0,8,79, 0,9,255\n];\nvar fixed_td = [\n 80,5,1, 87,5,257, 83,5,17, 91,5,4097,\n 81,5,5, 89,5,1025, 85,5,65, 93,5,16385,\n 80,5,3, 88,5,513, 84,5,33, 92,5,8193,\n 82,5,9, 90,5,2049, 86,5,129, 192,5,24577,\n 80,5,2, 87,5,385, 83,5,25, 91,5,6145,\n 81,5,7, 89,5,1537, 85,5,97, 93,5,24577,\n 80,5,4, 88,5,769, 84,5,49, 92,5,12289,\n 82,5,13, 90,5,3073, 86,5,193, 192,5,24577\n];\n\n // Tables for deflate from PKZIP's appnote.txt.\n var cplens = [ // Copy lengths for literal codes 257..285\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n ];\n\n // see note #13 above about 258\n var cplext = [ // Extra bits for literal codes 257..285\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid\n ];\n\n var cpdist = [ // Copy offsets for distance codes 0..29\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577\n ];\n\n var cpdext = [ // Extra bits for distance codes\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13];\n\n//\n// ZStream.java\n//\n\nfunction ZStream() {\n}\n\n\nZStream.prototype.inflateInit = function(w, nowrap) {\n if (!w) {\n\tw = DEF_WBITS;\n }\n if (nowrap) {\n\tnowrap = false;\n }\n this.istate = new Inflate();\n return this.istate.inflateInit(this, nowrap?-w:w);\n}\n\nZStream.prototype.inflate = function(f) {\n if(this.istate==null) return Z_STREAM_ERROR;\n return this.istate.inflate(this, f);\n}\n\nZStream.prototype.inflateEnd = function(){\n if(this.istate==null) return Z_STREAM_ERROR;\n var ret=istate.inflateEnd(this);\n this.istate = null;\n return ret;\n}\nZStream.prototype.inflateSync = function(){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSync(this);\n}\nZStream.prototype.inflateSetDictionary = function(dictionary, dictLength){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSetDictionary(this, dictionary, dictLength);\n}\n\n/*\n\n public int deflateInit(int level){\n return deflateInit(level, MAX_WBITS);\n }\n public int deflateInit(int level, boolean nowrap){\n return deflateInit(level, MAX_WBITS, nowrap);\n }\n public int deflateInit(int level, int bits){\n return deflateInit(level, bits, false);\n }\n public int deflateInit(int level, int bits, boolean nowrap){\n dstate=new Deflate();\n return dstate.deflateInit(this, level, nowrap?-bits:bits);\n }\n public int deflate(int flush){\n if(dstate==null){\n return Z_STREAM_ERROR;\n }\n return dstate.deflate(this, flush);\n }\n public int deflateEnd(){\n if(dstate==null) return Z_STREAM_ERROR;\n int ret=dstate.deflateEnd();\n dstate=null;\n return ret;\n }\n public int deflateParams(int level, int strategy){\n if(dstate==null) return Z_STREAM_ERROR;\n return dstate.deflateParams(this, level, strategy);\n }\n public int deflateSetDictionary (byte[] dictionary, int dictLength){\n if(dstate == null)\n return Z_STREAM_ERROR;\n return dstate.deflateSetDictionary(this, dictionary, dictLength);\n }\n\n*/\n\n/*\n // Flush as much pending output as possible. All deflate() output goes\n // through this function so some applications may wish to modify it\n // to avoid allocating a large strm->next_out buffer and copying into it.\n // (See also read_buf()).\n void flush_pending(){\n int len=dstate.pending;\n\n if(len>avail_out) len=avail_out;\n if(len==0) return;\n\n if(dstate.pending_buf.length<=dstate.pending_out ||\n next_out.length<=next_out_index ||\n dstate.pending_buf.length<(dstate.pending_out+len) ||\n next_out.length<(next_out_index+len)){\n System.out.println(dstate.pending_buf.length+\", \"+dstate.pending_out+\n\t\t\t \", \"+next_out.length+\", \"+next_out_index+\", \"+len);\n System.out.println(\"avail_out=\"+avail_out);\n }\n\n System.arraycopy(dstate.pending_buf, dstate.pending_out,\n\t\t next_out, next_out_index, len);\n\n next_out_index+=len;\n dstate.pending_out+=len;\n total_out+=len;\n avail_out-=len;\n dstate.pending-=len;\n if(dstate.pending==0){\n dstate.pending_out=0;\n }\n }\n\n // Read a new buffer from the current input stream, update the adler32\n // and total number of bytes read. All deflate() input goes through\n // this function so some applications may wish to modify it to avoid\n // allocating a large strm->next_in buffer and copying from it.\n // (See also flush_pending()).\n int read_buf(byte[] buf, int start, int size) {\n int len=avail_in;\n\n if(len>size) len=size;\n if(len==0) return 0;\n\n avail_in-=len;\n\n if(dstate.noheader==0) {\n adler=_adler.adler32(adler, next_in, next_in_index, len);\n }\n System.arraycopy(next_in, next_in_index, buf, start, len);\n next_in_index += len;\n total_in += len;\n return len;\n }\n\n public void free(){\n next_in=null;\n next_out=null;\n msg=null;\n _adler=null;\n }\n}\n*/\n\n\n//\n// Inflate.java\n//\n\nfunction Inflate() {\n this.was = [0];\n}\n\nInflate.prototype.inflateReset = function(z) {\n if(z == null || z.istate == null) return Z_STREAM_ERROR;\n\n z.total_in = z.total_out = 0;\n z.msg = null;\n z.istate.mode = z.istate.nowrap!=0 ? BLOCKS : METHOD;\n z.istate.blocks.reset(z, null);\n return Z_OK;\n}\n\nInflate.prototype.inflateEnd = function(z){\n if(this.blocks != null)\n this.blocks.free(z);\n this.blocks=null;\n return Z_OK;\n}\n\nInflate.prototype.inflateInit = function(z, w){\n z.msg = null;\n this.blocks = null;\n\n // handle undocumented nowrap option (no zlib header or check)\n nowrap = 0;\n if(w < 0){\n w = - w;\n nowrap = 1;\n }\n\n // set window size\n if(w<8 ||w>15){\n this.inflateEnd(z);\n return Z_STREAM_ERROR;\n }\n this.wbits=w;\n\n z.istate.blocks=new InfBlocks(z,\n\t\t\t\t z.istate.nowrap!=0 ? null : this,\n\t\t\t\t 1<>4)+8>z.istate.wbits){\n z.istate.mode = BAD;\n z.msg=\"invalid window size\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n z.istate.mode=FLAG;\n case FLAG:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n b = (z.next_in[z.next_in_index++])&0xff;\n\n if((((z.istate.method << 8)+b) % 31)!=0){\n z.istate.mode = BAD;\n z.msg = \"incorrect header check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n if((b&PRESET_DICT)==0){\n z.istate.mode = BLOCKS;\n break;\n }\n z.istate.mode = DICT4;\n case DICT4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=DICT3;\n case DICT3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode=DICT2;\n case DICT2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode=DICT1;\n case DICT1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need += (z.next_in[z.next_in_index++]&0xff);\n z.adler = z.istate.need;\n z.istate.mode = DICT0;\n return Z_NEED_DICT;\n case DICT0:\n z.istate.mode = BAD;\n z.msg = \"need dictionary\";\n z.istate.marker = 0; // can try inflateSync\n return Z_STREAM_ERROR;\n case BLOCKS:\n\n r = z.istate.blocks.proc(z, r);\n if(r == Z_DATA_ERROR){\n z.istate.mode = BAD;\n z.istate.marker = 0; // can try inflateSync\n break;\n }\n if(r == Z_OK){\n r = f;\n }\n if(r != Z_STREAM_END){\n return r;\n }\n r = f;\n z.istate.blocks.reset(z, z.istate.was);\n if(z.istate.nowrap!=0){\n z.istate.mode=DONE;\n break;\n }\n z.istate.mode=CHECK4;\n case CHECK4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=CHECK3;\n case CHECK3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode = CHECK2;\n case CHECK2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode = CHECK1;\n case CHECK1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=(z.next_in[z.next_in_index++]&0xff);\n\n if(((z.istate.was[0])) != ((z.istate.need))){\n z.istate.mode = BAD;\n z.msg = \"incorrect data check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n z.istate.mode = DONE;\n case DONE:\n return Z_STREAM_END;\n case BAD:\n return Z_DATA_ERROR;\n default:\n return Z_STREAM_ERROR;\n }\n }\n }\n\n\nInflate.prototype.inflateSetDictionary = function(z, dictionary, dictLength) {\n var index=0;\n var length = dictLength;\n if(z==null || z.istate == null|| z.istate.mode != DICT0)\n return Z_STREAM_ERROR;\n\n if(z._adler.adler32(1, dictionary, 0, dictLength)!=z.adler){\n return Z_DATA_ERROR;\n }\n\n z.adler = z._adler.adler32(0, null, 0, 0);\n\n if(length >= (1<>> 1){\n case 0: // stored\n {b>>>=(3);k-=(3);}\n t = k & 7; // go to byte boundary\n\n {b>>>=(t);k-=(t);}\n this.mode = IB_LENS; // get length of stored block\n break;\n case 1: // fixed\n {\n var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n var tl=[];\n\t var td=[];\n\n\t inflate_trees_fixed(bl, bd, tl, td, z);\n this.codes.init(bl[0], bd[0], tl[0], 0, td[0], 0, z);\n }\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_CODES;\n break;\n case 2: // dynamic\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_TABLE;\n break;\n case 3: // illegal\n\n {b>>>=(3);k-=(3);}\n this.mode = BAD;\n z.msg = \"invalid block type\";\n r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tbreak;\n case IB_LENS:\n\twhile(k<(32)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>> 16) & 0xffff) != (b & 0xffff)){\n\t this.mode = BAD;\n\t z.msg = \"invalid stored block lengths\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tthis.left = (b & 0xffff);\n\tb = k = 0; // dump bits\n\tthis.mode = this.left!=0 ? IB_STORED : (this.last!=0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_STORED:\n\tif (n == 0){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tif(m==0){\n\t if(q==end&&read!=0){\n\t q=0; m=(qn) t = n;\n\tif(t>m) t = m;\n\tarrayCopy(z.next_in, p, this.window, q, t);\n\tp += t; n -= t;\n\tq += t; m -= t;\n\tif ((this.left -= t) != 0)\n\t break;\n\tthis.mode = (this.last != 0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_TABLE:\n\n\twhile(k<(14)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)< 29 || ((t >> 5) & 0x1f) > 29)\n\t {\n\t this.mode = IB_BAD;\n\t z.msg = \"too many length or distance symbols\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\tt = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);\n\tif(this.blens==null || this.blens.length>>=(14);k-=(14);}\n\n\tthis.index = 0;\n\tmode = IB_BTREE;\n case IB_BTREE:\n\twhile (this.index < 4 + (this.table >>> 10)){\n\t while(k<(3)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(3);k-=(3);}\n\t}\n\n\twhile(this.index < 19){\n\t this.blens[INFBLOCKS_BORDER[this.index++]] = 0;\n\t}\n\n\tthis.bb[0] = 7;\n\tt = this.inftree.inflate_trees_bits(this.blens, this.bb, this.tb, this.hufts, z);\n\tif (t != Z_OK){\n\t r = t;\n\t if (r == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t }\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tthis.index = 0;\n\tthis.mode = IB_DTREE;\n case IB_DTREE:\n\twhile (true){\n\t t = this.table;\n\t if(!(this.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))){\n\t break;\n\t }\n\n\t var h; //int[]\n\t var i, j, c;\n\n\t t = this.bb[0];\n\n\t while(k<(t)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\t this.blens[this.index++] = c;\n\t }\n\t else { // c == 16..18\n\t i = c == 18 ? 7 : c - 14;\n\t j = c == 18 ? 11 : 3;\n\n\t while(k<(t+i)){\n\t if(n!=0){\n\t\tr=Z_OK;\n\t }\n\t else{\n\t\tthis.bitb=b; this.bitk=k;\n\t\tz.avail_in=n;\n\t\tz.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t\tthis.write=q;\n\t\treturn this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\n\t j += (b & inflate_mask[i]);\n\n\t b>>>=(i);k-=(i);\n\n\t i = this.index;\n\t t = this.table;\n\t if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||\n\t\t(c == 16 && i < 1)){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t z.msg = \"invalid bit length repeat\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\n\t c = c == 16 ? this.blens[i-1] : 0;\n\t do{\n\t this.blens[i++] = c;\n\t }\n\t while (--j!=0);\n\t this.index = i;\n\t }\n\t}\n\n\tthis.tb[0]=-1;\n\t{\n\t var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n\t var tl=new Int32Array(1);\n\t var td=new Int32Array(1);\n\t bl[0] = 9; // must be <= 9 for lookahead assumptions\n\t bd[0] = 6; // must be <= 9 for lookahead assumptions\n\n\t t = this.table;\n\t t = this.inftree.inflate_trees_dynamic(257 + (t & 0x1f),\n\t\t\t\t\t 1 + ((t >> 5) & 0x1f),\n\t\t\t\t\t this.blens, bl, bd, tl, td, this.hufts, z);\n\n\t if (t != Z_OK){\n\t if (t == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = BAD;\n\t }\n\t r = t;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\t this.codes.init(bl[0], bd[0], this.hufts, tl[0], this.hufts, td[0], z);\n\t}\n\tthis.mode = IB_CODES;\n case IB_CODES:\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n; z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\n\tif ((r = this.codes.proc(this, z, r)) != Z_STREAM_END){\n\t return this.inflate_flush(z, r);\n\t}\n\tr = Z_OK;\n\tthis.codes.free(z);\n\n\tp=z.next_in_index; n=z.avail_in;b=this.bitb;k=this.bitk;\n\tq=this.write;m = (q < this.read ? this.read-q-1 : this.end-q);\n\n\tif (this.last==0){\n\t this.mode = IB_TYPE;\n\t break;\n\t}\n\tthis.mode = IB_DRY;\n case IB_DRY:\n\tthis.write=q;\n\tr = this.inflate_flush(z, r);\n\tq=this.write; m = (q < this.read ? this.read-q-1 : this.end-q);\n\tif (this.read != this.write){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z, r);\n\t}\n\tmode = DONE;\n case IB_DONE:\n\tr = Z_STREAM_END;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n case IB_BAD:\n\tr = Z_DATA_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n\n default:\n\tr = Z_STREAM_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n }\n }\n }\n\nInfBlocks.prototype.free = function(z){\n this.reset(z, null);\n this.window=null;\n this.hufts=null;\n}\n\nInfBlocks.prototype.set_dictionary = function(d, start, n){\n arrayCopy(d, start, window, 0, n);\n this.read = this.write = n;\n}\n\n // Returns true if inflate is currently at the end of a block generated\n // by Z_SYNC_FLUSH or Z_FULL_FLUSH.\nInfBlocks.prototype.sync_point = function(){\n return this.mode == IB_LENS;\n}\n\n // copy as much as possible from the sliding window to the output area\nInfBlocks.prototype.inflate_flush = function(z, r){\n var n;\n var p;\n var q;\n\n // local copies of source and destination pointers\n p = z.next_out_index;\n q = this.read;\n\n // compute number of bytes to copy as far as end of window\n n = ((q <= this.write ? this.write : this.end) - q);\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n z.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy as far as end of window\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n\n // see if more to copy at beginning of window\n if (q == this.end){\n // wrap pointers\n q = 0;\n if (this.write == this.end)\n this.write = 0;\n\n // compute bytes to copy\n n = this.write - q;\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n\tz.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n }\n\n // update pointers\n z.next_out_index = p;\n this.read = q;\n\n // done\n return r;\n }\n\n//\n// InfCodes.java\n//\n\nvar IC_START=0; // x: set up for LEN\nvar IC_LEN=1; // i: get length/literal/eob next\nvar IC_LENEXT=2; // i: getting length extra (have base)\nvar IC_DIST=3; // i: get distance next\nvar IC_DISTEXT=4;// i: getting distance extra\nvar IC_COPY=5; // o: copying bytes in window, waiting for space\nvar IC_LIT=6; // o: got literal, waiting for output space\nvar IC_WASH=7; // o: got eob, possibly still output waiting\nvar IC_END=8; // x: got eob and all data flushed\nvar IC_BADCODE=9;// x: got error\n\nfunction InfCodes() {\n}\n\nInfCodes.prototype.init = function(bl, bd, tl, tl_index, td, td_index, z) {\n this.mode=IC_START;\n this.lbits=bl;\n this.dbits=bd;\n this.ltree=tl;\n this.ltree_index=tl_index;\n this.dtree = td;\n this.dtree_index=td_index;\n this.tree=null;\n}\n\nInfCodes.prototype.proc = function(s, z, r){\n var j; // temporary storage\n var t; // temporary pointer (int[])\n var tindex; // temporary pointer\n var e; // extra bits or operation\n var b=0; // bit buffer\n var k=0; // bits in bit buffer\n var p=0; // input data pointer\n var n; // bytes available there\n var q; // output window write pointer\n var m; // bytes to end of window or read pointer\n var f; // pointer to copy strings from\n\n // copy input/output information to locals (UPDATE macro restores)\n p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n q=s.write;m=q= 258 && n >= 10){\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t r = this.inflate_fast(this.lbits, this.dbits,\n\t\t\t this.ltree, this.ltree_index,\n\t\t\t this.dtree, this.dtree_index,\n\t\t\t s, z);\n\n\t p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n\t q=s.write;m=q>>=(this.tree[tindex+1]);\n\tk-=(this.tree[tindex+1]);\n\n\te=this.tree[tindex];\n\n\tif(e == 0){ // literal\n\t this.lit = this.tree[tindex+2];\n\t this.mode = IC_LIT;\n\t break;\n\t}\n\tif((e & 16)!=0 ){ // length\n\t this.get = e & 15;\n\t this.len = this.tree[tindex+2];\n\t this.mode = IC_LENEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tif ((e & 32)!=0){ // end of block\n\t this.mode = IC_WASH;\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid literal/length code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_LENEXT: // i: getting length extra (have base)\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.need = this.dbits;\n\tthis.tree = this.dtree;\n\tthis.tree_index = this.dtree_index;\n\tthis.mode = IC_DIST;\n case IC_DIST: // i: get distance next\n\tj = this.need;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=this.tree[tindex+1];\n\tk-=this.tree[tindex+1];\n\n\te = (this.tree[tindex]);\n\tif((e & 16)!=0){ // distance\n\t this.get = e & 15;\n\t this.dist = this.tree[tindex+2];\n\t this.mode = IC_DISTEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid distance code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_DISTEXT: // i: getting distance extra\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.mode = IC_COPY;\n case IC_COPY: // o: copying bytes in window, waiting for space\n f = q - this.dist;\n while(f < 0){ // modulo window size-\"while\" instead\n f += s.end; // of \"if\" handles invalid distances\n\t}\n\twhile (this.len!=0){\n\n\t if(m==0){\n\t if(q==s.end&&s.read!=0){q=0;m=q 7){ // return unused byte, if any\n\t k -= 8;\n\t n++;\n\t p--; // can always return one\n\t}\n\n\ts.write=q; r=s.inflate_flush(z,r);\n\tq=s.write;m=q= 258 && n >= 10\n // get literal/length code\n while(k<(20)){ // max bits for literal/length code\n\tn--;\n\tb|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\ts.window[q++] = tp[tp_index_t_3+2];\n\tm--;\n\tcontinue;\n }\n do {\n\n\tb>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\tif((e&16)!=0){\n\t e &= 15;\n\t c = tp[tp_index_t_3+2] + (b & inflate_mask[e]);\n\n\t b>>=e; k-=e;\n\n\t // decode distance base of block to copy\n\t while(k<(15)){ // max bits for distance code\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t if((e&16)!=0){\n\t // get extra bits to add to distance base\n\t e &= 15;\n\t while(k<(e)){ // get extra bits (up to 13)\n\t\tn--;\n\t\tb|=(z.next_in[p++]&0xff)<>=(e); k-=(e);\n\n\t // do the copy\n\t m -= c;\n\t if (q >= d){ // offset before dest\n\t\t// just copy\n\t\tr=q-d;\n\t\tif(q-r>0 && 2>(q-r)){\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t\telse{\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t }\n\t else{ // else offset after destination\n r=q-d;\n do{\n r+=s.end; // force pointer in window\n }while(r<0); // covers invalid distances\n\t\te=s.end-r;\n\t\tif(c>e){ // if source crosses,\n\t\t c-=e; // wrapped copy\n\t\t if(q-r>0 && e>(q-r)){\n\t\t do{s.window[q++] = s.window[r++];}\n\t\t while(--e!=0);\n\t\t }\n\t\t else{\n\t\t arrayCopy(s.window, r, s.window, q, e);\n\t\t q+=e; r+=e; e=0;\n\t\t }\n\t\t r = 0; // copy rest from start of window\n\t\t}\n\n\t }\n\n\t // copy all or what's left\n do{s.window[q++] = s.window[r++];}\n\t\twhile(--c!=0);\n\t break;\n\t }\n\t else if((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t e=tp[tp_index_t_3];\n\t }\n\t else{\n\t z.msg = \"invalid distance code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t }\n\t }\n\t while(true);\n\t break;\n\t}\n\n\tif((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t if((e=tp[tp_index_t_3])==0){\n\n\t b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t s.window[q++]=tp[tp_index_t_3+2];\n\t m--;\n\t break;\n\t }\n\t}\n\telse if((e&32)!=0){\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_STREAM_END;\n\t}\n\telse{\n\t z.msg=\"invalid literal/length code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t}\n }\n while(true);\n }\n while(m>=258 && n>= 10);\n\n // not enough input or output--restore pointers and return\n c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n s.bitb=b;s.bitk=k;\n z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n s.write=q;\n\n return Z_OK;\n}\n\n//\n// InfTree.java\n//\n\nfunction InfTree() {\n}\n\nInfTree.prototype.huft_build = function(b, bindex, n, s, d, e, t, m, hp, hn, v) {\n\n // Given a list of code lengths and a maximum table size, make a set of\n // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR\n // if the given code set is incomplete (the tables are still built in this\n // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of\n // lengths), or Z_MEM_ERROR if not enough memory.\n\n var a; // counter for codes of length k\n var f; // i repeats in table every f entries\n var g; // maximum code length\n var h; // table level\n var i; // counter, current code\n var j; // counter\n var k; // number of bits in current code\n var l; // bits per table (returned in m)\n var mask; // (1 << w) - 1, to avoid cc -O bug on HP\n var p; // pointer into c[], b[], or v[]\n var q; // points to current table\n var w; // bits before this table == (l * h)\n var xp; // pointer into x\n var y; // number of dummy codes added\n var z; // number of entries in current table\n\n // Generate counts for each bit length\n\n p = 0; i = n;\n do {\n this.c[b[bindex+p]]++; p++; i--; // assume all entries <= BMAX\n }while(i!=0);\n\n if(this.c[0] == n){ // null input--all zero length codes\n t[0] = -1;\n m[0] = 0;\n return Z_OK;\n }\n\n // Find minimum and maximum length, bound *m by those\n l = m[0];\n for (j = 1; j <= BMAX; j++)\n if(this.c[j]!=0) break;\n k = j; // minimum code length\n if(l < j){\n l = j;\n }\n for (i = BMAX; i!=0; i--){\n if(this.c[i]!=0) break;\n }\n g = i; // maximum code length\n if(l > i){\n l = i;\n }\n m[0] = l;\n\n // Adjust last length count to fill out codes, if needed\n for (y = 1 << j; j < i; j++, y <<= 1){\n if ((y -= this.c[j]) < 0){\n return Z_DATA_ERROR;\n }\n }\n if ((y -= this.c[i]) < 0){\n return Z_DATA_ERROR;\n }\n this.c[i] += y;\n\n // Generate starting offsets into the value table for each length\n this.x[1] = j = 0;\n p = 1; xp = 2;\n while (--i!=0) { // note that i == g from above\n this.x[xp] = (j += this.c[p]);\n xp++;\n p++;\n }\n\n // Make a table of values in order of bit lengths\n i = 0; p = 0;\n do {\n if ((j = b[bindex+p]) != 0){\n this.v[this.x[j]++] = i;\n }\n p++;\n }\n while (++i < n);\n n = this.x[g]; // set n to length of v\n\n // Generate the Huffman codes and for each, make the table entries\n this.x[0] = i = 0; // first Huffman code is zero\n p = 0; // grab values in bit order\n h = -1; // no tables yet--level -1\n w = -l; // bits decoded == (l * h)\n this.u[0] = 0; // just to keep compilers happy\n q = 0; // ditto\n z = 0; // ditto\n\n // go through the bit lengths (k already is bits in shortest code)\n for (; k <= g; k++){\n a = this.c[k];\n while (a--!=0){\n\t// here i is the Huffman code of length k bits for value *p\n\t// make tables up to required level\n while (k > w + l){\n h++;\n w += l; // previous table always l bits\n\t // compute minimum size table less than or equal to l bits\n z = g - w;\n z = (z > l) ? l : z; // table size upper limit\n if((f=1<<(j=k-w))>a+1){ // try a k-w bit table\n // too few codes for k-w bit table\n f -= a + 1; // deduct codes from patterns left\n xp = k;\n if(j < z){\n while (++j < z){ // try smaller tables up to z bits\n if((f <<= 1) <= this.c[++xp])\n break; // enough codes to use up j bits\n f -= this.c[xp]; // else deduct codes from patterns\n }\n\t }\n }\n z = 1 << j; // table entries for j-bit table\n\n\t // allocate new table\n if (this.hn[0] + z > MANY){ // (note: doesn't matter for fixed)\n return Z_DATA_ERROR; // overflow of MANY\n }\n this.u[h] = q = /*hp+*/ this.hn[0]; // DEBUG\n this.hn[0] += z;\n\n\t // connect to last table, if there is one\n\t if(h!=0){\n this.x[h]=i; // save pattern for backing up\n this.r[0]=j; // bits in this table\n this.r[1]=l; // bits to dump before this table\n j=i>>>(w - l);\n this.r[2] = (q - this.u[h-1] - j); // offset to this table\n arrayCopy(this.r, 0, hp, (this.u[h-1]+j)*3, 3); // connect to last table\n }\n else{\n t[0] = q; // first table is returned result\n\t }\n }\n\n\t// set up table entry in r\n this.r[1] = (k - w);\n if (p >= n){\n this.r[0] = 128 + 64; // out of values--invalid code\n\t}\n else if (v[p] < s){\n this.r[0] = (this.v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block\n this.r[2] = this.v[p++]; // simple code is just the value\n }\n else{\n this.r[0]=(e[this.v[p]-s]+16+64); // non-simple--look up in lists\n this.r[2]=d[this.v[p++] - s];\n }\n\n // fill code-like entries with r\n f=1<<(k-w);\n for (j=i>>>w;j>>= 1){\n i ^= j;\n\t}\n i ^= j;\n\n\t// backup over finished tables\n mask = (1 << w) - 1; // needed on HP, cc -O bug\n while ((i & mask) != this.x[h]){\n h--; // don't need to update q\n w -= l;\n mask = (1 << w) - 1;\n }\n }\n }\n // Return Z_BUF_ERROR if we were given an incomplete table\n return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;\n}\n\nInfTree.prototype.inflate_trees_bits = function(c, bb, tb, hp, z) {\n var result;\n this.initWorkArea(19);\n this.hn[0]=0;\n result = this.huft_build(c, 0, 19, 19, null, null, tb, bb, hp, this.hn, this.v);\n\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed dynamic bit lengths tree\";\n }\n else if(result == Z_BUF_ERROR || bb[0] == 0){\n z.msg = \"incomplete dynamic bit lengths tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n}\n\nInfTree.prototype.inflate_trees_dynamic = function(nl, nd, c, bl, bd, tl, td, hp, z) {\n var result;\n\n // build literal/length tree\n this.initWorkArea(288);\n this.hn[0]=0;\n result = this.huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, this.hn, this.v);\n if (result != Z_OK || bl[0] == 0){\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed literal/length tree\";\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"incomplete literal/length tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n // build distance tree\n this.initWorkArea(288);\n result = this.huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, this.hn, this.v);\n\n if (result != Z_OK || (bd[0] == 0 && nl > 257)){\n if (result == Z_DATA_ERROR){\n z.msg = \"oversubscribed distance tree\";\n }\n else if (result == Z_BUF_ERROR) {\n z.msg = \"incomplete distance tree\";\n result = Z_DATA_ERROR;\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"empty distance tree with lengths\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n return Z_OK;\n}\n/*\n static int inflate_trees_fixed(int[] bl, //literal desired/actual bit depth\n int[] bd, //distance desired/actual bit depth\n int[][] tl,//literal/length tree result\n int[][] td,//distance tree result\n ZStream z //for memory allocation\n\t\t\t\t ){\n\n*/\n\nfunction inflate_trees_fixed(bl, bd, tl, td, z) {\n bl[0]=fixed_bl;\n bd[0]=fixed_bd;\n tl[0]=fixed_tl;\n td[0]=fixed_td;\n return Z_OK;\n}\n\nInfTree.prototype.initWorkArea = function(vsize){\n if(this.hn==null){\n this.hn=new Int32Array(1);\n this.v=new Int32Array(vsize);\n this.c=new Int32Array(BMAX+1);\n this.r=new Int32Array(3);\n this.u=new Int32Array(BMAX);\n this.x=new Int32Array(BMAX+1);\n }\n if(this.v.length 100) {\n arrayCopy_fast(new Uint8Array(src.buffer, src.byteOffset + srcOffset, count), dest, destOffset);\n } else {\n arrayCopy_slow(src, srcOffset, dest, destOffset, count);\n }\n\n}\n\nfunction arrayCopy_slow(src, srcOffset, dest, destOffset, count) {\n\n // dlog('_slow call: srcOffset=' + srcOffset + '; destOffset=' + destOffset + '; count=' + count);\n\n for (var i = 0; i < count; ++i) {\n dest[destOffset + i] = src[srcOffset + i];\n }\n}\n\nfunction arrayCopy_fast(src, dest, destOffset) {\n dest.set(src, destOffset);\n}\n\n\n // largest prime smaller than 65536\nvar ADLER_BASE=65521;\n // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1\nvar ADLER_NMAX=5552;\n\nfunction adler32(adler, /* byte[] */ buf, index, len){\n if(buf == null){ return 1; }\n\n var s1=adler&0xffff;\n var s2=(adler>>16)&0xffff;\n var k;\n\n while(len > 0) {\n k=len=16){\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n k-=16;\n }\n if(k!=0){\n do{\n s1+=buf[index++]&0xff; s2+=s1;\n }\n while(--k!=0);\n }\n s1%=ADLER_BASE;\n s2%=ADLER_BASE;\n }\n return (s2<<16)|s1;\n}\n\n\n\nfunction jszlib_inflate_buffer(buffer, start, length, afterUncOffset) {\n if (!start) {\n buffer = new Uint8Array(buffer);\n } else if (!length) {\n buffer = new Uint8Array(buffer, start, buffer.byteLength - start);\n } else {\n buffer = new Uint8Array(buffer, start, length);\n }\n\n var z = new ZStream();\n z.inflateInit(DEF_WBITS, true);\n z.next_in = buffer;\n z.next_in_index = 0;\n z.avail_in = buffer.length;\n\n var oBlockList = [];\n var totalSize = 0;\n while (true) {\n var obuf = new Uint8Array(32000);\n z.next_out = obuf;\n z.next_out_index = 0;\n z.avail_out = obuf.length;\n var status = z.inflate(Z_NO_FLUSH);\n if (status != Z_OK && status != Z_STREAM_END && status != Z_BUF_ERROR) {\n throw z.msg;\n }\n if (z.avail_out != 0) {\n var newob = new Uint8Array(obuf.length - z.avail_out);\n arrayCopy(obuf, 0, newob, 0, (obuf.length - z.avail_out));\n obuf = newob;\n }\n oBlockList.push(obuf);\n totalSize += obuf.length;\n if (status == Z_STREAM_END || status == Z_BUF_ERROR) {\n break;\n }\n }\n\n if (afterUncOffset) {\n afterUncOffset[0] = (start || 0) + z.next_in_index;\n }\n\n if (oBlockList.length == 1) {\n return oBlockList[0].buffer;\n } else {\n var out = new Uint8Array(totalSize);\n var cursor = 0;\n for (var i = 0; i < oBlockList.length; ++i) {\n var b = oBlockList[i];\n arrayCopy(b, 0, out, cursor, b.length);\n cursor += b.length;\n }\n return out.buffer;\n }\n}\n\nreturn {\n inflateBuffer: jszlib_inflate_buffer,\n arrayCopy: arrayCopy\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/jszlib.js\n// module id = 134\n// module chunks = 3","// jQuery Ajax Native Plugin\n\n// (c) 2015 Tarik Zakaria Benmerar, Acigna Inc.\n// jQuery Ajax Native Plugin may be freely distributed under the MIT license.\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals (root is window)\n factory(root.jQuery);\n }\n}(this, function ( $ ) {\n var ajaxSettings = $.ajaxSettings;\n ajaxSettings.responseFields.native = 'responseNative';\n ajaxSettings.converters[ '* native' ] = true;\n var support = {},\n xhrId = 0,\n xhrSuccessStatus = {\n // file protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE9\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrCallbacks = {},\n xhrSupported = jQuery.ajaxSettings.xhr();\n // Support: IE9\n // Open requests must be manually aborted on unload (#5280)\n if ( window.ActiveXObject ) {\n $( window ).on( \"unload\", function() {\n for ( var key in xhrCallbacks ) {\n xhrCallbacks[ key ]();\n }\n });\n }\n support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\n support.ajax = xhrSupported = !!xhrSupported;\n\n //Native Data Type Ajax Transport\n $.ajaxTransport('native', function ( options ) {\n var callback;\n // Cross domain only allowed if supported through XMLHttpRequest\n if ( support.cors || xhrSupported && !options.crossDomain ) {\n return {\n send: function( headers, complete ) {\n var i,\n xhr = options.xhr(),\n id = ++xhrId,\n responses = {};\n\n xhr.open( options.type, options.url, options.async, options.username, options.password );\n\n // Apply custom fields if provided\n if ( options.xhrFields ) {\n for ( i in options.xhrFields ) {\n xhr[ i ] = options.xhrFields[ i ];\n }\n }\n\n // Override mime type if needed\n if ( options.mimeType && xhr.overrideMimeType ) {\n xhr.overrideMimeType( options.mimeType );\n }\n\n // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n if ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n }\n\n // Set headers\n for ( i in headers ) {\n xhr.setRequestHeader( i, headers[ i ] );\n }\n\n // Callback\n callback = function( type ) {\n return function() {\n if ( callback ) {\n delete xhrCallbacks[ id ];\n callback = xhr.onload = xhr.onerror = null;\n\n if ( type === \"abort\" ) {\n xhr.abort();\n } else if ( type === \"error\" ) {\n complete(\n // file: protocol always yields status 0; see #8605, #14207\n xhr.status,\n xhr.statusText\n );\n } else {\n // The native response associated with the responseType\n // Stored in the xhr.response attribute (XHR2 Spec)\n if ( xhr.response ) {\n responses.native = xhr.response;\n }\n\n complete(\n xhrSuccessStatus[ xhr.status ] || xhr.status,\n xhr.statusText,\n responses,\n xhr.getAllResponseHeaders()\n );\n }\n }\n };\n };\n\n // Listen to events\n xhr.onload = callback();\n xhr.onerror = callback(\"error\");\n\n // Create the abort callback\n callback = xhrCallbacks[ id ] = callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send( options.hasContent && options.data || null );\n } catch ( e ) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if ( callback ) {\n throw e;\n }\n }\n },\n\n abort: function() {\n if ( callback ) {\n callback();\n }\n }\n };\n }\n });\n\n\n //$.getNative wrapper\n $.getNative = function ( url, callback ) {\n return $.ajax({\n dataType: 'native',\n url: url,\n xhrFields: {\n responseType: 'arraybuffer'\n },\n success: callback\n });\n }\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/jquery-ajax-native.js\n// module id = 135\n// module chunks = 3","import baseMVC from \"mvc/base-mvc\";\nimport _l from \"utils/localization\";\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class View to display a user's disk/storage usage\n * either as a progress bar representing the percentage of a quota used\n * or a simple text element displaying the human readable size used.\n * @name UserQuotaMeter\n * @augments Backbone.View\n */\nvar UserQuotaMeter = Backbone.View.extend(baseMVC.LoggableMixin).extend(\n /** @lends UserQuotaMeter.prototype */ {\n _logNamespace: logNamespace,\n\n /** Defaults for optional settings passed to initialize */\n options: {\n warnAtPercent: 85,\n errorAtPercent: 100\n },\n\n /** Set up, accept options, and bind events */\n initialize: function(options) {\n this.log(`${this}.initialize:`, options);\n _.extend(this.options, options);\n\n //this.bind( 'all', function( event, data ){ this.log( this + ' event:', event, data ); }, this );\n this.listenTo(this.model, \"change:quota_percent change:total_disk_usage\", this.render);\n },\n\n /** Re-load user model data from the api */\n update: function(options) {\n this.log(`${this} updating user data...`, options);\n this.model.loadFromApi(this.model.get(\"id\"), options);\n return this;\n },\n\n /** Is the user over their quota (if there is one)?\n * @returns {Boolean} true if over quota, false if no quota or under quota\n */\n isOverQuota: function() {\n return (\n this.model.get(\"quota_percent\") !== null &&\n this.model.get(\"quota_percent\") >= this.options.errorAtPercent\n );\n },\n\n /** Render the meter when they have an applicable quota. Will render as a progress bar\n * with their percentage of that quota in text over the bar.\n * @fires quota:over when user is over quota (>= this.errorAtPercent)\n * @fires quota:under when user is under quota\n * @fires quota:under:approaching when user is >= this.warnAtPercent of their quota\n * @fires quota:under:ok when user is below this.warnAtPercent\n * @returns {jQuery} the rendered meter\n */\n _render_quota: function() {\n var modelJson = this.model.toJSON();\n\n var //prevPercent = this.model.previous( 'quota_percent' ),\n percent = modelJson.quota_percent;\n\n var //meter = $( UserQuotaMeter.templates.quota( modelJson ) );\n $meter = $(this._templateQuotaMeter(modelJson));\n\n var $bar = $meter.find(\".progress-bar\");\n //this.log( this + '.rendering quota, percent:', percent, 'meter:', meter );\n\n // OVER QUOTA: color the quota bar and show the quota error message\n if (this.isOverQuota()) {\n //this.log( '\\t over quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-danger\");\n $meter.find(\".quota-meter-text\").css(\"color\", \"white\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:over\", modelJson);\n\n // APPROACHING QUOTA: color the quota bar\n } else if (percent >= this.options.warnAtPercent) {\n //this.log( '\\t approaching quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-warning\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:approaching\", modelJson);\n\n // otherwise, hide/don't use the msg box\n } else {\n $bar.attr(\"class\", \"progress-bar progress-bar-success\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:ok\", modelJson);\n }\n return $meter;\n },\n\n /** Render the meter when the user has NO applicable quota. Will render as text\n * showing the human readable sum storage their data is using.\n * @returns {jQuery} the rendered text\n */\n _render_usage: function() {\n //var usage = $( UserQuotaMeter.templates.usage( this.model.toJSON() ) );\n var usage = $(this._templateUsage(this.model.toJSON()));\n this.log(`${this}.rendering usage:`, usage);\n return usage;\n },\n\n /** Render either the quota percentage meter or the human readable disk usage\n * depending on whether the user model has quota info (quota_percent === null -> no quota)\n * @returns {Object} this UserQuotaMeter\n */\n render: function() {\n //this.log( this + '.rendering' );\n var meterHtml = null;\n\n // no quota on server ('quota_percent' === null (can be valid at 0)), show usage instead\n this.log(`${this}.model.quota_percent:`, this.model.get(\"quota_percent\"));\n if (this.model.get(\"quota_percent\") === null || this.model.get(\"quota_percent\") === undefined) {\n meterHtml = this._render_usage();\n\n // otherwise, render percent of quota (and warning, error)\n } else {\n meterHtml = this._render_quota();\n //TODO: add the original text for unregistered quotas\n //tooltip = \"Your disk quota is %s. You can increase your quota by registering a Galaxy account.\"\n }\n\n this.$el.html(meterHtml);\n this.$el.find(\".quota-meter-text\").tooltip();\n return this;\n },\n\n _templateQuotaMeter: function(data) {\n return [\n '
',\n '
',\n '
`\n : \">\",\n _l(\"Using\"),\n \" \",\n data.quota_percent,\n \"%\",\n \"
\",\n \"
\"\n ].join(\"\");\n },\n\n _templateUsage: function(data) {\n return [\n '
',\n '
',\n data.nice_total_disk_usage ? _l(\"Using \") + data.nice_total_disk_usage : \"\",\n \"
\",\n \"
\"\n ].join(\"\");\n },\n\n toString: function() {\n return `UserQuotaMeter(${this.model})`;\n }\n }\n);\n\n//==============================================================================\nexport default {\n UserQuotaMeter: UserQuotaMeter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/user/user-quotameter.js"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///libs.bundled.js","webpack:///webpack/bootstrap 8ed224e5c9316a685a21","webpack:///./galaxy/scripts/libs/jquery/jquery.js","webpack:///./galaxy/scripts/libs/underscore.js","webpack:///./galaxy/scripts/libs/backbone.js","webpack:///./galaxy/scripts/utils/utils.js","webpack:///./galaxy/scripts/utils/localization.js","webpack:///./galaxy/scripts/mvc/base-mvc.js","webpack:///./galaxy/scripts/mvc/ui/ui-misc.js","webpack:///./galaxy/scripts/mvc/ui/ui-modal.js","webpack:///./galaxy/scripts/utils/query-string-parsing.js","webpack:///./galaxy/scripts/mvc/form/form-view.js","webpack:///./galaxy/scripts/mvc/grid/grid-view.js","webpack:///./galaxy/scripts/ui/editable-text.js","webpack:///./galaxy/scripts/mvc/webhooks.js","webpack:///./galaxy/scripts/mvc/dataset/data.js","webpack:///./galaxy/scripts/viz/visualization.js","webpack:///./galaxy/scripts/viz/trackster/util.js","webpack:///./galaxy/scripts/mvc/ui/ui-portlet.js","webpack:///./galaxy/scripts/layout/panel.js","webpack:///./galaxy/scripts/galaxy.js","webpack:///./galaxy/scripts/layout/page.js","webpack:///./galaxy/scripts/utils/config.js","webpack:///./galaxy/scripts/mvc/ui/popup-menu.js","webpack:///./galaxy/scripts/mvc/ui/ui-tabs.js","webpack:///./galaxy/scripts/mvc/ui/ui-buttons.js","webpack:///./galaxy/scripts/libs/jquery/jquery.event.hover.js","webpack:///./galaxy/scripts/libs/jquery/jquery.event.drag.js","webpack:///./galaxy/scripts/libs/jquery/jquery.mousewheel.js","webpack:///./galaxy/scripts/libs/jquery/jquery.form.js","webpack:///./galaxy/scripts/libs/jquery/jquery.rating.js","webpack:///./galaxy/scripts/libs/jquery/select2.js","webpack:///./galaxy/scripts/libs/jquery/jquery-ui.js","webpack:///./galaxy/scripts/libs/farbtastic.js","webpack:///./galaxy/scripts/libs/bootstrap-tour.js","webpack:///./galaxy/scripts/libs/toastr.js","webpack:///./galaxy/scripts/ui/autocom_tagging.js","webpack:///./galaxy/scripts/layout/modal.js","webpack:///./galaxy/scripts/mvc/tours.js","webpack:///./galaxy/scripts/utils/add-logging.js","webpack:///./galaxy/scripts/mvc/user/user-model.js","webpack:///./galaxy/scripts/mvc/ui/ui-frames.js","webpack:///./galaxy/scripts/mvc/ui/icon-button.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-default.js","webpack:///./galaxy/scripts/mvc/ui/ui-options.js","webpack:///./galaxy/scripts/mvc/tool/tools.js","webpack:///./galaxy/scripts/mvc/tool/tool-form.js","webpack:///./galaxy/scripts/mvc/tool/tool-form-base.js","webpack:///./galaxy/scripts/utils/deferred.js","webpack:///./galaxy/scripts/mvc/ui/ui-table.js","webpack:///./galaxy/scripts/mvc/ui/ui-list.js","webpack:///./galaxy/scripts/mvc/form/form-data.js","webpack:///./galaxy/scripts/mvc/citation/citation-model.js","webpack:///./galaxy/scripts/polyfills.js","webpack:///./galaxy/scripts/libs/jquery/jquery.migrate.js","webpack:///./galaxy/scripts/libs/jquery/jquery.autocomplete.js","webpack:///./galaxy/scripts/libs/jquery.sparklines.js","webpack:///./galaxy/scripts/libs/jquery/jstorage.js","webpack:///./galaxy/scripts/libs/jquery/jquery.complexify.js","webpack:///./galaxy/scripts/libs/bootstrap.js","webpack:///(webpack)/buildin/global.js","webpack:///(webpack)/buildin/amd-define.js","webpack:///./galaxy/scripts/onload.js","webpack:///./galaxy/scripts/utils/async-save-text.js","webpack:///./galaxy/scripts/ui/popupmenu.js","webpack:///./galaxy/scripts/nls/locale.js","webpack:///./galaxy/scripts/utils/metrics-logger.js","webpack:///./galaxy/scripts/layout/masthead.js","webpack:///./galaxy/scripts/layout/menu.js","webpack:///./galaxy/scripts/layout/generic-nav-view.js","webpack:///./galaxy/scripts/layout/scratchbook.js","webpack:///./galaxy/scripts/mvc/grid/grid-model.js","webpack:///./galaxy/scripts/mvc/grid/grid-template.js","webpack:///./galaxy/scripts/mvc/ui/ui-slider.js","webpack:///./galaxy/scripts/mvc/ui/ui-drilldown.js","webpack:///./galaxy/scripts/viz/trackster.js","webpack:///./galaxy/scripts/viz/trackster/tracks.js","webpack:///./galaxy/scripts/viz/viz_views.js","webpack:///./galaxy/scripts/viz/trackster/slotting.js","webpack:///./galaxy/scripts/viz/trackster/painters.js","webpack:///./galaxy/scripts/viz/trackster/filters.js","webpack:///./galaxy/scripts/mvc/form/form-section.js","webpack:///./galaxy/scripts/mvc/form/form-repeat.js","webpack:///./galaxy/scripts/mvc/form/form-input.js","webpack:///./galaxy/scripts/mvc/form/form-parameters.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-content.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-library.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-ftp.js","webpack:///./galaxy/scripts/mvc/ui/ui-select-genomespace.js","webpack:///./galaxy/scripts/mvc/tool/tool-genomespace.js","webpack:///./galaxy/scripts/mvc/ui/ui-color-picker.js","webpack:///./galaxy/scripts/libs/bibtex.js","webpack:///./galaxy/scripts/mvc/citation/citation-view.js","webpack:///./galaxy/scripts/viz/bbi-data-manager.js","webpack:///./galaxy/scripts/libs/bbi/bigwig.js","webpack:///./galaxy/scripts/libs/bbi/spans.js","webpack:///./galaxy/scripts/libs/bbi/jszlib.js","webpack:///./galaxy/scripts/libs/bbi/jquery-ajax-native.js","webpack:///./galaxy/scripts/mvc/user/user-quotameter.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","result","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","s","3","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","undefined","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","setTimeout","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","global","factory","w","this","noGlobal","isArrayLike","obj","jQuery","isWindow","winnow","elements","qualifier","not","isFunction","grep","elem","nodeType","risSimple","test","filter","indexOf","sibling","cur","dir","createOptions","options","each","match","rnotwhite","_","flag","completed","removeEventListener","ready","Data","expando","uid","dataAttr","key","data","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","dataUser","set","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","css","initial","unit","cssNumber","initialInUnit","rcssNum","exec","style","start","end","getAll","context","tag","ret","querySelectorAll","nodeName","merge","setGlobalEval","elems","refElements","dataPriv","buildFragment","scripts","selection","ignored","tmp","wrap","contains","j","fragment","createDocumentFragment","nodes","rhtml","rtagName","wrapMap","_default","innerHTML","htmlPrefilter","lastChild","childNodes","firstChild","textContent","createTextNode","inArray","ownerDocument","rscriptType","returnTrue","returnFalse","safeActiveElement","activeElement","on","types","selector","fn","one","origFn","event","off","apply","arguments","guid","add","manipulationTarget","content","disableScript","restoreScript","rscriptTypeMasked","removeAttribute","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","events","hasData","access","handle","extend","fixInput","rcheckableType","checked","defaultValue","domManip","collection","args","callback","concat","first","hasScripts","node","doc","iNoClone","value","support","checkClone","rchecked","index","self","eq","html","map","clone","_evalUrl","globalEval","rcleanScript","remove","keepData","cleanData","parentNode","removeChild","actualDisplay","appendTo","body","display","detach","defaultDisplay","elemdisplay","iframe","documentElement","contentDocument","write","close","curCSS","computed","width","minWidth","maxWidth","getStyles","getPropertyValue","pixelMarginRight","rnumnonpx","rmargin","addGetHookIf","conditionFn","hookFn","vendorPropName","emptyStyle","capName","toUpperCase","slice","cssPrefixes","setPositiveNumber","subtract","matches","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","boxSizingReliable","parseFloat","showHide","show","hidden","values","isHidden","Tween","easing","init","createFxNow","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","createTween","animation","Animation","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","rfxtypes","isEmptyObject","done","hide","propFilter","specialEasing","camelCase","isArray","cssHooks","expand","properties","stopped","prefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","originalProperties","originalOptions","stop","gotoEnd","rejectWith","proxy","fx","timer","progress","complete","fail","getClass","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","selected","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","responses","ct","finalDataType","firstDataType","contents","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","prev","responseFields","dataFilter","split","throws","state","buildParams","prefix","traditional","v","rbracket","getWindow","defaultView","arr","class2type","toString","hasOwn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","last","len","sort","splice","copy","copyIsArray","isPlainObject","random","isReady","msg","noop","Array","isNumeric","realStringObj","code","indirect","eval","trim","text","string","makeArray","results","second","invert","callbackExpect","arg","Date","Symbol","iterator","Sizzle","seed","nid","nidselect","groups","newSelector","newContext","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","id","getElementsByClassName","qsa","compilerCache","rbuggyQSA","rescape","tokenize","ridentifier","toSelector","join","rsibling","testContext","qsaError","select","createCache","cache","keys","Expr","cacheLength","markFunction","assert","div","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","uniqueCache","outerCache","newCache","dirruns","uniqueID","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","find","dirrunsUnique","pop","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","sortOrder","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","els","hasCompare","parent","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","attr","specified","duplicates","detectDuplicates","sortStable","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","until","truncate","is","siblings","rneedsContext","rsingleTag","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","reverse","Callbacks","firing","memory","fired","locked","firingIndex","once","stopOnFalse","disable","lock","fireWith","tuples","then","fns","newDefer","tuple","returned","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","readyState","doScroll","chainable","emptyGet","raw","bulk","acceptData","owner","register","writable","stored","camel","removeData","_data","_removeData","camelKey","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","handleObjIn","eventHandle","t","handleObj","special","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","fix","handlerQueue","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","preventDefault","stopPropagation","postDispatch","sel","isNaN","fixHooks","keyHooks","original","charCode","keyCode","mouseHooks","eventDoc","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","Event","load","noBubble","trigger","blur","click","beforeunload","returnValue","isDefaultPrevented","defaultPrevented","timeStamp","isSimulated","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","relatedTarget","rxhtmlTag","rnoInnerhtml","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","append","prepend","insertBefore","before","after","replaceWith","replaceChild","prependTo","insertAfter","replaceAll","insert","HTML","BODY","view","opener","getComputedStyle","swap","old","computeStyleTests","cssText","container","divStyle","pixelPositionVal","reliableMarginLeftVal","marginLeft","boxSizingReliableVal","marginRight","pixelMarginRightVal","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginLeft","reliableMarginRight","marginDiv","rdisplayswap","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","origName","isFinite","getBoundingClientRect","left","margin","padding","border","suffix","expanded","parts","propHooks","eased","step","linear","swing","cos","PI","timerId","rrun","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","checkOn","optSelected","optDisabled","radioValue","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","rspaces","valHooks","optionSet","rfocusMorph","onlyHandlers","bubbleType","ontype","eventPath","isTrigger","parentWindow","simulate","hover","fnOver","fnOut","focusin","attaches","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","allTypes","originAnchor","active","lastModified","etag","url","isLocal","protocol","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","urlAnchor","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","abort","finalText","method","crossDomain","host","param","hasContent","beforeSend","send","getJSON","getScript","wrapAll","firstElementChild","wrapInner","unwrap","visible","getClientRects","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onabort","onreadystatechange","responseType","responseText","binary","text script","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","_jQuery","_$","$","noConflict","createReduce","iteratee","memo","currentKey","optimizeCb","createPredicateIndexFinder","array","predicate","cb","getLength","createIndexFinder","predicateFind","sortedIndex","item","min","collectNonEnumProps","nonEnumIdx","nonEnumerableProps","proto","ObjProto","previousUnderscore","ArrayProto","FuncProto","Function","nativeIsArray","nativeKeys","nativeBind","nativeCreate","create","Ctor","_wrapped","VERSION","argCount","other","accumulator","identity","isObject","Infinity","createAssigner","keysFunc","undefinedOnly","baseCreate","MAX_ARRAY_INDEX","pow","forEach","collect","reduce","foldl","inject","reduceRight","foldr","detect","findIndex","findKey","negate","every","some","any","includes","include","fromIndex","guard","invoke","isFunc","pluck","where","findWhere","lastComputed","shuffle","rand","shuffled","sample","sortBy","criteria","right","group","behavior","groupBy","indexBy","countBy","partition","pass","take","rest","tail","drop","compact","flatten","shallow","strict","startIndex","output","isArguments","without","difference","uniq","isSorted","isBoolean","seen","union","intersection","argsLength","zip","unzip","findLastIndex","low","mid","floor","lastIndexOf","range","ceil","executeBound","sourceFunc","boundFunc","callingContext","TypeError","bound","partial","boundArgs","bindAll","memoize","hasher","address","throttle","previous","later","leading","trailing","debounce","immediate","timestamp","callNow","wrapper","compose","times","hasEnumBug","propertyIsEnumerable","allKeys","mapObject","pairs","functions","methods","names","extendOwn","assign","pick","oiteratee","omit","defaults","tap","interceptor","isMatch","aStack","bStack","areArrays","aCtor","bCtor","isEqual","isEmpty","isString","isElement","Int8Array","isNumber","isNull","isUndefined","constant","propertyOf","accum","getTime","escapeMap","&","<","\"","'","`","unescapeMap","createEscaper","escaper","testRegexp","replaceRegexp","escape","unescape","fallback","idCounter","uniqueId","templateSettings","evaluate","interpolate","noMatch","escapes","\\","\r","\n","
","
","escapeChar","template","oldSettings","variable","render","chain","instance","_chain","mixin","valueOf","toJSON","Backbone","previousBackbone","emulateHTTP","emulateJSON","addMethod","attribute","defaultVal","addUnderscoreMethods","Class","_isModel","modelMatcher","model","Events","eventSplitter","eventsApi","internalOn","listening","_events","onApi","ctx","_listeners","listenTo","_listenId","listeningTo","_listeningTo","thisId","objId","offApi","listeners","stopListening","ids","_callback","onceMap","listenToOnce","offer","triggerApi","objEvents","allEvents","triggerEvents","ev","a1","a2","a3","Model","cid","cidPrefix","changed","initialize","validationError","idAttribute","sync","_validate","unset","silent","changes","changing","_changing","_previousAttributes","_pending","clear","hasChanged","changedAttributes","previousAttributes","fetch","resp","serverAttrs","wrapError","save","validate","isNew","patch","destroy","urlError","isValid","Collection","models","comparator","_reset","setOptions","addOptions","at","singular","removed","_removeModels","added","merged","toAdd","toMerge","toRemove","modelMap","sortable","sortAttr","existing","_prepareModel","_addReference","orderChanged","_removeReference","previousModels","_byId","modelId","callbackOpts","_onModelEvent","prevId","View","viewOptions","_ensureElement","delegateEventSplitter","tagName","$el","_removeElement","setElement","element","undelegateEvents","_setElement","delegateEvents","eventName","listener","_createElement","_setAttributes","methodMap","stringify","_method","textStatus","errorThrown","update","delete","read","Router","routes","_bindRoutes","optionalParam","namedParam","splatParam","escapeRegExp","route","isRegExp","_routeToRegExp","router","history","_extractParameters","execute","navigate","optional","decodeURIComponent","History","checkUrl","routeStripper","rootStripper","pathStripper","started","atRoot","pathname","getSearch","matchRoot","decodeFragment","decodeURI","getHash","getPath","path","charAt","getFragment","_usePushState","_wantsHashChange","hashChange","_hasHashChange","documentMode","_useHashChange","_wantsPushState","pushState","_hasPushState","rootPath","iWindow","contentWindow","_checkUrlInterval","loadUrl","detachEvent","title","_updateHash","protoProps","staticProps","child","__super__","deepeach","dict","new_dict","linkify","inputText","replacedText","replacePattern1","replacePattern2","replacePattern3","isJSON","sanitize","textify","lst","substr","__utils__get__","cache_key","debug","request","ajaxConfig","response_text","cssGetAttribute","classname","cssLoadFile","Galaxy","optionsDefault","roundToDecimalPlaces","number","numPlaces","placesMultiplier","round","bytesToString","normal_font","numberPlaces","tb","gb","mb","kb","rounded","__utils__uid__","hours","getHours","minutes","getMinutes","getDate","getMonth","getFullYear","appendScriptStyle","getQueryString","search","setWindowTitle","config","brand","_localization2","default","_localization","localeStrings","locale","navigator","language","userLanguage","__root","localize","strToLocalize","cacheNonLocalized","_interopRequireDefault","_interopRequireWildcard","newObj","mixinHash1","propsHash","lastArg","wrapTemplate","jsonNamespace","templateFn","templateVars","_l","buildComparator","attribute_name","ascending","_underscore","_backbone","_addLogging","_addLogging2","LoggableMixin","logger","_logNamespace","SessionStorageModel","initialAttrs","_checkEnabledSessionStorage","_read","sessionStorage","alert","_create","_update","_delete","setItem","DOMException","userAgent","getItem","removeItem","_log","SearchableModelMixin","searchAttributes","searchAliases","searchAttribute","attrKey","searchFor","attrVal","_searchArrayAttribute","term","matchesAll","terms","HiddenUntilActivatedViewMixin","hiddenUntilActivated","$activator","HUAVOptions","$elementShown","showFn","showSpeed","hasBeenShown","onshowFirstTime","onshow","onhide","DraggableViewMixin","draggable","$dragHandle","toggleDraggable","draggableOff","draggableOn","dragStartHandler","_dragStartHandler","dragEndHandler","_dragEndHandler","dataTransfer","effectAllowed","setData","SelectableViewMixin","selectable","$selector","_renderSelected","toggleSelector","hideSelector","showSelector","fxSpeed","toggleSelect","deselect","_utils","_uiSelectDefault","_uiSelectDefault2","_uiSlider","_uiSlider2","_uiOptions","_uiOptions2","_uiDrilldown","_uiDrilldown2","_uiButtons","_uiButtons2","_uiModal","_uiModal2","Label","new_title","Message","message","cls","persistent","fade","messageForDisplay","UnescapedMessage","Input","placeholder","readonly","area","color","new_val","datalist","autocomplete","change","_onchange","attr_name","Hidden","$info","$hidden","Upload","$file","$text","$wait","_readFile","files","reader","FileReader","readAsText","Button","ButtonDefault","ButtonIcon","ButtonCheck","ButtonMenu","ButtonLink","Modal","RadioButton","Checkbox","Radio","Select","Slider","Drilldown","backdrop","closing_events","closing_callback","title_separator","buttonList","$backdrop","canceled","_template","$header","$dialog","$body","$footer","$buttons","buttons","counter","$button","getButton","enableButton","disableButton","showButton","hideButton","queryString","keyRegex","pairString","pair","_uiPortlet","_uiPortlet2","_uiMisc","_uiMisc2","_formSection","_formSection2","_formData","_formData2","initial_errors","icon","always_refresh","hide_operations","onchange","new_model","matchModel","input_id","input_list","field","field_list","new_options","label","emit","is_dynamic","unwait","highlight","input_element","element_list","portlet","$panel","errors","error_messages","matchResponse","Manager","_renderForm","current_check","checksum","refresh_on_change","new_check","section","inputs","operations","collapsible","collapsed","onchange_title","_utils2","_gridModel","_gridModel2","_gridTemplate","_gridTemplate2","_popupMenu","_popupMenu2","grid","grid_config","dict_format","add_tag_to_grid_filter","tag_name","tag_value","add_filter_condition","url_base","items","url_data","k","embedded","init_grid","use_panels","handle_refresh","refresh_frames","currHistoryPanel","loadCurrentHistory","allow_title_display","footer","use_hide_message","init_grid_elements","init_grid_controls","init_refresh_on_change","submit_operation","keyup","set_sort_condition","column_key","text_input_obj","text_input","remove_filter_condition","set_categorical_filter","check_all_items","checkboxes","check_count","update_checked","rating","set_page","popup","operation","_add_operation","operation_config","allowed","allow_popup","addItem","url_args","confirmation_text","confirm","onclick","encode_id","findItemByHtml","add_filter","filter_element","go_page_one","remove_filter","col_key","cur_sort","new_sort","substring","sort_arrow","new_value","category_filter","cur_value","filter_value","new_page","page_num","cur_page","operation_button","operation_name","item_ids","href_parts","href_parms_str","href_parms","get_url_data","can_async_op","update_grid","go_to","advanced_search","_jquery","_jquery2","make_text_editable","config_dict","num_cols","num_rows","use_textarea","on_finish","help_text","input_elt","button_elt","set_text","new_text","cur_text","rows","cols","tooltip","WebhookModel","activate","Webhooks","WebhookView","me","toolId","toolVersion","urlRoot","webhook","webhooks","_uiFrames","_iconButton","_iconButton2","DatasetMetadata","Dataset","hda_ldda","metadata","_set_metadata","new_key","get_metadata","TabularDataset","chunk_url","first_data_chunk","at_eof","url_viz","get_next_chunk","next_chunk","rval","ck_data","DatasetCollection","TabularDatasetChunkedView","row_count","loading_chunk","TabularButtonTracksterView","expand_to_container","scroll_elt","attempt_to_fetch","scrolled_to_bottom","loading_indicator","_renderChunk","data_table","cellpadding","column_names","header_container","header_row","first_chunk","scroll","_renderCell","cell_contents","colspan","$cell","column_types","_renderRow","line","cells","row","num_columns","TopLevelTabularDatasetChunkedView","EmbeddedTabularDatasetChunkedView","innerHeight","scrollHeight","chrom","dataset_id","genome_build","file_ext","modal","frame","log","str","btn_viz","IconButtonView","IconButton","icon_class","mouseover tr","btn_viz_pars","gene_region","createTabularDatasetChunkedView","dataset_config","parent_elt","_data2","_util","_util2","_config","_config2","_gridView","_gridView2","_uiTabs","_uiTabs2","CustomToJSON","to_json_keys","to_json_mappers","select_datasets","success_fn","history_grid","library_grid","tabs","Cancel","Add","requests","data_type","track_defs","CanvasManager","default_font","dummy_canvas","new_canvas","dummy_context","getContext","font","char_width_px","measureText","patterns","load_pattern","Image","createPattern","get_pattern","canvas","manager","Cache","num_elements","obj_cache","key_ary","get_elt","key_str","stale","move_key_to_end","set_elt","most_recently_added","GenomeDataManager","dataset","genome","init_data","min_region_size","filters_manager","data_mode_compatible","entry","mode","can_subset","initial_entries","add_data","entries","set_data","region","data_is_ready","ready_deferred","query_type","ss_deferred","ServerStateDeferred","ajax_settings","go","search_features","query","load_data","resolution","extra_params","filter_names","filter_cols","get_data","is_deferred","entry_region","is_subregion","subset_entry","last_request","DEEP_DATA_REQ","BROAD_DATA_REQ","get_more_data","req_type","cur_data","_mark_stale","query_low","start_val","max_high","query_region","data_manager","new_data_request","new_data_available","max_low","can_get_more_detailed_data","dataset_type","get_more_detailed_data","detail_multiplier","num_samples","get_genome_wide_data","all_data_available","gw_data","chrom_info","chrom_data","GenomeRegion","genome_wide_data","subregion","subset_fns","bigwig","data_point","refseq","seq_start","subregion_data","same","GenomeReferenceDataManager","dataset_placeholder","data_url","Genome","chroms_info","dbkey","get_chroms_info","get_chrom_region","chr_name","get_chrom_len","str_val","from_str","pieces","start_end","compute_overlap","a_region","first_chrom","second_chrom","first_start","second_start","first_end","second_end","overlap_results","DIF_CHROMS","BEFORE","OVERLAP_START","CONTAINS","AFTER","CONTAINED_BY","OVERLAP_END","chrom_len","overlaps","GenomeRegionCollection","BrowserBookmark","note","BrowserBookmarkCollection","BackboneTrack","default_value","ConfigSettingCollection","from_models_and_saved_values","prefs","preloaded_data","BackboneTrackCollection","Visualization","vis_json","GenomeVisualization","drawables","bookmarks","viewport","tracks","add_tracks","dummy","obj_type","content_visible","TrackBrowserRouter","new_loc","change_location","commatize","rgx","_go","get_random_color","colors","new_color","nr","ng","nb","other_color","or","og","ob","n_brightness","o_brightness","brightness","r","g","ok","num_tries","r1","g1","b1","r2","g2","b2","abs","scrollable","nopadding","collapsible_button","$title_text","$title_icon","$content","$operations","collapse","hideOperation","showOperation","setOperation","setIcon","enable","MIN_PANEL_WIDTH","MAX_PANEL_WIDTH","SidePanel","saved_size","hiddenByTool","$center","$toggleButton","panel","components","_templatePanel","_templateHeader","_templateBody","_templateFooter","mousedown .unified-panel-footer > .drag","click .unified-panel-footer > .panel-collapse","_mousedownDragHandler","move","delta","prevX","oldWidth","newWidth","draggingLeft","resize","newSize","whichSide","handle_minwidth_hint","hint","force_panel","op","LeftPanel","RightPanel","CenterPanel","$frame","_iframeChangeHandler","fullpath","onbeforeunload","GalaxyApp","bootstrapped","_init","_baseMvc","_baseMvc2","_userModel","_userModel2","_metricsLogger","_metricsLogger2","NAMESPACE_KEY","DEBUGGING_KEY","localDebugging","localStorage","storageErr","_processOptions","session_csrf_token","_initConfig","_patchGalaxy","_initLogger","loggerOptions","_initLocale","_initUser","user","_setUpListeners","defaultOptions","patchExisting","patchWith","consoleLogger","consoleLevel","MetricsLogger","ALL","consoleNamespaceWhitelist","consoleFlattenMessages","userJSON","User","lastAjax","debugging","setting","debuggingNamespaces","csv","newSettings","_masthead","_masthead2","_panel","_panel2","_panelids","message_box_visible","message_box_content","message_box_class","show_inactivity_warning","inactivity_box_content","center","masthead","$messagebox","$inactivebox","panels","panel_id","panel_class_name","panel_class","panel_instance","renderMessageBox","renderInactivityBox","renderPanels","_checkCommunicationServerOnline","level","verificationLink","communication_server_host","port","communication_server_port","preferences","$chat_icon_element","communication_server","ConfigSetting","set_value","to_key_value_dict","get_value","set_default_value","saved_values","ConfigSettingCollectionView","container_div","tip","new_color_icon","tip_inner","farb_obj","farbtastic","fixed_farb_obj","setColor","help","render_in_modal","cancel_fn","ok_fn","update_from_form","check_enter_esc","OK","PopupMenu","menu","_renderAndShow","clickEvent","_getShownPosition","_setUpCloseBehavior","li","_templateOptions","divider","menuWidth","x","closePopup","findIndexByHtml","make_popupmenu","button_element","initial_options","convertedOptions","optionVal","optionKey","newOption","convertLinksToOptions","$parent","$link","linkHref","linkTarget","confirmText","fromExistingDom","$buttonElement","$menuElement","menuElementLinkSelector","make_popup_menus","menuSelector","buttonSelectorBuildFn","popupMenusCreated","fromDom","$nav","_add","_remove","_change","del","delAll","showTab","hideTab","tab_model","_template_tab","placement","$tmpl","$href","wait_text","wait_cls","percentage","$icon","$title","$progress","$progress_bar","icons","total","$menu","pull","onunload","$root","submodel","suboptions","addMenu","hoverHandler","dist2","hovered","_hover","fn1","fn2","fn3","drag","$event","$special","distance","datakey","def","dontstart","textselect","touched","dd","propagates","mousedown","interactions","interaction","dragging","hijack","live","droppable","ia","cancelled","subject","startX","startY","deltaX","deltaY","originalX","originalY","offsetX","offsetY","available","member","unselectable","locate","$dispatch","touchHooks","touchstart","touchmove","touchend","touchcancel","touches","changedTouches","draginit","dragstart","dragend","__WEBPACK_AMD_DEFINE_FACTORY__","orgEvent","absDelta","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaMode","pageHeight","lowestDelta","shouldAdjustOldDeltas","normalizeOffset","boundingRect","deltaFactor","nullLowestDeltaTimeout","nullLowestDelta","adjustOldDeltas","toFix","toBind","mousewheel","version","onmousewheel","getLineHeight","getPageHeight","$elem","unmousewheel","doAjaxSubmit","ajaxSubmit","captureSubmittingElement","form","clk","clk_x","clk_y","offsetLeft","offsetTop","opera","postError","feature","fileapi","formdata","FormData","hasProp","attr2","deepSerialize","extraData","part","serialized","fileUploadIframe","getDoc","doSubmit","checkState","io","SERVER_ABORT","timeoutHandle","$form","skipEncodingOverride","encoding","enctype","timedOut","CLIENT_TIMEOUT_ABORT","extraInputs","iframeTarget","$io","submitFn","aborted","callbackProcessed","iframeSrc","errMsg","isXml","XMLDocument","domCheckCount","docRoot","responseXML","content-type","Number","dt","scr","textarea","ta","pre","toXml","httpData","sub","execCommand","ignore","csrf_token","csrf_param","forceSync","ActiveXObject","loadXML","action","veto","beforeSerialize","qx","formToArray","semantic","beforeSubmit","q","callbacks","resetForm","clearForm","includeHidden","oldSuccess","replaceTarget","oldError","oldComplete","fileInputs","hasFileInputs","mp","multipart","fileAPI","jqxhr","shouldUseFrame","closeKeepAlive","serializedData","uploadProgress","upload","loaded","lengthComputable","formData","ajaxForm","delegation","ajaxFormUnbind","jmax","fieldValue","required","$input","formSerialize","fieldSerialize","successful","ops","clearFields","clearInputs","re","$sel","Zepto","__webpack_provided_window_dot_jQuery","calls","control","eid","raters","rater","meta","stars","serial","readOnly","cancel","cancelValue","star","half","stw","starWidth","spi","spw","margin-left","selfTriggered","fill","drain","draw","starson","wantCallBack","lastipt","each2","reinsertElement","stripDiacritics","DIACRITICS","equal","measureScrollbar","$template","MEASURE_SCROLLBAR_TEMPLATE","dim","clientWidth","clientHeight","splitVal","separator","getSideBorderPadding","outerWidth","installKeyUpChangeEvent","installFilteredMouseMove","lastpos","lastMousePosition","y","quietMillis","installDebouncedScroll","threshold","setSelectionRange","createTextRange","getCursorInfo","selectionStart","selectionEnd","createRange","moveStart","killEvent","killEventImmediately","measureTextWidth","sizer","currentStyle","fontSize","fontFamily","fontStyle","textTransform","whiteSpace","syncCssClasses","adapter","adapted","replacements","markMatch","markup","escapeMarkup","tl","defaultEscapeMarkup","replace_map","/","ajaxUrl","select2","ajaxDefaults","deprecated","page","hasError","local","dataText","dataItem","process","filtered","datum","childDatum","tags","checkFormatter","formatter","formatterName","countResults","defaultTokenizer","selectCallback","dupe","createSearchChoice","tokenSeparators","cleanupJQueryElements","SuperClass","Select2","KEY","AbstractSelect2","SingleSelect2","MultiSelect2","nextUid","$document","scrollBarDimensions","TAB","ENTER","ESC","SPACE","LEFT","UP","RIGHT","DOWN","SHIFT","CTRL","ALT","PAGE_UP","PAGE_DOWN","HOME","END","BACKSPACE","DELETE","isArrow","isControl","metaKey","isFunctionKey","Ⓐ","A","À","Á","Â","Ầ","Ấ","Ẫ","Ẩ","Ã","Ā","Ă","Ằ","Ắ","Ẵ","Ẳ","Ȧ","Ǡ","Ä","Ǟ","Ả","Å","Ǻ","Ǎ","Ȁ","Ȃ","Ạ","Ậ","Ặ","Ḁ","Ą","Ⱥ","Ɐ","Ꜳ","Æ","Ǽ","Ǣ","Ꜵ","Ꜷ","Ꜹ","Ꜻ","Ꜽ","Ⓑ","B","Ḃ","Ḅ","Ḇ","Ƀ","Ƃ","Ɓ","Ⓒ","C","Ć","Ĉ","Ċ","Č","Ç","Ḉ","Ƈ","Ȼ","Ꜿ","Ⓓ","D","Ḋ","Ď","Ḍ","Ḑ","Ḓ","Ḏ","Đ","Ƌ","Ɗ","Ɖ","Ꝺ","DZ","DŽ","Dz","Dž","Ⓔ","E","È","É","Ê","Ề","Ế","Ễ","Ể","Ẽ","Ē","Ḕ","Ḗ","Ĕ","Ė","Ë","Ẻ","Ě","Ȅ","Ȇ","Ẹ","Ệ","Ȩ","Ḝ","Ę","Ḙ","Ḛ","Ɛ","Ǝ","Ⓕ","F","Ḟ","Ƒ","Ꝼ","Ⓖ","G","Ǵ","Ĝ","Ḡ","Ğ","Ġ","Ǧ","Ģ","Ǥ","Ɠ","Ꞡ","Ᵹ","Ꝿ","Ⓗ","H","Ĥ","Ḣ","Ḧ","Ȟ","Ḥ","Ḩ","Ḫ","Ħ","Ⱨ","Ⱶ","Ɥ","Ⓘ","I","Ì","Í","Î","Ĩ","Ī","Ĭ","İ","Ï","Ḯ","Ỉ","Ǐ","Ȉ","Ȋ","Ị","Į","Ḭ","Ɨ","Ⓙ","J","Ĵ","Ɉ","Ⓚ","K","Ḱ","Ǩ","Ḳ","Ķ","Ḵ","Ƙ","Ⱪ","Ꝁ","Ꝃ","Ꝅ","Ꞣ","Ⓛ","L","Ŀ","Ĺ","Ľ","Ḷ","Ḹ","Ļ","Ḽ","Ḻ","Ł","Ƚ","Ɫ","Ⱡ","Ꝉ","Ꝇ","Ꞁ","LJ","Lj","Ⓜ","M","Ḿ","Ṁ","Ṃ","Ɱ","Ɯ","Ⓝ","N","Ǹ","Ń","Ñ","Ṅ","Ň","Ṇ","Ņ","Ṋ","Ṉ","Ƞ","Ɲ","Ꞑ","Ꞥ","NJ","Nj","Ⓞ","O","Ò","Ó","Ô","Ồ","Ố","Ỗ","Ổ","Õ","Ṍ","Ȭ","Ṏ","Ō","Ṑ","Ṓ","Ŏ","Ȯ","Ȱ","Ö","Ȫ","Ỏ","Ő","Ǒ","Ȍ","Ȏ","Ơ","Ờ","Ớ","Ỡ","Ở","Ợ","Ọ","Ộ","Ǫ","Ǭ","Ø","Ǿ","Ɔ","Ɵ","Ꝋ","Ꝍ","Ƣ","Ꝏ","Ȣ","Ⓟ","P","Ṕ","Ṗ","Ƥ","Ᵽ","Ꝑ","Ꝓ","Ꝕ","Ⓠ","Q","Ꝗ","Ꝙ","Ɋ","Ⓡ","R","Ŕ","Ṙ","Ř","Ȑ","Ȓ","Ṛ","Ṝ","Ŗ","Ṟ","Ɍ","Ɽ","Ꝛ","Ꞧ","Ꞃ","Ⓢ","S","ẞ","Ś","Ṥ","Ŝ","Ṡ","Š","Ṧ","Ṣ","Ṩ","Ș","Ş","Ȿ","Ꞩ","Ꞅ","Ⓣ","T","Ṫ","Ť","Ṭ","Ț","Ţ","Ṱ","Ṯ","Ŧ","Ƭ","Ʈ","Ⱦ","Ꞇ","Ꜩ","Ⓤ","U","Ù","Ú","Û","Ũ","Ṹ","Ū","Ṻ","Ŭ","Ü","Ǜ","Ǘ","Ǖ","Ǚ","Ủ","Ů","Ű","Ǔ","Ȕ","Ȗ","Ư","Ừ","Ứ","Ữ","Ử","Ự","Ụ","Ṳ","Ų","Ṷ","Ṵ","Ʉ","Ⓥ","V","Ṽ","Ṿ","Ʋ","Ꝟ","Ʌ","Ꝡ","Ⓦ","W","Ẁ","Ẃ","Ŵ","Ẇ","Ẅ","Ẉ","Ⱳ","Ⓧ","X","Ẋ","Ẍ","Ⓨ","Y","Ỳ","Ý","Ŷ","Ỹ","Ȳ","Ẏ","Ÿ","Ỷ","Ỵ","Ƴ","Ɏ","Ỿ","Ⓩ","Z","Ź","Ẑ","Ż","Ž","Ẓ","Ẕ","Ƶ","Ȥ","Ɀ","Ⱬ","Ꝣ","ⓐ","a","ẚ","à","á","â","ầ","ấ","ẫ","ẩ","ã","ā","ă","ằ","ắ","ẵ","ẳ","ȧ","ǡ","ä","ǟ","ả","å","ǻ","ǎ","ȁ","ȃ","ạ","ậ","ặ","ḁ","ą","ⱥ","ɐ","ꜳ","æ","ǽ","ǣ","ꜵ","ꜷ","ꜹ","ꜻ","ꜽ","ⓑ","b","ḃ","ḅ","ḇ","ƀ","ƃ","ɓ","ⓒ","c","ć","ĉ","ċ","č","ç","ḉ","ƈ","ȼ","ꜿ","ↄ","ⓓ","d","ḋ","ď","ḍ","ḑ","ḓ","ḏ","đ","ƌ","ɖ","ɗ","ꝺ","dz","dž","ⓔ","e","è","é","ê","ề","ế","ễ","ể","ẽ","ē","ḕ","ḗ","ĕ","ė","ë","ẻ","ě","ȅ","ȇ","ẹ","ệ","ȩ","ḝ","ę","ḙ","ḛ","ɇ","ɛ","ǝ","ⓕ","f","ḟ","ƒ","ꝼ","ⓖ","g","ǵ","ĝ","ḡ","ğ","ġ","ǧ","ģ","ǥ","ɠ","ꞡ","ᵹ","ꝿ","ⓗ","h","ĥ","ḣ","ḧ","ȟ","ḥ","ḩ","ḫ","ẖ","ħ","ⱨ","ⱶ","ɥ","ƕ","ⓘ","i","ì","í","î","ĩ","ī","ĭ","ï","ḯ","ỉ","ǐ","ȉ","ȋ","ị","į","ḭ","ɨ","ı","ⓙ","j","ĵ","ǰ","ɉ","ⓚ","k","ḱ","ǩ","ḳ","ķ","ḵ","ƙ","ⱪ","ꝁ","ꝃ","ꝅ","ꞣ","ⓛ","l","ŀ","ĺ","ľ","ḷ","ḹ","ļ","ḽ","ḻ","ſ","ł","ƚ","ɫ","ⱡ","ꝉ","ꞁ","ꝇ","lj","ⓜ","m","ḿ","ṁ","ṃ","ɱ","ɯ","ⓝ","n","ǹ","ń","ñ","ṅ","ň","ṇ","ņ","ṋ","ṉ","ƞ","ɲ","ʼn","ꞑ","ꞥ","nj","ⓞ","o","ò","ó","ô","ồ","ố","ỗ","ổ","õ","ṍ","ȭ","ṏ","ō","ṑ","ṓ","ŏ","ȯ","ȱ","ö","ȫ","ỏ","ő","ǒ","ȍ","ȏ","ơ","ờ","ớ","ỡ","ở","ợ","ọ","ộ","ǫ","ǭ","ø","ǿ","ɔ","ꝋ","ꝍ","ɵ","ƣ","ȣ","ꝏ","ⓟ","p","ṕ","ṗ","ƥ","ᵽ","ꝑ","ꝓ","ꝕ","ⓠ","q","ɋ","ꝗ","ꝙ","ⓡ","r","ŕ","ṙ","ř","ȑ","ȓ","ṛ","ṝ","ŗ","ṟ","ɍ","ɽ","ꝛ","ꞧ","ꞃ","ⓢ","s","ß","ś","ṥ","ŝ","ṡ","š","ṧ","ṣ","ṩ","ș","ş","ȿ","ꞩ","ꞅ","ẛ","ⓣ","t","ṫ","ẗ","ť","ṭ","ț","ţ","ṱ","ṯ","ŧ","ƭ","ʈ","ⱦ","ꞇ","ꜩ","ⓤ","u","ù","ú","û","ũ","ṹ","ū","ṻ","ŭ","ü","ǜ","ǘ","ǖ","ǚ","ủ","ů","ű","ǔ","ȕ","ȗ","ư","ừ","ứ","ữ","ử","ự","ụ","ṳ","ų","ṷ","ṵ","ʉ","ⓥ","v","ṽ","ṿ","ʋ","ꝟ","ʌ","ꝡ","ⓦ","w","ẁ","ẃ","ŵ","ẇ","ẅ","ẘ","ẉ","ⱳ","ⓧ","x","ẋ","ẍ","ⓨ","y","ỳ","ý","ŷ","ỹ","ȳ","ẏ","ÿ","ỷ","ẙ","ỵ","ƴ","ɏ","ỿ","ⓩ","z","ź","ẑ","ż","ž","ẓ","ẕ","ƶ","ȥ","ɀ","ⱬ","ꝣ","Ά","Έ","Ή","Ί","Ϊ","Ό","Ύ","Ϋ","Ώ","ά","έ","ή","ί","ϊ","ΐ","ό","ύ","ϋ","ΰ","ω","ς","prepareOpts","createContainer","liveRegion","role","aria-live","containerId","containerEventName","adaptContainerCssClass","containerCss","containerCssClass","elementTabIndex","dropdown","adaptDropdownCssClass","dropdownCssClass","queryCount","resultsPage","initContainer","highlightUnderEvent","_touchEvent","touchMoved","clearTouchMoved","selectHighlighted","loadMoreIfNeeded","updateResults","nextSearchTerm","initSelection","monitorSource","maximumInputLength","autofocus","searchInputPlaceholder","_sync","propertyObserver","disconnect","optionToData","idKey","populateResults","populate","depth","compound","innerContainer","formatted","sortResults","formatResultCssClass","formatResult","formatMatches","placeholderOption","more","elm","getPlaceholder","getPlaceholderOption","createSearchChoicePosition","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","mutations","observe","subtree","triggerSelect","choice","triggerChange","details","blurOnChange","isInterfaceEnabled","enabledInterface","enableInterface","_enabled","_readonly","opened","positionDropdown","bodyOffset","above","changeDirection","resultsListNode","$dropdown","outerHeight","dropHeight","$window","windowWidth","windowHeight","viewPortRight","viewportBottom","dropTop","dropLeft","enoughRoomBelow","enoughRoomAbove","dropWidth","enoughRoomOnRight","aboveNow","focusSearch","dropdownAutoWidth","bottom","dropdownCss","shouldOpen","clearDropdownAlignmentPreference","opening","mask","orient","selectOnBlur","noFocus","that","clearSearch","externalSearch","getMaximumSelectionSize","maximumSelectionSize","ensureHighlightVisible","hb","rb","topOffset","findHighlightableChoices","moveHighlight","choices","removeHighlight","_touchMoved","countSelectableResults","loadMorePadding","postprocessResults","formatLoadMore","postRender","queryNumber","lastTerm","showSearchInput","maxSelSize","formatSelectionTooBig","minimumInputLength","formatInputTooShort","showSearch","formatInputTooLong","formatSearching","formatAjaxError","formatNoMatches","highlighted","onSelect","firstOption","initContainerWidth","resolveContainerWidth","focusser","minimumResultsForSearch","shouldFocusInput","isFocused","elementLabel","idSuffix","originalTitle","openOnEnter","altKey","ctrlKey","shiftKey","allowClear","setPlaceholder","isPlaceholderOptionSelected","updateSelection","is_match","noHighlightUpdate","oldData","cssClass","formatSelection","formatSelectionCssClass","ordered","selectChoice","searchContainer","_this","keydowns","selectedChoice","unselect","resizeSearch","clearPlaceholder","getMaxSearchWidth","getVal","addSelectedChoice","tokenizer","closeOnSelect","enableChoice","enabledItem","disabledItem","setVal","minimumWidth","containerLeft","searchWidth","sideBorderPadding","buildChangeDetails","onSortStart","onSortEnd","multiple","allowedMethods","valueMethods","propertyMethods","methodsMap","multi","single","selectedObject","currentSearchTerm","msMaxTouchPoints","locales","limit","pageNumber","util","abstract","u","ui","COMMA","ESCAPE","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PERIOD","_focus","scrollParent","ie","removeUniqueId","innerWidth","focusable","tabbable","minHeight","borderWidth","selectstart","ie6","disableSelection","enableSelection","plugin","plugins","hasScroll","isOverAxis","isOver","widget","Widget","_createWidget","_proto","_childConstructors","_super","_superApply","widgetEventPrefix","widgetName","widgetBaseClass","widgetFullName","bridge","f","defaultElement","uuid","eventNamespace","_getCreateOptions","bindings","hoverable","_on","_trigger","_getCreateEventData","_destroy","_setOptions","_setOption","_off","_delay","_hoverable","_focusable","focusout","effect","effects","uiBackCompat","mouseup","_mouseInit","_mouseDown","_mouseDestroy","_mouseMoveDelegate","_mouseUpDelegate","_mouseStarted","_mouseUp","_mouseDownEvent","_mouseCapture","mouseDelayMet","_mouseDelayTimer","_mouseDistanceMet","_mouseDelayMet","_mouseStart","_mouseMove","_mouseDrag","_mouseStop","h","scrollbarWidth","getScrollInfo","scrollWidth","getWithinInfo","of","within","E","collision","S","T","N","C","my","offsetFractions","marginTop","targetWidth","targetHeight","elemWidth","elemHeight","collisionPosition","collisionWidth","collisionHeight","bgiframe","horizontal","vertical","important","fit","flip","flipfit","background","autoFocus","minLength","pending","isMultiLine","_isMultiLine","valueMethod","isNewMenu","keydown","_move","_keyEvent","_value","_searchTimeout","keypress","selectedItem","cancelBlur","searching","_initSource","menufocus","menuselect","_search","cancelSearch","_response","__response","_normalize","_suggest","_close","_renderMenu","refresh","_resizeMenu","_renderItemData","_renderItem","isFirstItem","isLastItem","escapeRegex","messages","noResults","primary","secondary","_determineButtonType","hasTitle","buttonElement","_resetButton","submenu","menus","activeMenu","mousedown .ui-menu-item > a","click .ui-state-disabled > a","click .ui-menu-item:has(a)","mouseenter .ui-menu-item","mouseleave .ui-menu","collapseAll","_keydown","previousPage","nextPage","_activate","previousFilter","filterTimer","aria-hidden","aria-expanded","_itemRole","listbox","_scrollIntoView","_startOpening","_hasScroll","_open","mouse","orientation","_keySliding","_mouseSliding","_animateOff","_handleIndex","_detectOrientation","_valueMin","handles","_start","_valueMax","_trimAlignValue","_slide","_stop","_refreshValue","elementSize","elementOffset","_normValueFromMouse","_clickOffset","_values","toFixed","_farbtastic","fb","linkTo","updateValue","unpack","rgb","hsl","RGBToHSL","updateDisplay","setHSL","HSLToRGB","pack","initWidget","browser","msie","radius","wheelWidth","square","markerSize","solidFill","cnvMask","ctxMask","cnvOverlay","ctxOverlay","translate","drawCircle","drawMask","color1","d1","nudge","angle1","lineWidth","d2","angle2","x1","sin","y1","x2","y2","am","tan","xm","ym","color2","corr","grad","createLinearGradient","addColorStop","fillStyle","beginPath","moveTo","quadraticCurveTo","lineTo","strokeStyle","stroke","restore","calculateMask","sizex","sizey","outputPixel","isx","isy","sq","getImageData","sz","buffer","putImageData","drawImage","cache_last","c_last","a_last","packDX","fillRect","drawMarkers","lw","angle","c1","c2","circles","clearRect","arc","backgroundColor","widgetCoords","mousemove","circleDrag","hue","atan2","sat","lum","dec2hex","m1","m2","hueToRGB","Tour","storage","_error","_options","steps","autoscroll","keyboard","backdropContainer","backdropPadding","redirect","orphan","basePath","afterSetState","afterGetState","afterRemoveState","onStart","tour","onEnd","onShow","onShown","onHide","onHidden","onNext","onPrev","onPause","onResume","onRedirectError","_force","_inited","_current","overlay","$element","$background","backgroundShown","overlayElementShown","addSteps","_i","_len","addStep","getStep","reflexElement","force","ended","_debug","setCurrentStep","_initMouseNavigation","_initKeyboardNavigation","_onResize","showStep","_makePromise","_callOnPromiseDone","hideStep","_showNextStep","_showPrevStep","goTo","endHelper","_setState","_clearTimer","_getState","restart","_removeState","pause","_paused","_duration","_timer","resume","_isLast","hideStepHelper","popover","reflex","_reflexEvent","_hideBackdrop","showStepHelper","skipToPrevious","showPopoverAndOverlay","_isRedirect","_redirect","_isJustPathHashDifferent","_isOrphan","_showBackdrop","getCurrentStep","_showOverlayElement","_showPopover","redraw","keyName","QUOTA_EXCEEDED_ERR","_state","showNextStepHelper","showPrevStepHelper","currentPath","_isHostDifferent","_isPathDifferent","currentURL","_getProtocol","_getHost","_getPath","_equal","_getQuery","_getHash","namespaceURI","$tip","isOrphan","shouldAddSmart","smartPlacement","_reposition","_center","$navigation","$next","$prev","$resume","offsetBottom","offsetRight","originalLeft","originalTop","tipOffset","_replaceArrow","dimension","$this","_hideOverlayElement","_hideBackground","elementData","_applyBackdropPadding","_getParams","paramsObject","obj1","obj2","define","optionsOverride","toastType","iconClass","getOptions","iconClasses","info","subscribe","warning","$toastElement","$container","getContainer","hideMethod","hideDuration","hideEasing","removeToast","getDefaults","tapToDismiss","toastClass","showMethod","showDuration","showEasing","extendedTimeOut","positionClass","timeOut","titleClass","messageClass","closeHtml","newestOnTop","publish","hideToast","override","endTime","delayedhideToast","intervalId","stickAround","toastId","$titleElement","$messageElement","$closeElement","closeButton","toastr","init_tag_click_function","tag_elt","click_func","tag_str","tag_name_and_value","autocomplete_tagging","init_delete_tag_image","delete_img","delete_tag_img_rollover","delete_tag_img","tag_button","tag_name_elt","prev_button","get_toggle_link_text_fn","toggle_link","ajax_delete_tag_url","tag_area","build_tag_button","tag_click_fn","editable","num_tags","input_size","in_form","use_toggle_link","item_id","add_tag_img","add_tag_img_rollover","ajax_autocomplete_tag_url","ajax_retag_url","ajax_add_tag_url","this_obj","tag_input_field","add_tag_button","after_toggle_fn","new_tag_button","tag_buttons","last_tag_button","zz","new_tag","cacheFlush","format_item_func","row_position","search_term","autocomplete_options","selectFirst","formatItem","autoFill","autocomplete_verheul","is_active","handle_document_click","hide_modal","show_modal","extra_buttons","init_fn","setContent","show_message","show_in_overlay","$overlay","dialog","$extraButtons","_bootstrapTour","gxy_root","tour_opts","hooked_tour_from_data","preclick","postclick","textinsert","TourItem","Tours","giveTour","tour_id","tourdata","ToursView","tpl","tourpage_template","tourtags","Untagged","tours","tourtagorder","addLogging","addTo","LOGGING_FNS","logFn","email","total_disk_usage","nice_total_disk_usage","quota_percent","is_admin","isAnonymous","isAdmin","loadFromApi","idOrCurrent","CURRENT_ID_STR","userFn","newModel","clearSessionStorage","userInfo","getCurrentUserFromApi","currentUser","FrameView","$option","cell","top_min","frame_max","top_max","frame_z","frame_counter","frame_uid","frame_list","frame_shadow","_frameInit","_frameResize","_panelRefresh","Close","frame_id","_toPixelCoord","_frameInsert","_panelAnimationComplete","DOMMouseScroll","mousedown .frame","mousedown .frame-background","mousedown .frame-scroll-up","mousedown .frame-scroll-down","mousedown .f-close","_eventFrameMouseDown","_frameIdentify","xy","_frameDragStart","_eventFrameMouseMove","event_xy_new","event_xy_delta","_frameScreen","min_dim","_toGridCoord","_frameOffset","_eventFrameMouseUp","_frameDragStop","_eventFrameClose","_eventHide","_eventPanelScroll","srcElement","_panelScroll","_eventPanelScroll_up","_eventPanelScroll_down","_frameFocus","_frameGrid","grid_location","px","sign","_toGrid","_toPixel","_isCollision","_locationRank","loc","top_new","screen_location","grid_rank","place_list","place","_framePlace","has_focus","on_click","menu_options","is_menu_button","tooltip_config","new_elem","IconButtonCollection","IconButtonMenuView","elt","create_icon_buttons_menu","global_config","button_config","data2","error_text","empty_text","searchable","individual","pagesize","_changeData","_changeDisabled","_changeWait","_changeVisible","_changeValue","_renderSearchable","_renderClassic","$select","_getValue","$resize","$resize_icon","currentY","currentHeight","all_button","_match","matched_tags","found","_setValue","exists","sorter","keep","setOnChange","Base","$message","$options","_templateOption","_messageShow","BaseIcons","_toolForm","VisibilityMixin","is_visible","ToolParameter","ToolParameterCollection","DataToolParameter","IntegerToolParameter","get_samples","d3","domain","ticks","FloatToolParameter","SelectToolParameter","subModelTypes","integer","Tool","description","outputs","remove_inputs","tool","incompatible_inputs","only_samplable_inputs","valid_inputs","apply_search_results","set_input_value","set_input_values","inputs_dict","input_name","_run","rerun","target_dataset","regions","target_dataset_id","get_inputs_dict","input_dict","additional_params","payload","tool_id","run_deferred","ToolCollection","ToolSectionLabel","ToolSection","clear_search_results","cur_label","all_hidden","ToolSearch","search_hint_string","min_chars_for_search","clear_btn_url","clear_key","do_search","ga","clear_search","ToolPanel","tool_search","tools","layout","parse_elt","elt_dict","model_class","panel_elt","BaseView","update_visible","ToolLinkView","templates","tool_link","formStyle","ToolSectionLabelView","ToolSectionView","update_open","panel_section","section_body","tool_view","label_view","click .toolSectionTitle > a","ToolSearchView","keyup :input","change :input","click #search-clear-btn","focus_and_select","query_changed","evData","ToolPanelView","handle_search_results","search_view","section_title_view","ToolFormView","tool_form","tool_panel_view","tool_form_view","show_tool","_toolFormBase","_toolFormBase2","_webhooks","_webhooks2","listen_to_history","buildmodel","build_url","build_data","job_id","_customize","error_message","err_msg","large","postchange","current_state","tool_version","execute_button","job_remap","job_def","$f","_templateSuccess","jobs","refreshContents","input_found","err_data","_templateError","job_inputs","batch_n","batch_src","job_input_id","input_value","input_field","input_def","batch","njobs","njobs_text","hid","_deferred","_deferred2","_formView","_formView2","_citationModel","_citationModel2","_citationView","_citationView2","_render","fixed_title","_operations","_footer","versions_button","narrow","sustain_version","versions","menu_button","biostar_url","prompt","origin","requirements","requirements_visible","_templateRequirements","sharable_url","function","_templateHelp","citations","$citations","ToolCitationCollection","CitationListView","nreq","requirements_message","req","requirements_link","has_deferred","ondblclick","onconfirm","cls_tr","$thead","$tbody","$tmessage","_row","dblclick","addHeader","appendHeader","align","_commit","_refresh","_onclick","old_value","_ondblclick","v_id","v_name","_templateRow","app","sum","flat_id","flat_dict","result_dict","convert","block_indices","block_prefix","block_label","test_param","selectedCase","matchCase","flat","collapsible_value","p_id","_iterate","visitInputs","new_id","truevalue","falsevalue","cases","_bibtex","parseBibtex","ENTRY_TYPES_","online","Citation","_fields","rawFields","Fields","lowerKey","entryType","EntryType","fields","BaseCitationCollection","HistoryCitationCollection","history_id","warn","lastTime","vendors","requestAnimationFrame","cancelRequestAnimationFrame","currTime","timeToCall","cancelAnimationFrame","features","compatible","CanvasRenderingContext2D","incompatibilities","migrateWarn","warnedAbout","migrateWarnings","migrateMute","migrateTrace","trace","migrateWarnProp","newValue","_definePropertyBroken","migrateVersion","migrateReset","compatMode","attrFn","oldAttr","valueAttrGet","valueAttrSet","rnoType","rnoAttrNodeType","rboolean","ruseDefault","lowerName","attrNode","oldInit","oldFind","oldParseJSON","rspaceAngle","rattrHashTest","rattrHashGlob","querySelector","err1","err2","findProp","uaMatch","ua","chrome","webkit","safari","boxModel","jQuerySub","superclass","rootjQuerySub","internalSwapCall","oldHook","oldFnData","clean","handleScript","jsTags","eventAdd","eventRemove","eventTrigger","oldToggle","oldLive","oldDie","die","oldLoad","ajaxEvents","rajaxEvent","rhoverHack","hoverHack","toggler","lastToggle","oldSelf","oldFnFind","oldDeferred","isResolved","isRejected","Autocompleter","inputClass","loadingClass","resultsClass","selectClass","queryParamName","extraParams","remoteDataType","lineSeparator","cellSeparator","minChars","maxItemsToShow","maxCacheLength","matchSubset","matchInside","mustMatch","selectOnly","showResult","preventDefaultReturn","preventDefaultTab","filterResults","sortFunction","onItemSelect","onNoMatch","onFinish","matchStringConverter","beforeUseConverter","autoWidth","useDelimiter","delimiterChar","delimiterKeyCode","onError","sanitizeResult","sanitizeInteger","stdValue","makeUrlParam","makeUrl","urlAppend","sortValueAlpha","plainTextParser","lines","cacheData_","cacheLength_","selectClass_","keyTimeout_","finishTimeout_","lastKeyPressed_","lastProcessedValue_","lastSelectedValue_","active_","finishOnBlur_","dom","$results","selectCurrent","focusPrev","focusNext","deactivate","onBlurFunction","totalHeight","inputBottom","bottomIfDown","topIfUp","cacheRead","filterLength","searchLength","maxPos","cacheWrite","callHook","hook","activateNow","fetchData","processResults","showResults","fetchRemoteData","remoteData","ajaxCallback","parseRemoteData","setExtraParam","defaultFilter","testValue","patternIndex","filterResult","converter","getValue","enableFinishOnBlur","disableFinishOnBlur","createItemFromResult","$li","selectItem","getItems","numResults","$ul","$first","firstItemClass","lastItemClass","focusItem","hideResults","lcValue","lcFilter","valueLength","getDelimiterOffsets","pad","setValue","selectRange","focusMove","modifier","$items","$item","displayValue","processedDisplayValue","delimiter","extraCaretPos","setCaret","moveEnd","getCaret","stored_range","duplicate","moveToElementText","setEndPoint","preCaretVal","postCaretVal","createClass","SPFormat","clipval","quartile","normalizeValue","normalizeValues","addCSS","ensureArray","formatNumber","RangeMap","MouseHandler","Tooltip","barHighlightMixin","bar","tristate","discrete","bullet","pie","defaultStyles","initStyles","VShape","VCanvas_base","VCanvas_canvas","VCanvas_vml","UNSET_OPTION","shapeCount","common","lineColor","fillColor","defaultPixelsPerValue","composite","tagValuesAttribute","tagOptionsPrefix","enableTagOptions","enableHighlight","highlightLighten","tooltipSkipNull","tooltipPrefix","tooltipSuffix","disableHiddenCheck","numberFormatter","numberDigitGroupCount","numberDigitGroupSep","numberDecimalMark","disableTooltips","disableInteraction","spotColor","highlightSpotColor","highlightLineColor","spotRadius","minSpotColor","maxSpotColor","normalRangeMin","normalRangeMax","normalRangeColor","drawNormalOnTop","chartRangeMin","chartRangeMax","chartRangeMinX","chartRangeMaxX","tooltipFormat","barColor","negBarColor","stackedBarColor","zeroColor","nullColor","zeroAxis","barWidth","barSpacing","chartRangeClip","colorMap","posBarColor","zeroBarColor","tooltipValueLookups","-1","1","thresholdColor","thresholdValue","targetColor","performanceColor","rangeColors","sliceColors","borderColor","boxLineColor","boxFillColor","whiskerColor","outlierLineColor","outlierFillColor","medianColor","showOutliers","outlierIQR","tooltipFormatFieldlistKey","lq","med","uq","lo","ro","rw","SPFormatClass","fre","precre","format","fclass","fieldset","lookups","lookupkey","fieldvalue","prec","lookup","spformat","vl","nf","vals","groupsize","groupsep","decsep","ignoreNull","createStyleSheet","WebkitAppearance","simpledraw","useExisting","interact","mhandler","sparkline","registerCanvas","cleardraw","RangeMapClass","rangelist","range_map","currentPageX","currentPageY","splist","over","displayTooltips","highlightEnabled","registerSparkline","sp","$canvas","mouseclick","removeTooltip","sparklines","currentEl","updatePosition","spcount","needsRefresh","clearRegionHighlight","tooltiphtml","changeEvent","localX","localY","setRegionHighlight","getCurrentRegionTooltip","disableHighlight","sizeStyle","tooltipClassname","sizetipStyle","tooltipOffsetX","tooltipOffsetY","sizetip","updateWindowDims","scrollRight","getSize","mousex","mousey","userValues","userOptions","sparkline_display_visible","pl","extendedOptions","tagOptionType","tagValCache","getTagSetting","mergedOptions","keyval","defaultval","tagOption","_base","currentRegion","initTarget","interactive","canvasWidth","pixelWidth","canvasHeight","pixelHeight","getRegion","newRegion","renderHighlight","changeHighlight","formats","formatlen","showFields","showFieldsKey","newFields","fv","fieldlen","getCurrentRegionFields","calcHighlightColor","mult","rgbnew","highlightColor","lighten","newShapes","shapeids","regionShapes","renderRegion","replaceWithShapes","newShape","replaceWithShape","shapes","vertices","regionMap","xvalues","yvalues","yminmax","hightlightSpotId","lastShapeId","highlightSpot","highlightLine","vertex","highlightSpotId","insertAfterShape","drawLine","canvasTop","highlightLineId","removeShapeId","scanValues","isStr","valcount","maxy","maxyorg","miny","minyorg","maxx","minx","processRangeOptions","drawNormalRange","canvasLeft","rangey","ytop","drawRect","rangex","yvallast","paths","xnext","xpos","xposnext","yvalcount","lineShapes","fillShapes","plen","valueSpots","hlSpotsEnabled","drawShape","getLastShapeId","isStackString","groupMin","groupMax","stackRanges","numValues","vlen","xaxisOffset","clipMin","clipMax","stacked","vlist","slen","svals","yoffset","yMaxCalc","stackMin","stackMax","totalBarWidth","stackTotals","stackRangesNeg","canvasHeightEf","colorMapByIndex","colorMapByValue","calcColor","stacknum","valuenum","newColor","yoffsetNeg","minPlotted","allMin","halfHeight","itemWidth","pheight","valueShapes","regiondata","shapeid","getShapeAt","fieldkey","shape","renderRange","renderPerformance","renderTarget","rn","rangeval","rangewidth","perfval","perfwidth","targetval","targettop","targetheight","p1","t0","newslice","renderSlice","circle","drawPieSlice","quartiles","loutlier","routlier","lwhisker","rwhisker","iqr","q1","q2","q3","unitSize","minValue","maxValue","appendShape","_pxregex","_genShape","startAngle","endAngle","getElement","_insert","_calculatePixelDims","shapetype","shapeargs","verticalAlign","shapeseq","currentTargetShapeId","_getContext","_drawShape","targetX","targetY","isPointInPath","_drawCircle","_drawPieSlice","closePath","_drawRect","sid","shapemap","groupel","insertAdjacentHTML","rendered","prerender","closed","vpath","startx","starty","endx","endy","vel","outerHTML","_reloadData","_backend","_storage_elm","E5","_observer_update","E6","_storage_service","jStorage","_load_storage","_handleTTL","_handlePubSub","_setupObserver","_storageObserver","updateTime","_observer_timeout","jStorage_update","_checkUpdatedKeys","newCrc32List","oldCrc32List","_storage","__jstorage_meta","CRC32","updated","_fireObservers","_observers","jlen","_publishChange","E8","_storage_size","_save","_dropOldEvents","E7","_checkKey","curtime","TTL","nextExpire","deleted","_ttl_timeout","PubSub","pubelm","_pubsubCurrent","_pubsub_last","_fireSubscribers","channel","_pubsub_observers","retire","_publish","murmurhash2_32_gc","charCodeAt","decode","evalJSON","encode","_XMLService","xmlNode","XMLSerializer","serializeToString","E1","E2","xmlString","resultXML","dom_parser","_xmlString","xml_doc","deleteKey","_is_xml","setTTL","ttl","getTTL","flush","storageObj","F","storageSize","currentBackend","storageAvailable","listenKeyChange","reInit","localStorageReallyWorks","BogusQuotaExceededErrorOnIos5","E3","globalStorage","hostname","E4","addBehavior","persisted","complexify","additionalComplexityForCharset","inBanlist","banMode","bannedPasswords","evaluateSecurity","complexity","valid","CHARSETS","strengthScaleFactor","MIN_COMPLEXITY","minimumChars","MAX_COMPLEXITY","COMPLEXIFY_BANLIST","transitionEnd","transEndEventNames","WebkitTransition","MozTransition","OTransition","transition","emulateTransitionEnd","called","Tab","$target","$active","tab","Constructor","hoverState","DEFAULTS","triggers","eventIn","eventOut","enter","leave","fixTitle","getDelegateOptions","autoToken","autoPlace","getPosition","actualWidth","actualHeight","orgPlacement","docScroll","parentWidth","parentHeight","parentLeft","calculatedOffset","getCalculatedOffset","applyPlacement","replaceArrow","arrow","getTitle","$e","$arrow","toggleEnabled","clearMenus","getParent","Dropdown","isActive","Popover","getContent","replace_big_select_inputs","min_length","max_length","select_elts","refresh_select2","select_elt","num_options","select_field","select_val","ref_on_change_vals","last_selected_value","_modal","_modal2","_asyncSaveText","_asyncSaveText2","_popupmenu","_popupmenu2","_autocom_tagging","_autocom_tagging2","_tours","_tours2","_queryStringParsing","async_save_text","onloadWebhooks","anchor","galaxy_main_exists","frames","galaxy_main","et","click_to_edit_elt","text_elt_id","save_url","text_parm_name","on_start","text_elt","old_text","ajax_data","processed_text","element_menu_exists","menu_element","close_popup","link","link_dom","confirmtext","amdi18n","Analyze Data","Workflow","Shared Data","Data Libraries","Histories","Workflows","Visualizations","Pages","New Track Browser","Saved Visualizations","Interactive Environments","Admin","Help","Support","Search","Mailing Lists","Videos","Wiki","How to Cite Galaxy","Interactive Tours","Login","Register","Login or Register","Logged in as","Preferences","Custom Builds","Logout","Saved Histories","Saved Datasets","Saved Pages","Account and saved data","Account registration or login","Support, contact, and community","Administer this Galaxy","Visualize datasets","Access published resources","Chain tools into workflows","Analysis home view","History Lists","Histories Shared with Me","Current History","Create New","Copy History","Share or Publish","Show Structure","Extract Workflow","Delete Permanently","Dataset Actions","Copy Datasets","Dataset Security","Resume Paused Jobs","Collapse Expanded Datasets","Unhide Hidden Datasets","Delete Hidden Datasets","Purge Deleted Datasets","Downloads","Export Tool Citations","Export History to File","Other Actions","Import from File","This history is empty","No matching datasets found","An error occurred while getting updates from the server","Please contact a Galaxy administrator if the problem persists","search datasets","You are currently viewing a deleted history!","You are over your disk quota","Tool execution is on hold until your disk usage drops below your allocated quota","All","None","For all selected","Edit history tags","Edit history Annotation","Click to rename history","Operations on multiple datasets","Hide datasets","Unhide datasets","Delete datasets","Undelete datasets","Permanently delete datasets","This will permanently remove the data in your datasets. Are you sure?","Annotation","This history is empty. Click 'Get Data' on the left tool menu to start","You must be logged in to create histories","Unable to purge dataset","Cannot display datasets removed from disk","This dataset must finish uploading before it can be viewed","This dataset is not yet viewable","View data","Download","Download dataset","Additional files","View details","This is a new dataset and not all of its data are available yet","You do not have permission to view this dataset","The job creating this dataset was cancelled before completion","This job is waiting to run","This dataset is currently uploading","Metadata is being auto-detected","This job is currently running","This job is paused. Use the \"Resume Paused Jobs\" in the history menu to resume","An error occurred with this dataset","No data","An error occurred setting the metadata for this dataset","There was an error getting the data for this dataset","This dataset has been deleted and removed from disk","This dataset has been deleted","This dataset has been hidden","database","Edit attributes","Cannot edit attributes of datasets removed from disk","Undelete dataset to edit attributes","This dataset must finish uploading before it can be edited","This dataset is not yet editable","Delete","Dataset is already deleted","View or report this error","Run this job again","Visualize","Visualize in","Undelete it","Permanently remove it from disk","Unhide it","You may be able to","set it manually or retry auto-detection","Edit dataset tags","Edit dataset annotation","Tool Help","Search Tool Shed","Monitor installing repositories","Manage installed tools","Reset metadata","Download local tool","Tool lineage","Reload a tool's configuration","Review tool migration stages","View Tool Error Logs","Manage Display Whitelist","Manage Tool Dependencies","Users","Groups","API keys","Impersonate a user","Quotas","Roles","Local data","Form Definitions","Enable/Disable Scratchbook","Show/Hide Scratchbook","Tags","Edit annotation","__ja","Search datasets","Edit history annotation","Search Tool Shed (Beta)","Form definitions","Administration","Server","Tools and Tool Shed","User Management","__fr","load your own data","get data from an external source","Include Deleted Datasets","Include Hidden Datasets","__zh","_i18n","userId","usefulToString","asStr","LoggingCache","_typeof","LOG","DEBUG","INFO","WARN","ERROR","METRIC","NONE","logLevel","defaultNamespace","clientPrefix","maxCacheSize","postSize","addTime","cacheKeyPrefix","postUrl","delayPostInMs","getPingData","onServerResponse","_parseLevel","_sending","_waiting","_postSize","_initCache","maxSize","_emitToConsole","upper","logArguments","_addToCache","_buildEntry","_postCache","toISOString","entriesLength","postData","metrics","post","responseJSON","_delayPost","whitelist","metric","_hasStorage","_initStorage","_cache","_fetchAndParse","overage","_unparseAndStore","print","_menu","_menu2","_scratchbook","_scratchbook2","_userQuotameter","_userQuotameter2","$navbarBrandLink","$navbarBrandImage","$navbarBrandTitle","$navbarTabs","$quoteMeter","quotaMeter","UserQuotaMeter","$download_link","logo_url","logo_src","_genericNavView","_genericNavView2","extendedNavItem","GenericNavView","helpTab","support_url","search_url","mailing_lists","screencasts_url","wiki_url","citation_url","terms_url","biostar_url_redirect","userTab","allow_user_creation","noscratchbook","activeView","active_view","$toggle","$note","click .dropdown-toggle","_formatUrl","menuItem","_buildMenuItem","_toggleClick","buildLink","makeModalIframe","persistent_communication_rooms","query_string","$el_chat_modal_header","$el_chat_modal_body","iframe_template","frame_width","frame_height","_uiFrames2","_visualization","_visualization2","_trackster","_trackster2","buttonActive","show_note","note_cls","buttonLoad","history_cache","addDataset","current_dataset","historyId","dataset_ids","_findDataset","history_details","dataset_list","_loadDatasetOffset","new_dataset_id","_loadDataset","new_dataset","is_tabular","addTrackster","viz_id","viz","TracksterUI","frame_config","view_config","stand_alone","latest_revision","create_visualization","$galaxy_main","async_ops","categorical_filters","sort_key","show_item_checkboxes","num_pages","cur_val","condition","condition_index","get_url","tmpl","grid_header","grid_table","info_text","global_actions","show_popup","grid_filters","columns","column","num_rows_rendered","encoded_id","current_item_id","nowrap","column_settings","column_config","attach_popup","label_id_prefix","use_paging","num_page_links","cur_page_num","page_link_range","min_page","min_offset","max_offset","max_range","max_page","page_index","allow_multiple","found_global","global_operation","legend","default_filter_dict","advanced_search_display","show_advanced_search_link","filterable","f_key","d_key","standard_search_display","grid_column_filter","column_label","is_text","temp_column","column_filter","seperator","cf_label","cf","cf_key","cf_arg","filter_key","precise","$slider","pressed","_isParameter","has_slider","slider","header_index","header_id","is_expanded","$subgroup","attach","iterate","has_options","new_header","$group","_tracks","_tracks2","_queryStringParsing2","baseURL","save_viz","annotation","overview_track_name","overview_drawable","viz_config","to_dict","overview","vis_id","vis_info","has_changes","createButtonMenu","new_tracks","track","add_drawable","object_from_template","DrawableGroup","force_right_panel","handle_unsaved_changes","buttonMenu","add_bookmark","bookmarks_container","new_bookmark","position_div","annotation_div","delete_icon_container","viewport_config","drawables_config","bookmarks_config","TracksterView","editor","load_chroms_deferred","overview_drawable_name","change_chrom","set_overview","bookmark","set_up_router","init_keyboard_nav","move_fraction","viewport_container","Leave without Saving","Save","resize_window","galaxy_config","view_existing","choose_existing_or_new","view_new","listTracksParams","dataset_params","View in saved visualization","view_in_saved","View in new visualization","tracks_grid","Add to visualization","init_editor","template_view_new","Create","create_browser","dbkeys_in_genomes","default_dbkey","add_dataset","track_data","places","supportsByteRanges","_viz_views","_viz_views2","_slotting","_slotting2","_painters","_painters2","_filters","_filters2","_tools","_tools2","_bbiDataManager","_bbiDataManager2","html_elt_js_obj_dict","is_container","moveable","handle_class","container_selector","element_js_obj","cur_container","remove_drawable","add_drawable_before","move_drawable","DATA_NOCONVERTER","CONTINUOUS_DATA_MODES","Drawable","obj_dict","id_counter","drag_handle_class","is_overview","action_icons","config_params","config_onchange","build_container_div","header_div","header_view","TrackHeaderView","icons_div","action_icons_def","css_class","on_click_fn","drawable","toggle_icon","hide_contents","show_contents","can_draw","request_draw","_draw","set_name","new_name","old_name","revert_name","update_intro_div","update_icons","get_drawables","DrawableCollection","unpack_drawables","drawables_array","dictified_drawables","replace_drawable","old_drawable","new_drawable","update_html","new_position","get_tracks","track_type","content_div","FiltersManager","parent_div","saved_filters_managers","old_manager","setup_multitrack_filtering","show_composite_track","clear_filters","_restore_filter_managers","clear_tile_cache","tiles_div","num_drawables","composite_icon","filters_icon","CompositeTrack","a_type","get_type","num_feature_tracks","can_composite","FeatureTrack","LineTrack","shared_filters","remove_all","new_filter","filter_name","NumberFilter","init_filters","composite_track","label_tracks","tracks_to_be_redrawn","zoom_factor","min_separation","canvas_manager","requested_redraw","parent_element","top_container","browser_content_div","bottom_container","top_labeltrack","intro_div","nav_container","nav","overview_viewport","overview_close","overview_highlight","overview_box_background","overview_box","default_overview_height","nav_controls","chrom_select","submit_nav","location_span","nav_input","all_features","feature_search_deferreds","dataset_features","hidden_input","zo_link","zoom_out","zi_link","zoom_in","load_chroms","current_x","delta_chrom","move_delta","reset_overview","original_low","current_height","new_scroll","span","update_location","old_low","request_redraw","add_label_track","LabelTrack","resize_timer","get_base_color","trigger_navigate","new_chrom","new_low","new_high","url_parms","reference","ref_track","ReferenceTrack","reference_track","chrom_option","prev_chroms","next_chroms","chrom_start_index","start_index","chrom_pos","fraction","current_chrom_span","data_fetch","redraw_on_move_fn","label_track","track_list","track_options","_redraw","resolution_px_b","left_px","width_px","point","cur_center","new_half","resize_viewport","postdraw_actions","TracksterTool","tool_state","state_dict","ToolParameterView","param_div","update_value","update_event","TracksterToolView","set_visible","param_view","run_tool_row","run_on_dataset_button","run_on_region","run_on_dataset","update_params","url_params","current_track","track_name","tool_region_and_parameters_str","new_track","init_for_tool_data","change_mode","set_filters_manager","set_dataset","success_callback","FilterScaler","default_val","Scaler","gen_val","feature_data","MAX_VALUE","Tile","w_scale","html_elt","predisplay_actions","LineTrackTile","FeatureTrackTile","all_slotted","feature_mapper","incomplete_features","seq_data","has_icons","other_tiles_features_drawn","Track","dataset_check_type","data_url_extra_params","data_query_wait","data_and_mode_compatible","min_height_px","max_height_px","visible_height_px","add_resize_handle","regions_to_use","view_region","bookmarked_regions","No","Yes","on_resize","in_handle","in_drag","drag_control","original_height","new_height","tile_cache","ReadTrack","VariantTrack","msg_html","retry","init_deferred","kind","valid_chroms","predraw_init","msg_elt","stats","min_value","max_value","mean","sd","TiledTrack","filters_available","left_offset","dynamic_tool_div","overlay_div","slotters","max_rows","set_min_max","new_mode","mode_icon","tools_icon","param_space_viz_icon","_gen_tile_cache_key","tile_region","before_draw","clear_after","tile_promise","tile_width","tile_index","tile_promises","tiles","draw_helper","tile","_add_yaxis_label","on_change","pref_name","get_mode","update_auto_mode","display_mode","_get_drawables","show_tile","get_tile_data","data_mode","tile_data","tile_drawn","tracks_data","drawing_modes","drawing_heights","get_canvas_height","tile_low","tile_high","globalAlpha","globalCompositeOperation","draw_tile","canvas_width","_draw_line_track_tile","LinePainter","ref_seq","tile_element","track_height","extra_info","tickDistance","new_div","screenPosition","display_modes","build_config_params","show_group","visible_height","init_deferreds","update_all_min_max","max_height","new_visible","cur_visible","subset","textAlign","str_len","fillText","BBIDataManager","DiagonalHeatmapTrack","DiagonalHeatmapPainter","summary_draw_height","start_end_dct","set_painter_from_config","painter","ArcLinkedFeaturePainter","LinkedFeaturePainter","all_incomplete_features","inc_features","tile_incomplete_features","new_canvas_ctx","new_tile","update_ui_elt","example_feature","applies_to","show_more_rows_icon","incremental_slots","slotter","FeatureSlotter","slot_features","rows_required","dummy_painter","get_required_height","cur_tile","slots","hide_feature","flen","update_attrs","filter_alpha_scaler","alpha_filter","filter_height_scaler","height_filter","draw_results","translation","VariantPainter","deferreds","line_track_tiles","sample_names","font_size","font-size","samples_div_html","line-height","ReadPainter","addable_objects","VcfTrack","drawable_type","update_name","render_action_icons","icon_dict","add_action_icon","set_display_modes","new_modes","init_mode","mode_mapping","SlottedInfo","slot","include_label","_get_draw_coords","draw_start","draw_end","f_name","text_len","_find_slot","draw_coords","slot_num","has_overlap","k_len","s_e","feature_uid","undone","highest_slot","slotted_info","old_draw_coords","new_draw_coords","slotted_coords","dc","first_region","second_region","is_overlap","overlap","dashedLine","dashLen","dX","dY","dashes","sqrt","dashX","dashY","drawDownwardEquilateralTriangle","down_vertex_x","down_vertex_y","side_len","DrawResults","Painter","view_start","view_end","default_prefs","get_start_draw_pos","_chrom_pos_to_draw_pos","get_end_draw_pos","get_draw_pos","overflow_color","in_path","vertical_range","height_px","y_zero","x_scaled","delta_x_pxs","delta_x_px","painter_color","block_color","pref_color","pref_r","pref_g","pref_b","top_overflow","bot_overflow","saturation","new_r","new_g","new_b","overflow_x","FeaturePositionMapper","slot_height","feature_positions","y_translation","map_feature_data","x_start","x_end","get_feature_data","feature_dict","FeaturePainter","alpha_scaler","height_scaler","max_label_length","connector_color","required_height","get_row_height","y_scale","get_top_padding","x_draw_coords","feature_start","feature_end","draw_element","draw_background_connector","draw_individual_connectors","y_start","feature_name","feature_strand","f_start","f_end","thick_start","thick_end","reverse_strand_color","label_color","feature_ts","feature_te","feature_blocks","full_height","thin_height","thick_height","cur_y_start","cur_height","SQUISH_FEATURE_HEIGHT","last_block_start","last_block_end","block","block_start","block_end","block_thick_start","block_thick_end","draw_connector","hscale_factor","ws_height","base_color_fn","show_insertions","_parse_cigar","cigar_str","cigar_ops","blocks","cur_block","base_pos","parsed_cigar","op_len","op_char","cigar","draw_read","strand","read_seq","get_draw_coord","sequence_coord","s_start","s_end","base_offset","seq_offset","gap","detail_block_color","pack_mode","draw_height","rect_y","paint_utils","ReadPainterUtils","drawing_blocks","draw_last","cig_id","cig","cig_op","cig_len","cur_seq","start_pos","show_differences","c_start","draw_deletion","insert_x_coord","seq","x_center","connector","b1_end","b2_start","line_height","longest_feature_length","calculate_longest_feature_length","view_range","block1_start","block1_end","block2_start","block2_end","Color","alpha","toCSS","toHSL","toARGB","mix","weight","w1","w2","LinearRamp","start_color","end_color","start_value","end_value","value_range","map_value","SplitRamp","middle_color","positive_ramp","negative_ramp","pos_color","neg_color","s1","e1","s2","e2","invsqrt2","ramp","rotate","row_height","px_per_base","draw_details","delete_details_thickness","thickness","divider_height","summary_height","show_sample_data","locus_data","ref","alt","sample_gts","allele_counts","variant","draw_x_start","draw_y_start","genotype","get_indel_info","ref_len","alt_len","base_px","feature_height","draw_summary","alt_info","indel_info","allele_frac","snp","Filter","tool_exp_name","create_action_icon","slider_label","filter_label","values_span","values_span_container","slider_div","control_element","get_slider_step","slide","multi_value","slider_row","slider_min","slider_max","invalid","a_val","display_controls_div","transparency_icon","height_icon","_keep_val","to_filter","returnVal","alpha_filter_name","height_filter_name","filters_dict","run_buttons_row","filter_manager","filter_dicts","tool_filter_conditions","get_or_create_dict_item","new_item","active_filters","active_filters_list","run_filter","input_dataset_id","filter_tuple","tool_filters","tool_filter_str","cond","run_tool_url","_formRepeat","_formRepeat2","_formInput","_formInput2","_formParameters","_formParameters2","parameters","_addConditional","_addRepeat","_addSection","_addRow","case_def","section_row","nonhidden","sub_section","_append","sub_section_id","block_index","repeat","ondel","onnew","n_cache","hideOptions","hide_label","text_value","collapsible_preview","fixed","button_new","$list","button_delete","app_options","text_enable","text_disable","cls_enable","cls_disable","$field","$preview","$collapsible","$collapsible_text","$collapsible_icon","$error_text","$error","help_argument","collapsible_state","_uiSelectContent","_uiSelectContent2","_uiSelectLibrary","_uiSelectLibrary2","_uiSelectFtp","_uiSelectFtp2","_uiSelectGenomespace","_uiSelectGenomespace2","_uiColorPicker","_uiColorPicker2","data_column","genomebuild","data_collection","boolean","drill_down","hidden_data","baseurl","library_data","ftpfile","genomespacefile","fieldClass","_fieldSelect","_fieldText","_fieldData","extensions","flavor","is_workflow","SelectClass","_fieldDrilldown","str_value","_fieldSlider","_fieldHidden","_fieldBoolean","_fieldColor","_fieldLibrary","_fieldFtp","_fieldGenomeSpace","_fieldUpload","Batch","DISABLED","ENABLED","LINKED","Configurations","data_multiple","workflow_data","workflow_data_multiple","workflow_data_collection","module_data","module_data_collection","src_labels","hda","hdca","pagelimit","statustimer","button_product","$batch_div","$batch","linked","lastenter","_handleDrop","_changeCurrent","_changeType","id_list","_batch","$batchfield","batchmode","button_type","config_id","button_data","button_width","select_options","drop_data","getData","new_src","history_content_type","current_value","_handleDropStatus","map_over_type","_uiTable","_uiList","_uiList2","Libraries","LibraryDatasets","library_id","libraries","datasets","library_select","ftpfile_list","_toolGenomespace","_toolGenomespace2","browse_button","browseGenomeSpace","filename_textbox","token_textbox","openFileBrowser","successCallback","destination","GS_UI_URL","genomespace_ui_url","GS_UPLOAD_URL","newWin","successCalBack","setCallbackOnGSUploadError","standard","theme","$view","$value","_build","$boxes","_templateCheck","hex","_content","line_def","_templateContent","$line","$box","_templateBox","BibtexParser","arg0","tempStorage","parser","getErrors","STATES_","ENTRY_OR_JUNK","OBJECT_TYPE","ENTRY_KEY","KV_KEY","EQUALS","KV_VALUE","DATA_","CALLBACK_","CHAR_","LINE_","CHAR_IN_LINE_","SKIPWS_","SKIPCOMMENT_","PARSETMP_","SKIPTILLEOL_","VALBRACES_","BRACETYPE_","BRACECOUNT_","STATE_","ERRORS_","inproceedings","proceedings","article","techreport","misc","mastersthesis","book","phdthesis","incollection","unpublished","inbook","manual","periodical","booklet","masterthesis","conference","MACROS_","jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","processCharacter_","error_","processEntry_","CHARCONV_","rep","processed","skip","ObjectType","AnotherIteration","ot","Key","EntryKey","Value","{","delim","doneParsingValue","macro","CitationView","formattedReference","authorsAndYear","_asSentence","author","year","pages","volume","journal","booktitle","howpublished","institution","_formatBookInfo","doiUrl","doi","chapter","publisher","series","issn","renderCitation","click .citations-to-bibtex","click .citations-to-formatted","citation","citationView","rawTextarea","citationsElement","showFormatted","showBibtex","partialWarningElement","_bigwig","makeBwg","bb","readWigData","MIN_VALUE","score","spans","jszlib","DASFeature","DASGroup","readInt","ba","xhrObj","bwg_readOffset","M1","M2","M3","M4","BigWig","BigWigView","bwg","cirTreeOffset","cirTreeLength","isSummary","Uint8Array","sa","Int16Array","la","Int32Array","magic","BIG_WIG_MAGIC","BIG_BED_MAGIC","BIG_WIG_MAGIC_BE","BIG_BED_MAGIC_BE","numZoomLevels","chromTreeOffset","unzoomedDataOffset","unzoomedIndexOffset","fieldCount","definedFieldCount","asOffset","totalSummaryOffset","uncompressBufSize","extHeaderOffset","zoomLevels","zl","zlReduction","zlData","zlIndex","reduction","dataOffset","indexOffset","readChromTree","getAutoSQL","as","schema","BBIExtraIndex","bbi","Range","jszlib_inflate_buffer","inflateBuffer","arrayCopy","BED_COLOR_REGEXP","thisB","chromsToIDs","idsToChroms","maxID","udo","bpt","keySize","bptReadNode","cnt","childOffset","ki","chromId","chrName","chr","readWigDataById","cirHeader","cirBlockSize","blocksToFetch","outstanding","fmin","fmax","toks","cirFobRecur","instrument","cachedCirRoot","cirFobRecur2","fetchFeatures","maxCirBlockSpan","blockSpan","fetchRanges","ranges","fr","cirFobStartFetch","attempts","resultBuffer","cirBlockData","isLeaf","startChrom","startBase","endChrom","endBase","blockOffset","blockSize","recurOffsets","b0","createFeature","_chromId","segment","tramp","parseFeatures","fetchStart","fetchSize","bi","fa","Float32Array","itemCount","byteLength","validCnt","maxVal","sumData","summaryOpts","maxScore","blockStart","itemStep","itemSpan","blockType","dfc","ch","bedColumns","featureOpts","itemRgb","thickStart","thickEnd","blockCount","blockSizes","blockStarts","exonFrames","grp","notes","geneId","geneName","geneName2","gg","spanList","bmin","bmax","tsList","ts","codingRegion","tlList","readingFrame","tlOffset","readframe","brf","readframeExplicit","getFirstAdjacent","getFirstAdjacentById","blockToFetch","bestBlockChr","bestBlockOffset","chrx","bestFeature","bestChr","bestPos","fi","bestRecur","getUnzoomedView","getZoomedView","unzoomedView","cirLen","z","zh","_tsFetch","topLevelReductionCache","feats","thresholdSearch","referencePoint","fbThresholdSearchRecur","candidates","chrOrd","candidate","rp","fromRef","initialChr","chrId","header_re","field_re","headerMatch","declType","comment","getExtraIndices","extraIndexCount","extraIndexListOffset","eil","indices","ii","eiType","eiFieldCount","eiOffset","eiField","nodeOffset","valSize","Uint16Array","Uint32Array","lastChildOffset","localeCompare","_min","_max","_Compound","sorted","_rangeOrder","_ranges","s0","insertRange","r0","l0","l1","i0","i1","lapMin","lapMax","coverage","tot","rl","ri","rangeOrder","isContiguous","_pushRanges","lower_bound","lb","ub","rangeOver","ZStream","Inflate","was","InfBlocks","checkfn","hufts","MANY","IB_TYPE","table","blens","codes","InfCodes","bitk","bitb","inftree","InfTree","inflate_trees_fixed","bl","bd","fixed_bl","fixed_bd","fixed_tl","fixed_td","Z_OK","srcOffset","destOffset","arrayCopy_fast","hasSubarray","subarray","BYTES_PER_ELEMENT","byteOffset","arrayCopy_slow","afterUncOffset","inflateInit","DEF_WBITS","next_in","next_in_index","avail_in","oBlockList","totalSize","obuf","next_out","next_out_index","avail_out","inflate","Z_NO_FLUSH","Z_STREAM_END","Z_BUF_ERROR","newob","out","cursor","inflate_mask","cplens","cplext","cpdist","cpdext","istate","inflateEnd","inflateSync","inflateSetDictionary","dictionary","dictLength","inflateReset","total_in","total_out","free","wbits","marker","need","adler","proc","_adler","adler32","set_dictionary","mark","inflateSyncPoint","sync_point","INFBLOCKS_BORDER","inflate_flush","inflate_trees_bits","inflate_trees_dynamic","tl_index","td_index","lbits","dbits","ltree","ltree_index","dtree","dtree_index","tree","tindex","inflate_fast","tree_index","lit","dist","tp","tp_index","ml","md","tp_index_t_3","huft_build","bindex","hp","hn","xp","initWorkArea","nl","nd","vsize","BMAX","testArray","native","xhrId","xhrCallbacks","getNative","warnAtPercent","errorAtPercent","isOverQuota","_render_quota","modelJson","$meter","_templateQuotaMeter","$bar","_render_usage","usage","_templateUsage","meterHtml"],"mappings":"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AAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,KAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAAAC,IAAA,IAA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/9B,QAAA+xD,EAAAz2D,EAAA+kK,kBAAA,EAIA,QAAAC,KACA,GAAAxgJ,GAAAie,EAAA/jC,MAAA4M,MACA25J,EAAA,EAAAC,GAAA,CAGA,IAAAL,EAAArgJ,GAQAygJ,EAAA,MALA,QAAA9qK,GAAAgrK,EAAArqK,OAAA,EAA2CX,GAAA,EAAQA,IACnD8qK,GAAAL,EAAApgJ,EAAA2gJ,EAAAhrK,GAQA8qK,GAAAj6J,KAAAwrD,IAAAxrD,KAAAs6B,IAAA2/H,EAAAzgJ,EAAA1pB,UAAA,EAAAkF,EAAAolK,qBAEAF,EAAAD,EAAAI,GAAA7gJ,EAAA1pB,QAAAkF,EAAAslK,aAGAL,IAAAM,EAAA,IACAN,IAAA,QAAAA,EAEA59J,EAAAhN,KAAAqE,KAAAwmK,EAAAD,GArKA,GAAAI,GAAA,GACAE,EAAA,IACAJ,IAGA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,UAGA,UACA,UACA,UACA,UACA,UACA,UACA,WACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,YACA,aACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cACA,cAGAp5H,GACAu5H,aAAA,EACAF,oBAAA,EACAL,gBAAAxqK,OAAAirK,uBACAV,QAAA,SAkEA,OA/DAriI,GAAArjC,WAAAY,KAAAqH,IACAA,EAAArH,EACAA,MAGAA,EAAAyiC,EAAA57B,OAAAklC,EAAA/rC,GAoDAtB,KAAAuB,KAAA,WACAwiC,EAAA/jC,MAAA4M,OACA05J,EAAAv/J,MAAA/G,QAIAA,KAAAuB,KAAA,WACAwiC,EAAA/jC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AClB,cAAiB,MACjB,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,gBACA,cACA,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,kBACA,YAAe,MACf,cAAiB,MACjB,YAAe,MACf,cAAiB,MACjB,YAAe,MACf,cAAiB,MACjB,YAAe,MACf,YAAe,MACf,YAAe,MACf,cACA,aAAgB,MAChB,eAAkB,MAClB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,cACA,cACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,eACA,eACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,aAAgB,MAChB,aAAgB,MAChB,aAAgB,MAChB,aAAgB,MAChB,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,YAAe,MACf,sBACA,sBACA,gBACA,2BACA,YAAe,MACf,oBACA,qBACA,qBACA,oBACA,qBACA,uBACA,sBACA,qBACA,oBACA,oBACA,oBACA,oBACA,sBACA,qBACA,oBACA,oBACA,sBACA,oBACA,oBACA,qBACA,sBACA,kBACA,oBACA,mBACA,oBACA,mBACA,oBACA,oBACA,sBACA,qBACA,oBACA,oBACA,oBACA,oBACA,oBACA,oBACA,sBACA,sBACA,sBACA,qBACA,oBACA,2BACA,qBACA,qBACA,oBACA,qBACA,qBACA,qBACA,oBACA,mBACA,2BACA,+BACA,WAAc,MACd,WAAc,MACd,yBACA,WAAc,MACd,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,sBACA,oBACA,kBACA,qBACA,kBACA,mBACA,YAAe,MACf,YAAe,MACf,YAAe,MACf,gBAAmB,MACnB,YAAc,MACd,kBAAqB,MACrB,wBAA2B,MAC3B,+BAAkC,MAClC,kBACA,iBACA,kBACA,kBACA,oBACA,iBACA,gBACA,kBACA,iBACA,kBACA,mBACA,eACA,eACA,gBACA,kBACA,gBACA,oBACA,gBACA,gBACA,gBACA,kBACA,2BAA8B,MAC9B,2BAA8B,MAC9B,sBAAyB,MACzB,wBAA2B,MAC3B,oBAAuB,MACvB,qBAAwB,MACxB,kCAAqC,MACrC,kBACA,iBACA,kBACA,kBACA,oBACA,iBACA,gBACA,sBACA,iBACA,kBACA,mBACA,eACA,eACA,eACA,eACA,gBACA,qBACA,kBACA,gBACA,oBACA,mBACA,gBACA,gBACA,kBACA,oBAAuB,MACvB,uBAA0B,MAC1B,YAAe,MACf,wBAA2B,MAC3B,sBAAyB,MACzB,8BAAiC,MACjC,yBACA,oBACA,gBACA,kBACA,mBACA,oBACA,oBACA,kBACA,kBACA,qBACA,mBACA,sBACA,wBACA,2BACA,4BACA,0BAA6B,MAC7B,2BACA,4BACA,2BACA,2BACA,2BACA,4BACA,4BACA,6BACA,0BAA6B,MAC7B,8BACA,6BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,0BACA,0BACA,8BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,2BACA,6BACA,8BACA,4BACA,8BACA,6BACA,2BACA,2BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,0BACA,0BACA,8BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,0BACA,2BACA,2BACA,6BACA,8BACA,4BACA,8BACA,6BACA,2BACA,2BACA,2BACA,4BACA,0BAA6B,MAC7B,2BACA,4BACA,2BACA,2BACA,2BACA,4BACA,4BACA,6BACA,0BAA6B,MAC7B,8BACA,6BACA,8BACA,8BACA,4BACA,6BACA,6BACA,6BACA,6BACA,gCACA,gCACA,6BACA,gCACA,gCACA,4BACA,4BACA,4BACA,4BACA,6BACA,4BACA,2BACA,2BACA,iCACA,iCACA,mCACA,mCACA,2BACA,2BACA,8BACA,8BACA,kCACA,yCACA,iCACA,kCACA,kCACA,8BACA,8BACA,4BACA,4BACA,8BACA,8BACA,4BACA,4BACA,8BACA,8BACA,6BACA,6BACA,6BACA,6BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,6BACA,6BACA,2BACA,2BACA,4BACA,4BACA,8BACA,8BACA,6BACA,6BACA,6BACA,6BACA,0BACA,0BACA,8BACA,8BACA,6BACA,6BACA,8BACA,8BACA,+BACA,+BACA,+BACA,+BACA,6BACA,6BACA,8BACA,8BACA,iCACA,iCACA,iCACA,4BACA,4BACA,4BACA,4BACA,+BACA,+BACA,2BACA,2BACA,8BACA,8BACA,+BACA,+BACA,6BACA,6BACA,qBAAwB,MACxB,mBAAsB,MACtB,sBAAyB,MACzB,sBAAyB,MACzB,uBAA0B,MAC1B,mBAAsB,MACtB,mBAAsB,MACtB,uBAA0B,MAC1B,qBACA,uBACA,uBACA,wBAA2B,MAC3B,iBACA,sBACA,6BACA,8BACA,uBACA,0BACA,uBACA,kBACA,4BACA,+BACA,sBACA,0BACA,2BACA,qBACA,wBACA,4BAA+B,MAC/B,yBAA2B,MAC3B,kBACA,mBACA,iBAAoB,MACpB,kBAAqB,MACrB,kBAAqB,MACrB,mBAAsB,MACtB,iBAAoB,MACpB,mBACA,kBAAqB,MACrB,mBAAsB,MACtB,kBAAqB,MACrB,kBAAqB,MACrB,iBAAoB,MACpB,gCACA,eACA,iBAAoB,MACpB,iBAAoB,MACpB,kBAAqB,MACrB,mBAAsB,MACtB,iBAAoB,MACpB,oBACA,0BACA,iBAAoB,MACpB,kBACA,gBACA,mBAAsB,MACtB,2BAA8B,MAC9B,eACA,kBAAqB,MACrB,mBAAsB,MACtB,kBAAqB,MACrB,kBAAqB,MACrB,kBAAqB,MACrB,kBAAqB,MACrB,kBAAqB,MACrB,kBACA,iBACA,kBACA,mBACA,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,wBAA2B,MAC3B,sBACA,oBACA,uBACA,sBACA,2BACA,wBACA,oBACA,oBACA,oBACA,oBACA,uBACA,wBACA,2BACA,2BACA,6BACA,8BACA,0BACA,2BACA,mBACA,0BACA,2BACA,0BACA,2BACA,gCACA,4BACA,gBACA,gBACA,2BAA8B,MAC9B,2BACA,4BACA,4BACA,6BACA,0BACA,4BACA,2BACA,0BACA,2BACA,6BACA,6BACA,4BACA,4BACA,2BACA,4BACA,2BACA,uBACA,6BACA,2BACA,8BACA,8BACA,uBACA,4BACA,wBACA,sBACA,oBACA,uBACA,sBACA,2BACA,wBACA,uBACA,wBACA,4BACA,6BACA,mBACA,uBACA,oBACA,mBACA,oBACA,uBACA,kBACA,eACA,oBACA,eACA,oBACA,iBACA,mBACA,gBACA,eACA,oBACA,qBACA,iBACA,mBACA,iBACA,mBACA,kBACA,uBACA,kBACA,0BACA,2BACA,gBACA,iBACA,qBACA,sBACA,kBACA,gBACA,gBACA,gBACA,gBACA,wBACA,gCACA,iBACA,yBACA,wBACA,wBACA,2BAA8B,MAC9B,2BAA8B,MAC9B,sBACA,oBACA,kBACA,2BAA8B,MAC9B,6CAAgD,MAChD,uBACA,gBACA,oBACA,qBACA,eACA,qBACA,2BAA8B,MAC9B,gCACA,kBACA,uBACA,iBACA,2BACA,sBACA,mBACA,wBACA,qBACA,sBACA,4BACA,qBACA,kBACA,mBACA,kCACA,mBACA,+BACA,kBACA,4BACA,qBACA,0BACA,yBACA,mBACA,mBACA,sBACA,2BAA8B,MAC9B,sBACA,sBACA,2BAA8B,MAC9B,iBACA,kBACA,uBACA,gBACA,gBACA,iBACA,iBACA,kBACA,4BACA,kBACA,4BACA,eACA,8BACA,eACA,oCACA,oBACA,oCACA,gBACA,gBACA,qBACA,qBACA,yBACA,4BACA,2BAA8B,MAC9B,2BAA8B,MAC9B,oBACA,oBACA,2BACA,2BACA,iBACA,iBACA,wBACA,wBACA,uBACA,mCACA,uBACA,mCACA,sBACA,sBACA,mBACA,mBACA,wBACA,wBACA,qBACA,qBACA,0BACA,0BACA,sBACA,gCACA,sBACA,+BACA,kBACA,qBACA,kCACA,qBACA,oCACA,uBACA,uBACA,kBACA,kBACA,kBACA,mBACA,mBACA,mBACA,iBACA,wBACA,uBACA,wBACA,oBACA,qBACA,qBACA,mBACA,kBACA,kBACA,gBACA,iBACA,sBACA,wBACA,kBACA,mBACA,kBACA,mBACA,mBACA,mBACA,mBACA,4BACA,6BACA,2BACA,4BACA,qBACA,kBACA,qBACA,6BACA,qBACA,mBACA,0BACA,2BAA8B,MAC9B,2BAA8B,MAC9B,mBACA,mBACA,oBACA,iBACA,iBACA,0BACA,mBACA,mBACA,mBACA,2BACA,4BACA,sBACA,qBACA,uBACA,mBACA,mBACA,gBACA,gBACA,sBACA,oBACA,mBACA,yBACA,4BACA,sBACA,sBACA,wBACA,wBACA,4BACA,4BACA,sBACA,kBACA,kBACA,+BACA,qBACA,0BACA,2BACA,4BACA,6BACA,kBACA,kBACA,4BACA,8BACA,qBACA,4BACA,kBACA,kBACA,mBACA,mBACA,qBACA,yBACA,qBACA,qBACA,qBACA,qBACA,kBACA,kBACA,mBACA,mBACA,2BAA8B,MAC9B,sBACA,uBACA,uBACA,6BACA,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,qBACA,sBACA,qBACA,mBACA,iBAAoB,MACpB,mBACA,wBACA,gBAAmB,MACnB,sBACA,2BAA8B,MAC9B,iBAAoB,MACpB,0BACA,0BACA,wBACA,+BACA,0BACA,iBAAoB,MACpB,4BACA,8BACA,yBACA,8BACA,yBACA,iBAAoB,MACpB,oBACA,oBACA,iBAAoB,MACpB,qBACA,qBACA,qBACA,iBAAoB,MACpB,sBACA,oBACA,oBACA,qBACA,oBACA,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,sBACA,oBACA,kBACA,iBACA,oBACA,mBACA,mBACA,oBACA,kBACA,kBACA,mBACA,mBACA,mBACA,gBACA,kBACA,kBACA,oBACA,wBACA,wBACA,qBACA,mBACA,iBAAoB,MACpB,oBACA,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,wBACA,uBACA,iBACA,oBACA,kBACA,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,gBAAmB,MACnB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iBAAoB,MACpB,iB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eAGA,GAAAE,EAAAt2N,OACA,MAAAs2N,GAAA,GAAAt7F,MAIA,QAFAi8F,GAAA,GAAApQ,YAAA0P,GACAW,EAAA,EACA73N,EAAA,EAAuBA,EAAAi3N,EAAAt2N,SAAuBX,EAAA,CAC9C,GAAA6e,GAAAo4M,EAAAj3N,EACA6pN,GAAAhrM,EAAA,EAAA+4M,EAAAC,EAAAh5M,EAAAle,QACAk3N,GAAAh5M,EAAAle,OAEA,MAAAi3N,GAAAj8F,OAxlEA,GACAk7F,GADA,GAGA5B,EAAA,KAMAuC,EAAA,EAQAtB,EAAA,EACAuB,EAAA,EAMAC,GAAA,EAkBAI,GAAA,oEAEA5C,EAAA,EAWAY,EAAA,EACAC,EAAA,EAEAC,GACA,gCACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,gCACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,gCACA,+BAEA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,gCACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,6BACA,8BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,8BACA,8BACA,+BACA,8BACA,6BACA,6BACA,+BACA,+BACA,8BACA,6BACA,+BACA,+BACA,6BACA,6BACA,+BACA,+BACA,+BAEAC,GACA,kCACA,oCACA,kCACA,sCACA,kCACA,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","file":"libs.bundled.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/ \t\tif(executeModules) {\n/******/ \t\t\tfor(i=0; i < executeModules.length; i++) {\n/******/ \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\treturn result;\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t3: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = 'text/javascript';\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".bundled.js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 89);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"
\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting
\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"
\")\n });\n modal.show({ backdrop: true });\n}\n\n// ============================================================================\nexports.default = {\n Modal: Modal,\n hide_modal: hide_modal,\n show_modal: show_modal,\n show_message: show_message,\n show_in_overlay: show_in_overlay\n};\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(_, $, Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _bootstrapTour = __webpack_require__(53);\n\nvar BootstrapTour = _interopRequireWildcard(_bootstrapTour);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar gxy_root = typeof Galaxy === \"undefined\" ? \"/\" : Galaxy.root; /**\n * This is the primary galaxy tours definition, currently only used for\n * rendering a tour menu.\n */\n\nvar tourpage_template = \"

Galaxy Tours

\\n

This page presents a list of interactive tours available on this Galaxy server.\\nSelect any tour to get started (and remember, you can click 'End Tour' at any time).

\\n\\n
\\n <% _.each(tourtagorder, function(tag) { %>\\n \\n <% }); %>\\n
\\n\\n<% _.each(tourtagorder, function(tourtagkey) { %>\\n
\\\" style=\\\"display: block;\\\">\\n <% var tourtag = tourtags[tourtagkey]; %>\\n

\\n <%- tourtag.name %>\\n

\\n
\\n
\\n<% }); %>\";\n\nvar tour_opts = {\n storage: window.sessionStorage,\n onEnd: function onEnd() {\n sessionStorage.removeItem(\"activeGalaxyTour\");\n },\n delay: 150, // Attempts to make it look natural\n orphan: true\n};\n\nvar hooked_tour_from_data = function hooked_tour_from_data(data) {\n _.each(data.steps, function (step) {\n if (step.preclick) {\n step.onShow = function () {\n _.each(step.preclick, function (preclick) {\n // TODO: click delay between clicks\n $(preclick).click();\n });\n };\n }\n if (step.postclick) {\n step.onHide = function () {\n _.each(step.postclick, function (postclick) {\n // TODO: click delay between clicks\n $(postclick).click();\n });\n };\n }\n if (step.textinsert) {\n // Have to manually trigger a change here, for some\n // elements which have additional logic, like the\n // upload input box\n step.onShown = function () {\n $(step.element).val(step.textinsert).trigger(\"change\");\n };\n }\n });\n return data;\n};\n\nvar TourItem = Backbone.Model.extend({\n urlRoot: gxy_root + \"api/tours\"\n});\n\nvar Tours = Backbone.Collection.extend({\n url: gxy_root + \"api/tours\",\n model: TourItem\n});\n\nvar giveTour = function giveTour(tour_id) {\n var url = gxy_root + \"api/tours/\" + tour_id;\n $.getJSON(url, function (data) {\n // Set hooks for additional click and data entry actions.\n var tourdata = hooked_tour_from_data(data);\n sessionStorage.setItem(\"activeGalaxyTour\", JSON.stringify(data));\n // Store tour steps in sessionStorage to easily persist w/o hackery.\n var tour = new Tour(_.extend({\n steps: tourdata.steps\n }, tour_opts));\n // Always clean restart, since this is a new, explicit giveTour execution.\n tour.init();\n tour.goTo(0);\n tour.restart();\n });\n};\n\nvar ToursView = Backbone.View.extend({\n title: \"Tours\",\n // initialize\n initialize: function initialize() {\n var self = this;\n this.setElement(\"
\");\n this.model = new Tours();\n this.model.fetch({\n success: function success() {\n self.render();\n },\n error: function error() {\n // Do something.\n console.error(\"Failed to fetch tours.\");\n }\n });\n },\n\n render: function render() {\n var tpl = _.template(tourpage_template);\n\n var tourtags = {};\n _.each(this.model.models, function (tour) {\n if (tour.attributes.tags === null) {\n if (tourtags.Untagged === undefined) {\n tourtags.Untagged = { name: \"Untagged\", tours: [] };\n }\n tourtags.Untagged.tours.push(tour);\n } else {\n _.each(tour.attributes.tags, function (tag) {\n tag = tag.charAt(0).toUpperCase() + tag.slice(1);\n if (tourtags[tag] === undefined) {\n tourtags[tag] = { name: tag, tours: [] };\n }\n tourtags[tag].tours.push(tour);\n });\n }\n });\n var tourtagorder = Object.keys(tourtags).sort();\n\n this.$el.html(tpl({\n tours: this.model.models,\n tourtags: tourtags,\n tourtagorder: tourtagorder\n })).on(\"click\", \".tourItem\", function (e) {\n e.preventDefault();\n giveTour($(this).data(\"tour.id\"));\n }).on(\"click\", \".tag-selector-button\", function (e) {\n var elem = $(e.target);\n var display = \"block\";\n var tag = elem.attr(\"tag-selector-button\");\n\n elem.toggleClass(\"btn-primary\");\n elem.toggleClass(\"btn-secondary\");\n\n if (elem.hasClass(\"btn-secondary\")) {\n display = \"none\";\n }\n $(\"div[tag='\" + tag + \"']\").css({ display: display });\n });\n }\n});\n\nexports.default = {\n ToursView: ToursView,\n hooked_tour_from_data: hooked_tour_from_data,\n tour_opts: tour_opts,\n giveTour: giveTour\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(0), __webpack_require__(2)))\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n//==============================================================================\nvar LOGGING_FNS = [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"metric\"];\n/** adds logging functions to an obj.prototype (or obj directly) adding a namespace for filtering\n * @param {Object} obj\n * @param {String} namespace\n */\nfunction addLogging(obj, namespace) {\n var addTo = obj.prototype !== undefined ? obj.prototype : obj;\n if (namespace !== undefined) {\n addTo._logNamespace = namespace;\n }\n //yagni?: without this, may not capture Galaxy.config.debug and add Galaxy.logger properly\n // if( window.Galaxy && window.Galaxy.config && window.Galaxy.config.debug ){\n // addTo.logger = window.Galaxy.logger;\n // }\n\n // give the object each\n LOGGING_FNS.forEach(function (logFn) {\n addTo[logFn] = function () {\n if (!this.logger) {\n return undefined;\n }\n if (this.logger.emit) {\n return this.logger.emit(logFn, this._logNamespace, arguments);\n }\n if (this.logger[logFn]) {\n //TODO:! there has to be a way to get the lineno/file into this\n // http://stackoverflow.com/questions/13815640/a-proper-wrapper-for-console-log-with-correct-line-number\n // http://www.paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\n return this.logger[logFn].apply(this.logger, arguments);\n }\n return undefined;\n };\n });\n return obj;\n}\n\n//==============================================================================\nexports.default = addLogging;\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nvar _backbone = __webpack_require__(2);\n\nvar Backbone = _interopRequireWildcard(_backbone);\n\nvar _baseMvc = __webpack_require__(5);\n\nvar _baseMvc2 = _interopRequireDefault(_baseMvc);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class Model for a Galaxy user (including anonymous users).\n * @name User\n */\nvar User = Backbone.Model.extend(_baseMvc2.default.LoggableMixin).extend(\n/** @lends User.prototype */{\n _logNamespace: logNamespace,\n\n /** API location for this resource */\n urlRoot: function urlRoot() {\n return Galaxy.root + \"api/users\";\n },\n\n /** Model defaults\n * Note: don't check for anon-users with the username as the default is '(anonymous user)'\n * a safer method is if( !user.get( 'email' ) ) -> anon user\n */\n defaults: /** @lends User.prototype */{\n id: null,\n username: \"(\" + (0, _localization2.default)(\"anonymous user\") + \")\",\n email: \"\",\n total_disk_usage: 0,\n nice_total_disk_usage: \"\",\n quota_percent: null,\n is_admin: false\n },\n\n /** Set up and bind events\n * @param {Object} data Initial model data.\n */\n initialize: function initialize(data) {\n this.log(\"User.initialize:\", data);\n\n this.on(\"loaded\", function (model, resp) {\n this.log(this + \" has loaded:\", model, resp);\n });\n this.on(\"change\", function (model, data) {\n this.log(this + \" has changed:\", model, data.changes);\n });\n },\n\n isAnonymous: function isAnonymous() {\n return !this.get(\"email\");\n },\n\n isAdmin: function isAdmin() {\n return this.get(\"is_admin\");\n },\n\n /** Load a user with the API using an id.\n * If getting an anonymous user or no access to a user id, pass the User.CURRENT_ID_STR\n * (e.g. 'current') and the API will return the current transaction's user data.\n * @param {String} idOrCurrent encoded user id or the User.CURRENT_ID_STR\n * @param {Object} options hash to pass to Backbone.Model.fetch. Can contain success, error fns.\n * @fires loaded when the model has been loaded from the API, passing the newModel and AJAX response.\n */\n loadFromApi: function loadFromApi(idOrCurrent, options) {\n idOrCurrent = idOrCurrent || User.CURRENT_ID_STR;\n\n options = options || {};\n var model = this;\n var userFn = options.success;\n\n /** @ignore */\n options.success = function (newModel, response) {\n model.trigger(\"loaded\", newModel, response);\n if (userFn) {\n userFn(newModel, response);\n }\n };\n\n // requests for the current user must have a sep. constructed url (fetch don't work, ma)\n if (idOrCurrent === User.CURRENT_ID_STR) {\n options.url = this.urlRoot + \"/\" + User.CURRENT_ID_STR;\n }\n return Backbone.Model.prototype.fetch.call(this, options);\n },\n\n /** Clears all data from the sessionStorage.\n */\n clearSessionStorage: function clearSessionStorage() {\n for (var key in sessionStorage) {\n //TODO: store these under the user key so we don't have to do this\n // currently only history\n if (key.indexOf(\"history:\") === 0) {\n sessionStorage.removeItem(key);\n } else if (key === \"history-panel\") {\n sessionStorage.removeItem(key);\n }\n }\n },\n\n /** string representation */\n toString: function toString() {\n var userInfo = [this.get(\"username\")];\n if (this.get(\"id\")) {\n userInfo.unshift(this.get(\"id\"));\n userInfo.push(this.get(\"email\"));\n }\n return \"User(\" + userInfo.join(\":\") + \")\";\n }\n});\n\n// string to send to tell server to return this transaction's user (see api/users.py)\nUser.CURRENT_ID_STR = \"current\";\n\n// class method to load the current user via the api and return that model\nUser.getCurrentUserFromApi = function (options) {\n var currentUser = new User();\n currentUser.loadFromApi(User.CURRENT_ID_STR, options);\n return currentUser;\n};\n\n// (stub) collection for users (shouldn't be common unless admin UI)\nvar UserCollection = Backbone.Collection.extend(_baseMvc2.default.LoggableMixin).extend({\n model: User,\n urlRoot: function urlRoot() {\n return Galaxy.root + \"api/users\";\n }\n //logger : console,\n});\n\n//==============================================================================\nexports.default = {\n User: User\n};\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/** Frame view */\nvar FrameView = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n this.model = options && options.model || new Backbone.Model(options);\n this.setElement($(\"
\").addClass(\"corner frame\"));\n this.$el.append($(\"
\").addClass(\"f-header corner\").append($(\"
\").addClass(\"f-title\")).append($(\"
\").addClass(\"f-icon f-close fa fa-close\").tooltip({\n title: \"Close\",\n placement: \"bottom\"\n }))).append($(\"
\").addClass(\"f-content\")).append($(\"
\").addClass(\"f-resize f-icon corner fa fa-expand\").tooltip({ title: \"Resize\" })).append($(\"
\").addClass(\"f-cover\"));\n this.$header = this.$(\".f-header\");\n this.$title = this.$(\".f-title\");\n this.$content = this.$(\".f-content\");\n this.render();\n this.listenTo(this.model, \"change\", this.render, this);\n },\n\n render: function render() {\n var self = this;\n var options = this.model.attributes;\n this.$title.html(options.title || \"\");\n this.$header.find(\".f-icon-left\").remove();\n _.each(options.menu, function (option) {\n var $option = $(\"
\").addClass(\"f-icon-left\").addClass(option.icon);\n if (_.isFunction(option.disabled) && option.disabled()) {\n $option.attr(\"disabled\", true);\n } else {\n $option.on(\"click\", function () {\n option.onclick(self);\n }).tooltip({\n title: option.tooltip,\n placement: \"bottom\"\n });\n }\n self.$header.append($option);\n });\n if (options.url) {\n this.$content.html($(\"';\n\n var header_template = '' + '' + '';\n\n var frame_height = 350;\n var frame_width = 600;\n var class_names = \"ui-modal chat-modal\";\n\n // deletes the chat modal if already present and create one\n if ($(\".chat-modal\").length > 0) {\n $(\".chat-modal\").remove();\n }\n // creates a modal\n GenericNavView.modal = new _uiModal2.default.View({\n body: iframe_template,\n height: frame_height,\n width: frame_width,\n closing_events: true,\n title_separator: false,\n cls: class_names\n });\n\n // shows modal\n GenericNavView.modal.show();\n $el_chat_modal_header = $(\".chat-modal .modal-header\");\n $el_chat_modal_body = $(\".chat-modal .modal-body\");\n // adjusts the css of bootstrap modal for chat\n $el_chat_modal_header.addClass(\"modal-header-body\");\n $el_chat_modal_body.addClass(\"modal-header-body\");\n $el_chat_modal_header.find(\"h4\").remove();\n $el_chat_modal_header.removeAttr(\"min-height padding border\");\n $el_chat_modal_header.append(header_template);\n // click event of the close button for chat\n $(\".close-modal\").click(function (e) {\n $(\".chat-modal\").css(\"display\", \"none\");\n });\n // click event of expand and compress icon\n $(\".expand-compress-modal\").click(function (e) {\n if ($(\".expand-compress-modal\").hasClass(\"fa-expand\")) {\n $(\".chat-modal .modal-dialog\").width(\"1000px\");\n $(\".chat-modal .modal-body\").height(\"575px\");\n $(\".expand-compress-modal\").removeClass(\"fa-expand\").addClass(\"fa-compress\");\n $(\".expand-compress-modal\").attr(\"title\", \"Minimize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"96.2%\");\n } else {\n $(\".chat-modal .modal-dialog\").width(frame_width + 'px');\n $(\".chat-modal .modal-body\").height(frame_height + 'px');\n $(\".expand-compress-modal\").removeClass(\"fa-compress\").addClass(\"fa-expand\");\n $(\".expand-compress-modal\").attr(\"title\", \"Maximize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"93.2%\");\n }\n });\n return this;\n },\n\n /**renders the chat icon as a nav item*/\n render: function render() {\n var self = this;\n var navItem = {};\n navItem = {\n id: \"show-chat-online\",\n icon: \"fa-comment-o\",\n tooltip: \"Chat online\",\n visible: false,\n onclick: self.makeModalIframe\n };\n return navItem;\n }\n}); /** Real-time Communication feature **/\nexports.default = {\n GenericNavView: GenericNavView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _uiFrames = __webpack_require__(60);\n\nvar _uiFrames2 = _interopRequireDefault(_uiFrames);\n\nvar _data = __webpack_require__(18);\n\nvar _data2 = _interopRequireDefault(_data);\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _trackster = __webpack_require__(113);\n\nvar _trackster2 = _interopRequireDefault(_trackster);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n options = options || {};\n this.frames = new _uiFrames2.default.View({ visible: false });\n this.setElement(this.frames.$el);\n this.buttonActive = options.collection.add({\n id: \"enable-scratchbook\",\n icon: \"fa-th\",\n tooltip: (0, _localization2.default)(\"Enable/Disable Scratchbook\"),\n onclick: function onclick() {\n self.active = !self.active;\n self.buttonActive.set({\n toggle: self.active,\n show_note: self.active,\n note_cls: self.active && \"fa fa-check\"\n });\n !self.active && self.frames.hide();\n },\n onbeforeunload: function onbeforeunload() {\n if (self.frames.length() > 0) {\n return \"You opened \" + self.frames.length() + \" frame(s) which will be lost.\";\n }\n }\n });\n this.buttonLoad = options.collection.add({\n id: \"show-scratchbook\",\n icon: \"fa-eye\",\n tooltip: (0, _localization2.default)(\"Show/Hide Scratchbook\"),\n show_note: true,\n visible: false,\n onclick: function onclick(e) {\n self.frames.visible ? self.frames.hide() : self.frames.show();\n }\n });\n this.frames.on(\"add remove\", function () {\n this.visible && this.length() == 0 && this.hide();\n self.buttonLoad.set({\n note: this.length(),\n visible: this.length() > 0\n });\n }).on(\"show hide \", function () {\n self.buttonLoad.set({\n toggle: this.visible,\n icon: this.visible && \"fa-eye\" || \"fa-eye-slash\"\n });\n });\n this.history_cache = {};\n },\n\n /** Add a dataset to the frames */\n addDataset: function addDataset(dataset_id) {\n var self = this;\n var current_dataset = null;\n if (Galaxy && Galaxy.currHistoryPanel) {\n var history_id = Galaxy.currHistoryPanel.collection.historyId;\n this.history_cache[history_id] = {\n name: Galaxy.currHistoryPanel.model.get(\"name\"),\n dataset_ids: []\n };\n Galaxy.currHistoryPanel.collection.each(function (model) {\n !model.get(\"deleted\") && model.get(\"visible\") && self.history_cache[history_id].dataset_ids.push(model.get(\"id\"));\n });\n }\n var _findDataset = function _findDataset(dataset, offset) {\n if (dataset) {\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details && history_details.dataset_ids) {\n var dataset_list = history_details.dataset_ids;\n var pos = dataset_list.indexOf(dataset.get(\"id\"));\n if (pos !== -1 && pos + offset >= 0 && pos + offset < dataset_list.length) {\n return dataset_list[pos + offset];\n }\n }\n }\n };\n var _loadDatasetOffset = function _loadDatasetOffset(dataset, offset, frame) {\n var new_dataset_id = _findDataset(dataset, offset);\n if (new_dataset_id) {\n self._loadDataset(new_dataset_id, function (new_dataset, config) {\n current_dataset = new_dataset;\n frame.model.set(config);\n });\n } else {\n frame.model.trigger(\"change\");\n }\n };\n this._loadDataset(dataset_id, function (dataset, config) {\n current_dataset = dataset;\n self.add(_.extend({\n menu: [{\n icon: \"fa fa-chevron-circle-left\",\n tooltip: \"Previous in History\",\n onclick: function onclick(frame) {\n _loadDatasetOffset(current_dataset, -1, frame);\n },\n disabled: function disabled() {\n return !_findDataset(current_dataset, -1);\n }\n }, {\n icon: \"fa fa-chevron-circle-right\",\n tooltip: \"Next in History\",\n onclick: function onclick(frame) {\n _loadDatasetOffset(current_dataset, 1, frame);\n },\n disabled: function disabled() {\n return !_findDataset(current_dataset, 1);\n }\n }]\n }, config));\n });\n },\n\n _loadDataset: function _loadDataset(dataset_id, callback) {\n var self = this;\n var dataset = new _data2.default.Dataset({ id: dataset_id });\n $.when(dataset.fetch()).then(function () {\n var is_tabular = _.find([\"tabular\", \"interval\"], function (data_type) {\n return dataset.get(\"data_type\").indexOf(data_type) !== -1;\n });\n var title = dataset.get(\"name\");\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details) {\n title = history_details.name + \": \" + title;\n }\n callback(dataset, is_tabular ? {\n title: title,\n url: null,\n content: _data2.default.createTabularDatasetChunkedView({\n model: new _data2.default.TabularDataset(dataset.toJSON()),\n embedded: true,\n height: \"100%\"\n }).$el\n } : {\n title: title,\n url: Galaxy.root + \"datasets/\" + dataset_id + \"/display/?preview=True\",\n content: null\n });\n });\n },\n\n /** Add a trackster visualization to the frames. */\n addTrackster: function addTrackster(viz_id) {\n var self = this;\n var viz = new _visualization2.default.Visualization({ id: viz_id });\n $.when(viz.fetch()).then(function () {\n var ui = new _trackster2.default.TracksterUI(Galaxy.root);\n\n // Construct frame config based on dataset's type.\n var frame_config = {\n title: viz.get(\"name\"),\n type: \"other\",\n content: function content(parent_elt) {\n // Create view config.\n var view_config = {\n container: parent_elt,\n name: viz.get(\"title\"),\n id: viz.id,\n // FIXME: this will not work with custom builds b/c the dbkey needed to be encoded.\n dbkey: viz.get(\"dbkey\"),\n stand_alone: false\n };\n\n var latest_revision = viz.get(\"latest_revision\");\n var drawables = latest_revision.config.view.drawables;\n\n // Set up datasets in drawables.\n _.each(drawables, function (d) {\n d.dataset = {\n hda_ldda: d.hda_ldda,\n id: d.dataset_id\n };\n });\n view = ui.create_visualization(view_config, latest_revision.config.viewport, latest_revision.config.view.drawables, latest_revision.config.bookmarks, false);\n }\n };\n self.add(frame_config);\n });\n },\n\n /** Add and display a new frame/window based on options. */\n add: function add(options) {\n if (options.target == \"_blank\") {\n window.open(options.url);\n } else if (options.target == \"_top\" || options.target == \"_parent\" || options.target == \"_self\") {\n window.location = options.url;\n } else if (!this.active || options.noscratchbook) {\n var $galaxy_main = $(window.parent.document).find(\"#galaxy_main\");\n if (options.target == \"galaxy_main\" || options.target == \"center\") {\n if ($galaxy_main.length === 0) {\n window.location = options.url + (options.url.indexOf(\"?\") == -1 ? \"?\" : \"&\") + \"use_panels=True\";\n } else {\n $galaxy_main.attr(\"src\", options.url);\n }\n } else window.location = options.url;\n } else {\n this.frames.add(options);\n }\n }\n}); /** Frame manager uses the ui-frames to create the scratch book masthead icon and functionality **/\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// dependencies\n\n// grid model\nexports.default = Backbone.Model.extend({\n defaults: {\n url_base: \"\",\n async: false,\n async_ops: [],\n categorical_filters: [],\n filters: {},\n sort_key: null,\n show_item_checkboxes: false,\n advanced_search: false,\n cur_page: 1,\n num_pages: 1,\n operation: undefined,\n item_ids: undefined\n },\n\n /**\n * Return true if operation can be done asynchronously.\n */\n can_async_op: function can_async_op(op) {\n return _.indexOf(this.attributes.async_ops, op) !== -1;\n },\n\n /**\n * Add filtering criterion.\n */\n add_filter: function add_filter(key, value, append) {\n // Update URL arg with new condition.\n if (append) {\n // Update or append value.\n var cur_val = this.attributes.filters[key];\n\n var new_val;\n if (cur_val === null || cur_val === undefined) {\n new_val = value;\n } else if (typeof cur_val == \"string\") {\n if (cur_val == \"All\" || cur_val == value) {\n new_val = value;\n } else {\n // Replace string with array.\n var values = [];\n values[0] = cur_val;\n values[1] = value;\n new_val = values;\n }\n } else {\n // Current value is an array.\n new_val = cur_val;\n if (new_val.indexOf(value) === -1) {\n new_val.push(value);\n }\n }\n this.attributes.filters[key] = new_val;\n } else {\n // Replace value.\n this.attributes.filters[key] = value;\n }\n },\n\n /**\n * Remove filtering criterion.\n */\n remove_filter: function remove_filter(key, condition) {\n var cur_val = this.attributes.filters[key];\n if (cur_val === null || cur_val === undefined) {\n return false;\n }\n\n if (typeof cur_val === \"string\") {\n // overwrite/remove condition.\n this.attributes.filters[key] = \"\";\n } else {\n // filter contains an array of conditions.\n var condition_index = _.indexOf(cur_val, condition);\n if (condition_index !== -1) {\n cur_val[condition_index] = \"\";\n }\n }\n },\n\n /**\n * Returns URL data for obtaining a new grid.\n */\n get_url_data: function get_url_data() {\n var url_data = {\n async: this.attributes.async,\n sort: this.attributes.sort_key,\n page: this.attributes.cur_page,\n show_item_checkboxes: this.attributes.show_item_checkboxes,\n advanced_search: this.attributes.advanced_search\n };\n\n // Add operation, item_ids only if they have values.\n if (this.attributes.operation) {\n url_data.operation = this.attributes.operation;\n }\n if (this.attributes.item_ids) {\n url_data.id = this.attributes.item_ids;\n }\n\n // Add filter arguments to data, placing \"f-\" in front of all arguments.\n var self = this;\n _.each(_.pairs(self.attributes.filters), function (k) {\n url_data[\"f-\" + k[0]] = k[1];\n });\n return url_data;\n },\n\n // Return URL for obtaining a new grid\n get_url: function get_url(args) {\n return this.get(\"url_base\") + \"?\" + $.param(this.get_url_data()) + \"&\" + $.param(args);\n }\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(jQuery, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// grid view templates\nexports.default = {\n // template\n grid: function grid(options) {\n var tmpl = \"\";\n if (options.embedded) {\n tmpl = this.grid_header(options) + this.grid_table(options);\n } else {\n tmpl = \"
\" + this.grid_header(options) + \"
\" + this.grid_table(options);\n }\n\n // add info text\n if (options.info_text) {\n tmpl += \"
\" + options.info_text + \"
\";\n }\n\n // return\n return tmpl;\n },\n\n // template\n grid_table: function grid_table(options) {\n return '
' + '' + '' + '' + '' + \"
\" + \"
\";\n },\n\n // template\n grid_header: function grid_header(options) {\n var tmpl = '
\";\n\n // return template\n return tmpl;\n },\n\n // template\n header: function header(options) {\n // start\n var tmpl = \"\";\n\n // add checkbox\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n if (options.items.length > 0) {\n tmpl += '' + '';\n }\n tmpl += \"\";\n }\n\n // create header elements\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.visible) {\n tmpl += \"\";\n if (column.href) {\n tmpl += \"\" + column.label + \"\";\n } else {\n tmpl += column.label;\n }\n tmpl += \"\" + column.extra + \"\";\n }\n }\n\n // finalize\n tmpl += \"\";\n\n // return template\n return tmpl;\n },\n\n // template\n body: function body(options) {\n // initialize\n var tmpl = \"\";\n var num_rows_rendered = 0;\n var items_length = options.items.length;\n\n // empty grid?\n if (items_length == 0) {\n // No results.\n tmpl += 'No Items';\n num_rows_rendered = 1;\n }\n\n // create rows\n for (var i in options.items) {\n // encode ids\n var item = options.items[i];\n var encoded_id = item.encode_id;\n var popupmenu_id = \"grid-\" + i + \"-popup\";\n\n // Tag current\n tmpl += \"\";\n\n // Item selection column\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n }\n\n // Data columns\n for (var j in options.columns) {\n var column = options.columns[j];\n if (column.visible) {\n // Nowrap\n var nowrap = \"\";\n if (column.nowrap) {\n nowrap = 'style=\"white-space:nowrap;\"';\n }\n\n // get column settings\n var column_settings = item.column_config[column.label];\n\n // load attributes\n var link = column_settings.link;\n var value = column_settings.value;\n var target = column_settings.target;\n\n // unescape value\n if (jQuery.type(value) === \"string\") {\n value = value.replace(/\\/\\//g, \"/\");\n }\n\n // Attach popup menu?\n var id = \"\";\n var cls = \"\";\n if (column.attach_popup) {\n id = \"grid-\" + i + \"-popup\";\n cls = \"menubutton\";\n if (link != \"\") {\n cls += \" split\";\n }\n cls += \" popup\";\n }\n\n // Check for row wrapping\n tmpl += \"\";\n\n // Link\n if (link) {\n if (options.operations.length != 0) {\n tmpl += \"
\";\n }\n tmpl += \"\" + value + \"\";\n if (options.operations.length != 0) {\n tmpl += \"
\";\n }\n } else {\n tmpl += \"
\";\n }\n tmpl += \"\";\n }\n }\n tmpl += \"\";\n num_rows_rendered++;\n }\n return tmpl;\n },\n\n // template\n footer: function footer(options) {\n // create template string\n var tmpl = \"\";\n\n // paging\n if (options.use_paging && options.num_pages > 1) {\n // get configuration\n var num_page_links = options.num_page_links;\n var cur_page_num = options.cur_page_num;\n var num_pages = options.num_pages;\n\n // First pass on min page.\n var page_link_range = num_page_links / 2;\n var min_page = cur_page_num - page_link_range;\n var min_offset = 0;\n if (min_page <= 0) {\n // Min page is too low.\n min_page = 1;\n min_offset = page_link_range - (cur_page_num - min_page);\n }\n\n // Set max page.\n var max_range = page_link_range + min_offset;\n var max_page = cur_page_num + max_range;\n var max_offset;\n if (max_page <= num_pages) {\n // Max page is fine.\n max_offset = 0;\n } else {\n // Max page is too high.\n max_page = num_pages;\n // +1 to account for the +1 in the loop below.\n max_offset = max_range - (max_page + 1 - cur_page_num);\n }\n\n // Second and final pass on min page to add any unused\n // offset from max to min.\n if (max_offset != 0) {\n min_page -= max_offset;\n if (min_page < 1) {\n min_page = 1;\n }\n }\n\n // template header\n tmpl += '';\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n }\n tmpl += '' + '' + \"Page:\";\n\n if (min_page > 1) {\n tmpl += '1 ...';\n }\n\n // create page urls\n for (var page_index = min_page; page_index < max_page + 1; page_index++) {\n if (page_index == options.cur_page_num) {\n tmpl += \"\" + page_index + \"\";\n } else {\n tmpl += \"\" + page_index + \"\";\n }\n }\n\n // show last page\n if (max_page < num_pages) {\n tmpl += \"...\" + num_pages + \"\";\n }\n tmpl += \"\";\n\n // Show all link\n tmpl += ' | Show All' + \"\" + \"\";\n }\n\n // Grid operations for multiple items.\n if (options.show_item_checkboxes) {\n // start template\n tmpl += \"\" + '' + \"\" + '' + 'For selected items: ';\n\n // configure buttons for operations\n for (var i in options.operations) {\n var operation = options.operations[i];\n if (operation.allow_multiple) {\n tmpl += \" \";\n }\n }\n\n // finalize template\n tmpl += \"\" + \"\";\n }\n\n // count global operations\n var found_global = false;\n for (i in options.operations) {\n if (options.operations[i].global_operation) {\n found_global = true;\n break;\n }\n }\n\n // add global operations\n if (found_global) {\n tmpl += \"\" + '';\n for (i in options.operations) {\n var operation = options.operations[i];\n if (operation.global_operation) {\n tmpl += \"\" + operation.label + \"\";\n }\n }\n tmpl += \"\" + \"\";\n }\n\n // add legend\n if (options.legend) {\n tmpl += \"\" + options.legend + \"\";\n }\n\n // return\n return tmpl;\n },\n\n // template\n message: function message(options) {\n var status = options.status;\n if ([\"success\", \"ok\"].indexOf(status) != -1) {\n status = \"done\";\n }\n return \"

\" + _.escape(options.message) + \"

\";\n },\n\n // template\n grid_filters: function grid_filters(options) {\n // get filters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n\n // show advanced search if flag set or if there are filters for advanced search fields\n var advanced_search_display = \"none\";\n if (options.advanced_search) {\n advanced_search_display = \"block\";\n }\n\n // identify columns with advanced filtering\n var show_advanced_search_link = false;\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n var column_key = column.key;\n var f_key = filters[column_key];\n var d_key = default_filter_dict[column_key];\n if (f_key && d_key && f_key != d_key) {\n advanced_search_display = \"block\";\n }\n show_advanced_search_link = true;\n }\n }\n\n // hide standard search if advanced is shown\n var standard_search_display = \"block\";\n if (advanced_search_display == \"block\") {\n standard_search_display = \"none\";\n }\n\n //\n // standard search\n //\n var tmpl = \"
\" + \"\" + \"\" + \"\" + \"\" + \"
\";\n\n // add standard filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"standard\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize standard search\n tmpl += \"
\" + \"
\";\n\n // show advanced search link in standard display\n if (show_advanced_search_link) {\n tmpl += 'Advanced Search';\n }\n\n // finalize standard search display\n tmpl += \"
\" + \"
\";\n\n //\n // advanced search\n //\n tmpl += \"
\";\n\n // add advanced filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize advanced search template\n tmpl += \"
Close Advanced Search
\" + \"
\";\n\n // return template\n return tmpl;\n },\n\n // template\n grid_column_filter: function grid_column_filter(options, column) {\n // collect parameters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n var column_label = column.label;\n var column_key = column.key;\n if (column.filterable == \"advanced\") {\n column_label = column_label.toLowerCase();\n }\n\n // start\n var tmpl = \"\";\n\n if (column.filterable == \"advanced\") {\n tmpl += \"\" + column_label + \":\";\n }\n tmpl += '';\n if (column.is_text) {\n tmpl += \"
\";\n // Carry forward filtering criteria with hidden inputs.\n for (i in options.columns) {\n var temp_column = options.columns[i];\n var filter_value = filters[temp_column.key];\n if (filter_value) {\n if (filter_value != \"All\") {\n if (temp_column.is_text) {\n filter_value = JSON.stringify(filter_value);\n }\n tmpl += \"\";\n }\n }\n }\n // Print current filtering criteria and links to delete.\n tmpl += \"\";\n\n // add filters\n var column_filter = filters[column_key];\n if (column_filter) {\n // identify type\n var type = jQuery.type(column_filter);\n\n // single filter value\n if (type == \"string\") {\n if (column_filter != \"All\") {\n // append template\n tmpl += this.filter_element(column_key, column_filter);\n }\n }\n\n // multiple filter values\n if (type == \"array\") {\n for (var i in column_filter) {\n // get filter\n var filter = column_filter[i];\n\n // copy filters and remove entry\n var params = column_filter;\n params = params.slice(i);\n\n // append template\n tmpl += this.filter_element(column_key, filter);\n }\n }\n }\n\n // close span\n tmpl += \"\";\n\n // Set value, size of search input field. Minimum size is 20 characters.\n var value = \"\";\n if (column.filterable == \"standard\") {\n value = column.label.toLowerCase();\n var size = value.length;\n if (size < 20) {\n size = 20;\n }\n // +4 to account for space after placeholder\n size = size + 4;\n }\n\n // print input field for column\n tmpl += \"
\";\n } else {\n // filter criteria\n tmpl += \"\";\n\n // add category filters\n var seperator = false;\n for (var cf_label in options.categorical_filters[column_key]) {\n // get category filter\n var cf = options.categorical_filters[column_key][cf_label];\n\n // each filter will have only a single argument, so get that single argument\n var cf_key = \"\";\n var cf_arg = \"\";\n for (var key in cf) {\n cf_key = key;\n cf_arg = cf[key];\n }\n\n // add seperator\n if (seperator) {\n tmpl += \" | \";\n }\n seperator = true;\n\n // add category\n var filter = filters[column_key];\n if (filter && cf[column_key] && filter == cf_arg) {\n tmpl += \"\" + cf_label + \"\";\n } else {\n tmpl += \"\" + cf_label + \"\";\n }\n }\n tmpl += \"\";\n }\n tmpl += \"\" + \"\";\n\n // return template\n return tmpl;\n },\n\n // template for filter items\n filter_element: function filter_element(filter_key, filter_value) {\n filter_value = _utils2.default.sanitize(filter_value);\n return \"\" + filter_value + \"\";\n }\n}; // dependencies\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n this.model = options && options.model || new Backbone.Model({\n id: _utils2.default.uid(),\n min: null,\n max: null,\n step: null,\n precise: false,\n split: 10000,\n value: null,\n onchange: function onchange() {}\n }).set(options);\n\n // create new element\n this.setElement(this._template());\n this.$el.attr(\"id\", this.model.id);\n this.$text = this.$(\".ui-form-slider-text\");\n this.$slider = this.$(\".ui-form-slider-element\");\n\n // add text field event\n var pressed = [];\n this.$text.on(\"change\", function () {\n self.value($(this).val());\n }).on(\"keyup\", function (e) {\n pressed[e.which] = false;\n }).on(\"keydown\", function (e) {\n var v = e.which;\n pressed[v] = true;\n if (self.model.get(\"is_workflow\") && pressed[16] && v == 52) {\n self.value(\"$\");\n event.preventDefault();\n } else if (!(v == 8 || v == 9 || v == 13 || v == 37 || v == 39 || v >= 48 && v <= 57 && !pressed[16] || v >= 96 && v <= 105 || (v == 190 || v == 110) && $(this).val().indexOf(\".\") == -1 && self.model.get(\"precise\") || (v == 189 || v == 109) && $(this).val().indexOf(\"-\") == -1 || self._isParameter($(this).val()) || pressed[91] || pressed[17])) {\n event.preventDefault();\n }\n });\n\n // build slider, cannot be rebuild in render\n var opts = this.model.attributes;\n this.has_slider = opts.max !== null && opts.min !== null && opts.max > opts.min;\n var step = opts.step;\n if (!step) {\n if (opts.precise && this.has_slider) {\n step = (opts.max - opts.min) / opts.split;\n } else {\n step = 1.0;\n }\n }\n if (this.has_slider) {\n this.$text.addClass(\"ui-form-slider-left\");\n this.$slider.slider({ min: opts.min, max: opts.max, step: step }).on(\"slide\", function (event, ui) {\n self.value(ui.value);\n });\n } else {\n this.$slider.hide();\n }\n\n // add listeners\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n },\n\n render: function render() {\n var value = this.model.get(\"value\");\n this.has_slider && this.$slider.slider(\"value\", value);\n value !== this.$text.val() && this.$text.val(value);\n },\n\n /** Set and return the current value */\n value: function value(new_val) {\n var options = this.model.attributes;\n if (new_val !== undefined) {\n if (new_val !== null && new_val !== \"\" && !this._isParameter(new_val)) {\n isNaN(new_val) && (new_val = 0);\n !options.precise && (new_val = Math.round(new_val));\n options.max !== null && (new_val = Math.min(new_val, options.max));\n options.min !== null && (new_val = Math.max(new_val, options.min));\n }\n this.model.set(\"value\", new_val);\n this.model.trigger(\"change\");\n options.onchange(new_val);\n }\n return this.model.get(\"value\");\n },\n\n /** Return true if the field contains a workflow parameter i.e. $('name') */\n _isParameter: function _isParameter(value) {\n return this.model.get(\"is_workflow\") && String(value).substring(0, 1) === \"$\";\n },\n\n /** Slider template */\n _template: function _template() {\n return '
' + '' + '
' + \"
\";\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiOptions = __webpack_require__(63);\n\nvar _uiOptions2 = _interopRequireDefault(_uiOptions);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** This class creates/wraps a drill down element. */\nvar View = _uiOptions2.default.BaseIcons.extend({\n initialize: function initialize(options) {\n options.type = options.display || \"checkbox\";\n options.multiple = options.type == \"checkbox\";\n _uiOptions2.default.BaseIcons.prototype.initialize.call(this, options);\n },\n\n /** Set states for selected values */\n _setValue: function _setValue(new_value) {\n _uiOptions2.default.BaseIcons.prototype._setValue.call(this, new_value);\n if (new_value !== undefined && new_value !== null && this.header_index) {\n var self = this;\n var values = $.isArray(new_value) ? new_value : [new_value];\n _.each(values, function (v) {\n var list = self.header_index[v];\n _.each(list, function (element) {\n self._setState(element, true);\n });\n });\n }\n },\n\n /** Expand/collapse a sub group */\n _setState: function _setState(header_id, is_expanded) {\n var $button = this.$(\".button-\" + header_id);\n var $subgroup = this.$(\".subgroup-\" + header_id);\n $button.data(\"is_expanded\", is_expanded);\n if (is_expanded) {\n $subgroup.show();\n $button.removeClass(\"fa-plus-square\").addClass(\"fa-minus-square\");\n } else {\n $subgroup.hide();\n $button.removeClass(\"fa-minus-square\").addClass(\"fa-plus-square\");\n }\n },\n\n /** Template to create options tree */\n _templateOptions: function _templateOptions() {\n var self = this;\n this.header_index = {};\n\n // attach event handler\n function attach($el, header_id) {\n var $button = $el.find(\".button-\" + header_id);\n $button.on(\"click\", function () {\n self._setState(header_id, !$button.data(\"is_expanded\"));\n });\n }\n\n // recursive function which iterates through options\n function iterate($tmpl, options, header) {\n header = header || [];\n for (var i in options) {\n var level = options[i];\n var has_options = level.options && level.options.length > 0;\n var new_header = header.slice(0);\n self.header_index[level.value] = new_header.slice(0);\n var $group = $(\"
\");\n if (has_options) {\n var header_id = _utils2.default.uid();\n var $button = $(\"\").addClass(\"button-\" + header_id).addClass(\"ui-drilldown-button fa fa-plus-square\");\n var $subgroup = $(\"
\").addClass(\"subgroup-\" + header_id).addClass(\"ui-drilldown-subgroup\");\n $group.append($(\"
\").append($button).append(self._templateOption({\n label: level.name,\n value: level.value\n })));\n new_header.push(header_id);\n iterate($subgroup, level.options, new_header);\n $group.append($subgroup);\n attach($group, header_id);\n } else {\n $group.append(self._templateOption({\n label: level.name,\n value: level.value\n }));\n }\n $tmpl.append($group);\n }\n }\n\n // iterate through options and create dom\n var $tmpl = $(\"
\");\n iterate($tmpl, this.model.get(\"data\"));\n return $tmpl;\n },\n\n /** Template for drill down view */\n _template: function _template() {\n return $(\"
\").addClass(\"ui-options-list drilldown-container\").attr(\"id\", this.model.id);\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nvar _tracks = __webpack_require__(114);\n\nvar _tracks2 = _interopRequireDefault(_tracks);\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _iconButton = __webpack_require__(61);\n\nvar _iconButton2 = _interopRequireDefault(_iconButton);\n\nvar _queryStringParsing = __webpack_require__(8);\n\nvar _queryStringParsing2 = _interopRequireDefault(_queryStringParsing);\n\nvar _gridView = __webpack_require__(12);\n\nvar _gridView2 = _interopRequireDefault(_gridView);\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\n__webpack_require__(46);\n\n__webpack_require__(45);\n\n__webpack_require__(47);\n\n__webpack_require__(51);\n\n__webpack_require__(50);\n\n__webpack_require__(52);\n\n__webpack_require__(48);\n\n__webpack_require__(49);\n\n__webpack_require__(15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n * Top-level trackster code, used for creating/loading visualizations and user interface elements.\n */\n\n// global variables\nvar ui = null;\nvar view = null;\nvar browser_router = null;\n\n// trackster viewer\n\n/**\n * Base Object/Model for inhertiance.\n */\nvar Base = function Base() {\n if (this.initialize) {\n this.initialize.apply(this, arguments);\n }\n};\nBase.extend = Backbone.Model.extend;\n\n/**\n * User interface controls for trackster\n */\nvar TracksterUI = Base.extend({\n initialize: function initialize(baseURL) {\n _utils2.default.cssLoadFile(\"static/style/jquery.rating.css\");\n _utils2.default.cssLoadFile(\"static/style/autocomplete_tagging.css\");\n _utils2.default.cssLoadFile(\"static/style/jquery-ui/smoothness/jquery-ui.css\");\n _utils2.default.cssLoadFile(\"static/style/library.css\");\n _utils2.default.cssLoadFile(\"static/style/trackster.css\");\n this.baseURL = baseURL;\n },\n\n /**\n * Save visualization, returning a Deferred object for the remote call to save.\n */\n save_viz: function save_viz() {\n // show dialog\n Galaxy.modal.show({ title: \"Saving...\", body: \"progress\" });\n\n // Save bookmarks.\n var bookmarks = [];\n $(\".bookmark\").each(function () {\n bookmarks.push({\n position: $(this).children(\".position\").text(),\n annotation: $(this).children(\".annotation\").text()\n });\n });\n\n // FIXME: give unique IDs to Drawables and save overview as ID.\n var overview_track_name = view.overview_drawable ? view.overview_drawable.config.get_value(\"name\") : null;\n\n var viz_config = {\n view: view.to_dict(),\n viewport: {\n chrom: view.chrom,\n start: view.low,\n end: view.high,\n overview: overview_track_name\n },\n bookmarks: bookmarks\n };\n\n // Make call to save visualization.\n return $.ajax({\n url: Galaxy.root + \"visualization/save\",\n type: \"POST\",\n dataType: \"json\",\n data: {\n id: view.vis_id,\n title: view.config.get_value(\"name\"),\n dbkey: view.dbkey,\n type: \"trackster\",\n vis_json: JSON.stringify(viz_config)\n }\n }).success(function (vis_info) {\n Galaxy.modal.hide();\n view.vis_id = vis_info.vis_id;\n view.has_changes = false;\n\n // Needed to set URL when first saving a visualization.\n window.history.pushState({}, \"\", vis_info.url + window.location.hash);\n }).error(function () {\n // show dialog\n Galaxy.modal.show({\n title: \"Could Not Save\",\n body: \"Could not save visualization. Please try again later.\",\n buttons: {\n Cancel: function Cancel() {\n Galaxy.modal.hide();\n }\n }\n });\n });\n },\n\n /**\n * Create button menu\n */\n createButtonMenu: function createButtonMenu() {\n var self = this;\n\n var menu = _iconButton2.default.create_icon_buttons_menu([{\n icon_class: \"plus-button\",\n title: \"Add tracks\",\n on_click: function on_click() {\n _visualization2.default.select_datasets({ dbkey: view.dbkey }, function (new_tracks) {\n _.each(new_tracks, function (track) {\n view.add_drawable(_tracks2.default.object_from_template(track, view, view));\n });\n });\n }\n }, {\n icon_class: \"block--plus\",\n title: \"Add group\",\n on_click: function on_click() {\n view.add_drawable(new _tracks2.default.DrawableGroup(view, view, {\n name: \"New Group\"\n }));\n }\n }, {\n icon_class: \"bookmarks\",\n title: \"Bookmarks\",\n on_click: function on_click() {\n // HACK -- use style to determine if panel is hidden and hide/show accordingly.\n force_right_panel($(\"div#right\").css(\"right\") == \"0px\" ? \"hide\" : \"show\");\n }\n }, {\n icon_class: \"globe\",\n title: \"Circster\",\n on_click: function on_click() {\n window.location = self.baseURL + \"visualization/circster?id=\" + view.vis_id;\n }\n }, {\n icon_class: \"disk--arrow\",\n title: \"Save\",\n on_click: function on_click() {\n self.save_viz();\n }\n }, {\n icon_class: \"cross-circle\",\n title: \"Close\",\n on_click: function on_click() {\n self.handle_unsaved_changes(view);\n }\n }], {\n tooltip_config: { placement: \"bottom\" }\n });\n\n this.buttonMenu = menu;\n return menu;\n },\n\n /**\n * Add bookmark.\n */\n add_bookmark: function add_bookmark(position, annotation, editable) {\n // Create HTML.\n var bookmarks_container = $(\"#right .unified-panel-body\");\n\n var new_bookmark = $(\"
\").addClass(\"bookmark\").appendTo(bookmarks_container);\n\n var position_div = $(\"
\").addClass(\"position\").appendTo(new_bookmark);\n\n var position_link = $(\"\").text(position).appendTo(position_div).click(function () {\n view.go_to(position);\n return false;\n });\n\n var annotation_div = $(\"
\").text(annotation).appendTo(new_bookmark);\n\n // If editable, enable bookmark deletion and annotation editing.\n if (editable) {\n var delete_icon_container = $(\"
\").addClass(\"delete-icon-container\").prependTo(new_bookmark).click(function () {\n // Remove bookmark.\n new_bookmark.slideUp(\"fast\");\n new_bookmark.remove();\n view.has_changes = true;\n return false;\n });\n\n var delete_icon = $(\"\").addClass(\"icon-button delete\").appendTo(delete_icon_container);\n\n annotation_div.make_text_editable({\n num_rows: 3,\n use_textarea: true,\n help_text: \"Edit bookmark note\"\n }).addClass(\"annotation\");\n }\n\n view.has_changes = true;\n return new_bookmark;\n },\n\n /**\n * Create a complete Trackster visualization. Returns view.\n */\n create_visualization: function create_visualization(view_config, viewport_config, drawables_config, bookmarks_config, editable) {\n // Create view.\n var self = this;\n\n var view = new _tracks2.default.TracksterView(_.extend(view_config, { header: false }));\n\n view.editor = true;\n $.when(view.load_chroms_deferred).then(function (chrom_info) {\n // Viewport config.\n if (viewport_config) {\n var chrom = viewport_config.chrom;\n var start = viewport_config.start;\n var end = viewport_config.end;\n var overview_drawable_name = viewport_config.overview;\n\n if (chrom && start !== undefined && end) {\n view.change_chrom(chrom, start, end);\n } else {\n // No valid viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n } else {\n // No viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n\n // Add drawables to view.\n if (drawables_config) {\n // FIXME: can from_dict() be used to create view and add drawables?\n var drawable_config;\n\n var drawable_type;\n var drawable;\n for (var i = 0; i < drawables_config.length; i++) {\n view.add_drawable(_tracks2.default.object_from_template(drawables_config[i], view, view));\n }\n }\n\n // Set overview.\n var overview_drawable;\n for (var i = 0; i < view.drawables.length; i++) {\n if (view.drawables[i].config.get_value(\"name\") === overview_drawable_name) {\n view.set_overview(view.drawables[i]);\n break;\n }\n }\n\n // Load bookmarks.\n if (bookmarks_config) {\n var bookmark;\n for (var i = 0; i < bookmarks_config.length; i++) {\n bookmark = bookmarks_config[i];\n self.add_bookmark(bookmark[\"position\"], bookmark[\"annotation\"], editable);\n }\n }\n\n // View has no changes as of yet.\n view.has_changes = false;\n });\n\n // Final initialization.\n this.set_up_router({ view: view });\n\n return view;\n },\n\n /**\n * Set up location router to use hashes as track browser locations.\n */\n set_up_router: function set_up_router(options) {\n new _visualization2.default.TrackBrowserRouter(options);\n Backbone.history.start();\n },\n\n /**\n * Set up keyboard navigation for a visualization.\n */\n init_keyboard_nav: function init_keyboard_nav(view) {\n // Keyboard navigation. Scroll ~7% of height when scrolling up/down.\n $(document).keyup(function (e) {\n // Do not navigate if arrow keys used in input element.\n if ($(e.srcElement).is(\":input\")) {\n return;\n }\n\n // Key codes: left == 37, up == 38, right == 39, down == 40\n switch (e.which) {\n case 37:\n view.move_fraction(0.25);\n break;\n case 38:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() - 20);\n break;\n case 39:\n view.move_fraction(-0.25);\n break;\n case 40:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() + 20);\n break;\n }\n });\n },\n\n /**\n * Handle unsaved changes in visualization.\n */\n handle_unsaved_changes: function handle_unsaved_changes(view) {\n if (view.has_changes) {\n var self = this;\n Galaxy.modal.show({\n title: \"Close visualization\",\n body: \"There are unsaved changes to your visualization which will be lost if you do not save them.\",\n buttons: {\n Cancel: function Cancel() {\n Galaxy.modal.hide();\n },\n \"Leave without Saving\": function LeaveWithoutSaving() {\n $(window).off(\"beforeunload\");\n window.location = Galaxy.root + \"visualization\";\n },\n Save: function Save() {\n $.when(self.save_viz()).then(function () {\n window.location = Galaxy.root + \"visualization\";\n });\n }\n }\n });\n } else {\n window.location = Galaxy.root + \"visualization\";\n }\n }\n});\n\nvar TracksterView = Backbone.View.extend({\n // initalize trackster\n initialize: function initialize() {\n // load ui\n ui = new TracksterUI(Galaxy.root);\n\n // create button menu\n ui.createButtonMenu();\n\n // attach the button menu to the panel header and float it left\n ui.buttonMenu.$el.attr(\"style\", \"float: right\");\n\n // add to center panel\n $(\"#center .unified-panel-header-inner\").append(ui.buttonMenu.$el);\n\n // configure right panel\n $(\"#right .unified-panel-title\").append(\"Bookmarks\");\n $(\"#right .unified-panel-icons\").append(\"\");\n\n // resize view when showing/hiding right panel (bookmarks for now).\n $(\"#right-border\").click(function () {\n view.resize_window();\n });\n\n // hide right panel\n force_right_panel(\"hide\");\n\n // check if id is available\n if (galaxy_config.app.id) {\n this.view_existing();\n } else if (_queryStringParsing2.default.get(\"dataset_id\")) {\n this.choose_existing_or_new();\n } else {\n this.view_new();\n }\n },\n\n choose_existing_or_new: function choose_existing_or_new() {\n var self = this;\n var dbkey = _queryStringParsing2.default.get(\"dbkey\");\n var listTracksParams = {};\n\n var dataset_params = {\n dbkey: dbkey,\n dataset_id: _queryStringParsing2.default.get(\"dataset_id\"),\n hda_ldda: _queryStringParsing2.default.get(\"hda_ldda\"),\n gene_region: _queryStringParsing2.default.get(\"gene_region\")\n };\n\n if (dbkey) {\n listTracksParams[\"f-dbkey\"] = dbkey;\n }\n\n Galaxy.modal.show({\n title: \"View Data in a New or Saved Visualization?\",\n // either have text in here or have to remove body and the header/footer margins\n body: \"

    You can add this dataset as:
  • a new track to one of your existing, saved Trackster sessions if they share the genome build: \" + (dbkey || \"Not available.\") + \"
  • or create a new session with this dataset as the only track

\",\n buttons: {\n Cancel: function Cancel() {\n window.location = Galaxy.root + \"visualizations/list\";\n },\n \"View in saved visualization\": function ViewInSavedVisualization() {\n self.view_in_saved(dataset_params);\n },\n \"View in new visualization\": function ViewInNewVisualization() {\n self.view_new();\n }\n }\n });\n },\n\n // view\n view_in_saved: function view_in_saved(dataset_params) {\n var tracks_grid = new _gridView2.default({\n url_base: Galaxy.root + \"visualization/list_tracks\",\n dict_format: true,\n embedded: true\n });\n Galaxy.modal.show({\n title: \"Add Data to Saved Visualization\",\n body: tracks_grid.$el,\n buttons: {\n Cancel: function Cancel() {\n window.location = Galaxy.root + \"visualizations/list\";\n },\n \"Add to visualization\": function AddToVisualization() {\n $(parent.document).find(\"input[name=id]:checked\").each(function () {\n dataset_params.id = $(this).val();\n window.location = Galaxy.root + \"visualization/trackster?\" + $.param(dataset_params);\n });\n }\n }\n });\n },\n\n // view\n view_existing: function view_existing() {\n // get config\n var viz_config = galaxy_config.app.viz_config;\n\n // view\n view = ui.create_visualization({\n container: $(\"#center .unified-panel-body\"),\n name: viz_config.title,\n vis_id: viz_config.vis_id,\n dbkey: viz_config.dbkey\n }, viz_config.viewport, viz_config.tracks, viz_config.bookmarks, true);\n\n // initialize editor\n this.init_editor();\n },\n\n // view\n view_new: function view_new() {\n // reference this\n var self = this;\n\n // ajax\n $.ajax({\n url: Galaxy.root + \"api/genomes?chrom_info=True\",\n data: {},\n error: function error() {\n alert(\"Couldn't create new browser.\");\n },\n success: function success(response) {\n // show dialog\n Galaxy.modal.show({\n title: \"New Visualization\",\n body: self.template_view_new(response),\n buttons: {\n Cancel: function Cancel() {\n window.location = Galaxy.root + \"visualizations/list\";\n },\n Create: function Create() {\n self.create_browser($(\"#new-title\").val(), $(\"#new-dbkey\").val());\n Galaxy.modal.hide();\n }\n }\n });\n\n // select default\n var dbkeys_in_genomes = response.map(function (r) {\n return r[1];\n });\n if (galaxy_config.app.default_dbkey && _.contains(dbkeys_in_genomes, galaxy_config.app.default_dbkey)) {\n $(\"#new-dbkey\").val(galaxy_config.app.default_dbkey);\n }\n\n // change focus\n $(\"#new-title\").focus();\n $(\"select[name='dbkey']\").select2();\n\n // to support the large number of options for dbkey, enable scrolling in overlay.\n $(\"#overlay\").css(\"overflow\", \"auto\");\n }\n });\n },\n\n // new browser form\n template_view_new: function template_view_new(response) {\n // start template\n var html = '
' + '
' + '' + '
' + '' + \"
\" + '
' + \"
\" + '
' + '' + '
' + '
Is the build not listed here? Add a Custom Build
\";\n\n // return\n return html;\n },\n\n // create\n create_browser: function create_browser(name, dbkey) {\n $(document).trigger(\"convert_to_values\");\n\n view = ui.create_visualization({\n container: $(\"#center .unified-panel-body\"),\n name: name,\n dbkey: dbkey\n }, galaxy_config.app.gene_region);\n\n // initialize editor\n this.init_editor();\n\n // modify view setting\n view.editor = true;\n },\n\n // initialization for editor-specific functions.\n init_editor: function init_editor() {\n // set title\n $(\"#center .unified-panel-title\").text(view.config.get_value(\"name\") + \" (\" + view.dbkey + \")\");\n\n // add dataset\n if (galaxy_config.app.add_dataset) $.ajax({\n url: Galaxy.root + \"api/datasets/\" + galaxy_config.app.add_dataset,\n data: { hda_ldda: \"hda\", data_type: \"track_config\" },\n dataType: \"json\",\n success: function success(track_data) {\n view.add_drawable(_tracks2.default.object_from_template(track_data, view, view));\n }\n });\n\n // initialize icons\n $(\"#add-bookmark-button\").click(function () {\n // add new bookmark.\n var position = view.chrom + \":\" + view.low + \"-\" + view.high;\n\n var annotation = \"Bookmark description\";\n return ui.add_bookmark(position, annotation, true);\n });\n\n // initialize keyboard\n ui.init_keyboard_nav(view);\n\n $(window).on(\"beforeunload\", function () {\n if (view.has_changes) {\n return \"There are unsaved changes to your visualization that will be lost if you leave this page.\";\n }\n });\n }\n});\n\nexports.default = {\n TracksterUI: TracksterUI,\n GalaxyApp: TracksterView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _viz_views = __webpack_require__(115);\n\nvar _viz_views2 = _interopRequireDefault(_viz_views);\n\nvar _util = __webpack_require__(20);\n\nvar _util2 = _interopRequireDefault(_util);\n\nvar _slotting = __webpack_require__(116);\n\nvar _slotting2 = _interopRequireDefault(_slotting);\n\nvar _painters = __webpack_require__(117);\n\nvar _painters2 = _interopRequireDefault(_painters);\n\nvar _filters = __webpack_require__(118);\n\nvar _filters2 = _interopRequireDefault(_filters);\n\nvar _data = __webpack_require__(18);\n\nvar _data2 = _interopRequireDefault(_data);\n\nvar _tools = __webpack_require__(64);\n\nvar _tools2 = _interopRequireDefault(_tools);\n\nvar _config = __webpack_require__(26);\n\nvar _config2 = _interopRequireDefault(_config);\n\nvar _bbiDataManager = __webpack_require__(131);\n\nvar _bbiDataManager2 = _interopRequireDefault(_bbiDataManager);\n\n__webpack_require__(15);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar extend = _.extend;\n\n// ---- Web UI specific utilities ----\n\n/**\n * Dictionary of HTML element-JavaScript object relationships.\n */\n// TODO: probably should separate moveable objects from containers.\nvar html_elt_js_obj_dict = {};\n\n/**\n * Designates an HTML as a container.\n */\nvar is_container = function is_container(element, obj) {\n html_elt_js_obj_dict[element.attr(\"id\")] = obj;\n};\n\n/**\n * Make `element` moveable within parent and sibling elements by dragging `handle` (a selector).\n * Function manages JS objects, containers as well.\n *\n * @param element HTML element to make moveable\n * @param handle_class classname that denotes HTML element to be used as handle\n * @param container_selector selector used to identify possible containers for this element\n * @param element_js_obj JavaScript object associated with element; used\n */\nvar moveable = function moveable(element, handle_class, container_selector, element_js_obj) {\n // HACK: set default value for container selector.\n container_selector = \".group\";\n\n // Register element with its object.\n html_elt_js_obj_dict[element.attr(\"id\")] = element_js_obj;\n\n // Need to provide selector for handle, not class.\n element.bind(\"drag\", { handle: \".\" + handle_class, relative: true }, function (e, d) {\n var element = $(this);\n var parent = $(this).parent();\n\n var // Only sorting amongst tracks and groups.\n children = parent.children(\".track,.group\");\n\n var this_obj = html_elt_js_obj_dict[$(this).attr(\"id\")];\n var child;\n var container;\n var top;\n var bottom;\n var i;\n\n //\n // Enable three types of dragging: (a) out of container; (b) into container;\n // (c) sibling movement, aka sorting. Handle in this order for simplicity.\n //\n\n // Handle dragging out of container.\n container = $(this).parents(container_selector);\n if (container.length !== 0) {\n top = container.position().top;\n bottom = top + container.outerHeight();\n var cur_container = html_elt_js_obj_dict[container.attr(\"id\")];\n if (d.offsetY < top) {\n // Moving above container.\n $(this).insertBefore(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable_before(this_obj, cur_container);\n return;\n } else if (d.offsetY > bottom) {\n // Moving below container.\n $(this).insertAfter(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable(this_obj);\n return;\n }\n }\n\n // Handle dragging into container. Child is appended to container's content_div.\n container = null;\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n top = child.position().top;\n bottom = top + child.outerHeight();\n // Dragging into container if child is a container and offset is inside container.\n if (child.is(container_selector) && this !== child.get(0) && d.offsetY >= top && d.offsetY <= bottom) {\n // Append/prepend based on where offsetY is closest to and return.\n if (d.offsetY - top < bottom - d.offsetY) {\n child.find(\".content-div\").prepend(this);\n } else {\n child.find(\".content-div\").append(this);\n }\n // Update containers. Object may not have container if it is being moved quickly.\n if (this_obj.container) {\n this_obj.container.remove_drawable(this_obj);\n }\n html_elt_js_obj_dict[child.attr(\"id\")].add_drawable(this_obj);\n return;\n }\n }\n\n // Handle sibling movement, aka sorting.\n\n // Determine new position\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n if (d.offsetY < child.position().top &&\n // Cannot move tracks above reference track or intro div.\n !(child.hasClass(\"reference-track\") || child.hasClass(\"intro\"))) {\n break;\n }\n }\n\n // If not already in the right place, move. Need\n // to handle the end specially since we don't have\n // insert at index\n if (i === children.length) {\n if (this !== children.get(i - 1)) {\n parent.append(this);\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, i);\n }\n } else if (this !== children.get(i)) {\n $(this).insertBefore(children.get(i));\n // Need to adjust insert position if moving down because move is changing\n // indices of all list items.\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, d.deltaY > 0 ? i - 1 : i);\n }\n }).bind(\"dragstart\", function () {\n $(this).addClass(\"dragging\");\n }).bind(\"dragend\", function () {\n $(this).removeClass(\"dragging\");\n });\n};\n\n/**\n * Init constants & functions used throughout trackster.\n */\nvar // Padding at the top of tracks for error messages\nERROR_PADDING = 20;\n\nvar // Maximum number of rows un a slotted track\nMAX_FEATURE_DEPTH = 100;\n\nvar // Minimum width for window for squish to be used.\nMIN_SQUISH_VIEW_WIDTH = 12000;\n\nvar // Number of pixels per tile, not including left offset.\nTILE_SIZE = 400;\n\nvar DEFAULT_DATA_QUERY_WAIT = 5000;\n\nvar // Maximum number of chromosomes that are selectable at any one time.\nMAX_CHROMS_SELECTABLE = 100;\n\nvar DATA_ERROR = \"Cannot display dataset due to an error. \";\n\nvar DATA_NOCONVERTER = \"A converter for this dataset is not installed. Please check your datatypes_conf.xml file.\";\n\nvar DATA_NONE = \"No data for this chrom/contig.\";\n\nvar DATA_PENDING = \"Preparing data. This can take a while for a large dataset. \" + \"If the visualization is saved and closed, preparation will continue in the background.\";\n\nvar DATA_CANNOT_RUN_TOOL = \"Tool cannot be rerun: \";\nvar DATA_LOADING = \"Loading data...\";\nvar DATA_OK = \"Ready for display\";\nvar TILE_CACHE_SIZE = 10;\nvar DATA_CACHE_SIZE = 20;\n\nvar // Numerical/continuous data display modes.\nCONTINUOUS_DATA_MODES = [\"Histogram\", \"Line\", \"Filled\", \"Intensity\"];\n\n/**\n * Round a number to a given number of decimal places.\n */\nfunction round(num, places) {\n // Default rounding is to integer.\n if (!places) {\n places = 0;\n }\n\n var val = Math.pow(10, places);\n return Math.round(num * val) / val;\n}\n\n/**\n * Check if a server can do byte range requests.\n */\nfunction supportsByteRanges(url) {\n var promise = $.Deferred();\n $.ajax({\n type: \"HEAD\",\n url: url,\n beforeSend: function beforeSend(xhr) {\n xhr.setRequestHeader(\"Range\", \"bytes=0-10\");\n },\n success: function success(result, status, xhr) {\n promise.resolve(xhr.status === 206);\n }\n });\n\n return promise;\n}\n\n/**\n * Drawables hierarchy:\n *\n * Drawable\n * --> DrawableCollection\n * --> DrawableGroup\n * --> View\n * --> Track\n */\n\n/**\n * Base class for all drawable objects. Drawable objects are associated with a view and live in a\n * container. They have the following HTML elements and structure:\n * \n * \n * \n *\n * They optionally have a drag handle class.\n */\nvar Drawable = function Drawable(view, container, obj_dict) {\n if (!Drawable.id_counter) {\n Drawable.id_counter = 0;\n }\n this.id = Drawable.id_counter++;\n this.view = view;\n this.container = container;\n this.drag_handle_class = obj_dict.drag_handle_class;\n this.is_overview = false;\n this.action_icons = {};\n\n // -- Set up drawable configuration. --\n this.config = _config2.default.ConfigSettingCollection.from_models_and_saved_values(this.config_params, obj_dict.prefs);\n\n // If there's no saved name, use object name.\n if (!this.config.get_value(\"name\")) {\n this.config.set_value(\"name\", obj_dict.name);\n }\n if (this.config_onchange) {\n this.config.on(\"change\", this.config_onchange, this);\n }\n\n // Build Drawable HTML and behaviors.\n this.container_div = this.build_container_div();\n this.header_div = null;\n\n // Use opt-out policy on header creation because this is the more frequent approach:\n // unless flag set, create header.\n if (obj_dict.header !== false) {\n var header_view = new _viz_views2.default.TrackHeaderView({\n model: this,\n id: this.id\n });\n\n this.header_div = header_view.$el;\n this.container_div.append(this.header_div);\n\n // Show icons when users is hovering over track.\n var icons_div = header_view.icons_div;\n this.action_icons = header_view.action_icons;\n this.container_div.hover(function () {\n icons_div.show();\n }, function () {\n icons_div.hide();\n });\n }\n};\n\nDrawable.prototype.action_icons_def = [\n// Hide/show drawable content.\n// FIXME: make this an odict for easier lookup.\n{\n name: \"toggle_icon\",\n title: \"Hide/show content\",\n css_class: \"toggle\",\n on_click_fn: function on_click_fn(drawable) {\n if (drawable.config.get_value(\"content_visible\")) {\n drawable.action_icons.toggle_icon.addClass(\"toggle-expand\").removeClass(\"toggle\");\n drawable.hide_contents();\n drawable.config.set_value(\"content_visible\", false);\n } else {\n drawable.action_icons.toggle_icon.addClass(\"toggle\").removeClass(\"toggle-expand\");\n drawable.config.set_value(\"content_visible\", true);\n drawable.show_contents();\n }\n }\n},\n// Edit settings.\n{\n name: \"settings_icon\",\n title: \"Edit settings\",\n css_class: \"gear\",\n on_click_fn: function on_click_fn(drawable) {\n var view = new _config2.default.ConfigSettingCollectionView({\n collection: drawable.config\n });\n view.render_in_modal(\"Configure Track\");\n }\n},\n// Remove.\n{\n name: \"remove_icon\",\n title: \"Remove\",\n css_class: \"remove-icon\",\n on_click_fn: function on_click_fn(drawable) {\n // Tooltip for remove icon must be deleted when drawable is deleted.\n $(\".tooltip\").remove();\n drawable.remove();\n }\n}];\n\nextend(Drawable.prototype, {\n config_params: [{ key: \"name\", label: \"Name\", type: \"text\", default_value: \"\" }, {\n key: \"content_visible\",\n type: \"bool\",\n default_value: true,\n hidden: true\n }],\n\n config_onchange: function config_onchange() {},\n\n init: function init() {},\n\n changed: function changed() {\n this.view.changed();\n },\n\n can_draw: function can_draw() {\n if (this.enabled && this.config.get_value(\"content_visible\")) {\n return true;\n }\n\n return false;\n },\n\n request_draw: function request_draw() {},\n\n _draw: function _draw(options) {},\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function to_dict() {},\n\n /**\n * Set drawable name.\n */\n set_name: function set_name(new_name) {\n this.old_name = this.config.get_value(\"name\");\n this.config.set_value(\"name\", new_name);\n },\n\n /**\n * Revert track name; currently name can be reverted only once.\n */\n revert_name: function revert_name() {\n if (this.old_name) {\n this.config.set_value(\"name\", this.old_name);\n }\n },\n\n /**\n * Remove drawable (a) from its container and (b) from the HTML.\n */\n remove: function remove() {\n this.changed();\n\n this.container.remove_drawable(this);\n var view = this.view;\n this.container_div.hide(0, function () {\n $(this).remove();\n // HACK: is there a better way to update the view?\n view.update_intro_div();\n });\n },\n\n /**\n * Build drawable's container div; this is the parent div for all drawable's elements.\n */\n build_container_div: function build_container_div() {},\n\n /**\n * Update icons.\n */\n update_icons: function update_icons() {},\n\n /**\n * Hide drawable's contents.\n */\n hide_contents: function hide_contents() {},\n\n /**\n * Show drawable's contents.\n */\n show_contents: function show_contents() {},\n\n /**\n * Returns a shallow copy of all drawables in this drawable.\n */\n get_drawables: function get_drawables() {}\n});\n\n/**\n * A collection of drawable objects.\n */\nvar DrawableCollection = function DrawableCollection(view, container, obj_dict) {\n Drawable.call(this, view, container, obj_dict);\n\n // Attribute init.\n this.obj_type = obj_dict.obj_type;\n this.drawables = [];\n};\n\nextend(DrawableCollection.prototype, Drawable.prototype, {\n /**\n * Unpack and add drawables to the collection.\n */\n unpack_drawables: function unpack_drawables(drawables_array) {\n // Add drawables to collection.\n this.drawables = [];\n var drawable;\n for (var i = 0; i < drawables_array.length; i++) {\n drawable = object_from_template(drawables_array[i], this.view, this);\n this.add_drawable(drawable);\n }\n },\n\n /**\n * Init each drawable in the collection.\n */\n init: function init() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].init();\n }\n },\n\n /**\n * Draw each drawable in the collection.\n */\n _draw: function _draw(options) {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i]._draw(options);\n }\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function to_dict() {\n var dictified_drawables = [];\n for (var i = 0; i < this.drawables.length; i++) {\n dictified_drawables.push(this.drawables[i].to_dict());\n }\n return {\n prefs: this.config.to_key_value_dict(),\n obj_type: this.obj_type,\n drawables: dictified_drawables\n };\n },\n\n /**\n * Add a drawable to the end of the collection.\n */\n add_drawable: function add_drawable(drawable) {\n this.drawables.push(drawable);\n drawable.container = this;\n this.changed();\n },\n\n /**\n * Add a drawable before another drawable.\n */\n add_drawable_before: function add_drawable_before(drawable, other) {\n this.changed();\n var index = this.drawables.indexOf(other);\n if (index !== -1) {\n this.drawables.splice(index, 0, drawable);\n return true;\n }\n return false;\n },\n\n /**\n * Replace one drawable with another.\n */\n replace_drawable: function replace_drawable(old_drawable, new_drawable, update_html) {\n var index = this.drawables.indexOf(old_drawable);\n if (index !== -1) {\n this.drawables[index] = new_drawable;\n if (update_html) {\n old_drawable.container_div.replaceWith(new_drawable.container_div);\n }\n this.changed();\n }\n return index;\n },\n\n /**\n * Remove drawable from this collection.\n */\n remove_drawable: function remove_drawable(drawable) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Found drawable to remove.\n this.drawables.splice(index, 1);\n drawable.container = null;\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Move drawable to another location in collection.\n */\n move_drawable: function move_drawable(drawable, new_position) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Remove from current position:\n this.drawables.splice(index, 1);\n // insert into new position:\n this.drawables.splice(new_position, 0, drawable);\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function get_drawables() {\n return this.drawables;\n },\n\n /**\n * Returns all tracks in collection.\n */\n get_tracks: function get_tracks(track_type) {\n // Initialize queue with copy of drawables array.\n var queue = this.drawables.slice(0);\n\n var tracks = [];\n var drawable;\n while (queue.length !== 0) {\n drawable = queue.shift();\n if (drawable instanceof track_type) {\n tracks.push(drawable);\n } else if (drawable.drawables) {\n queue = queue.concat(drawable.drawables);\n }\n }\n return tracks;\n }\n});\n\n/**\n * A group of drawables that are moveable, visible.\n */\nvar DrawableGroup = function DrawableGroup(view, container, obj_dict) {\n extend(obj_dict, {\n obj_type: \"DrawableGroup\",\n drag_handle_class: \"group-handle\"\n });\n DrawableCollection.call(this, view, container, obj_dict);\n\n // Set up containers/moving for group: register both container_div and content div as container\n // because both are used as containers (container div to recognize container, content_div to\n // store elements). Group can be moved.\n this.content_div = $(\"
\").addClass(\"content-div\").attr(\"id\", \"group_\" + this.id + \"_content_div\").appendTo(this.container_div);\n is_container(this.container_div, this);\n is_container(this.content_div, this);\n moveable(this.container_div, this.drag_handle_class, \".group\", this);\n\n // Set up filters.\n this.filters_manager = new _filters2.default.FiltersManager(this);\n this.header_div.after(this.filters_manager.parent_div);\n\n // HACK: add div to clear floating elements.\n this.filters_manager.parent_div.after($(\"
\"));\n\n // For saving drawables' filter managers when group-level filtering is done:\n this.saved_filters_managers = [];\n\n // Add drawables.\n if (\"drawables\" in obj_dict) {\n this.unpack_drawables(obj_dict.drawables);\n }\n\n // Restore filters.\n if (\"filters\" in obj_dict) {\n // FIXME: Pass collection_dict to DrawableCollection/Drawable will make this easier.\n var old_manager = this.filters_manager;\n this.filters_manager = new _filters2.default.FiltersManager(this, obj_dict.filters);\n old_manager.parent_div.replaceWith(this.filters_manager.parent_div);\n\n if (obj_dict.filters.visible) {\n this.setup_multitrack_filtering();\n }\n }\n};\n\nextend(DrawableGroup.prototype, Drawable.prototype, DrawableCollection.prototype, {\n action_icons_def: [Drawable.prototype.action_icons_def[0], Drawable.prototype.action_icons_def[1],\n // Replace group with composite track.\n {\n name: \"composite_icon\",\n title: \"Show composite track\",\n css_class: \"layers-stack\",\n on_click_fn: function on_click_fn(group) {\n $(\".tooltip\").remove();\n group.show_composite_track();\n }\n },\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function on_click_fn(group) {\n // TODO: update Tooltip text.\n if (group.filters_manager.visible()) {\n // Hiding filters.\n group.filters_manager.clear_filters();\n group._restore_filter_managers();\n // TODO: maintain current filter by restoring and setting saved manager's\n // settings to current/shared manager's settings.\n // TODO: need to restore filter managers when moving drawable outside group.\n } else {\n // Showing filters.\n group.setup_multitrack_filtering();\n group.request_draw({ clear_tile_cache: true });\n }\n group.filters_manager.toggle();\n }\n }, Drawable.prototype.action_icons_def[2]],\n\n build_container_div: function build_container_div() {\n var container_div = $(\"
\").addClass(\"group\").attr(\"id\", \"group_\" + this.id);\n if (this.container) {\n this.container.content_div.append(container_div);\n }\n return container_div;\n },\n\n hide_contents: function hide_contents() {\n this.tiles_div.hide();\n },\n\n show_contents: function show_contents() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n update_icons: function update_icons() {\n //\n // Handle update when there are no tracks.\n //\n var num_drawables = this.drawables.length;\n if (num_drawables === 0) {\n this.action_icons.composite_icon.hide();\n this.action_icons.filters_icon.hide();\n } else if (num_drawables === 1) {\n this.action_icons.composite_icon.toggle(this.drawables[0] instanceof CompositeTrack);\n this.action_icons.filters_icon.hide();\n } else {\n // There are 2 or more tracks.\n\n //\n // Determine if a composite track can be created. Current criteria:\n // (a) all tracks are line tracks;\n // OR\n // FIXME: this is not enabled right now because it has not been well tested:\n // (b) there is a single FeatureTrack.\n //\n\n // All tracks the same?\n var i;\n\n var j;\n var drawable;\n var same_type = true;\n var a_type = this.drawables[0].get_type();\n var num_feature_tracks = 0;\n for (i = 0; i < num_drawables; i++) {\n drawable = this.drawables[i];\n if (drawable.get_type() !== a_type) {\n can_composite = false;\n break;\n }\n if (drawable instanceof FeatureTrack) {\n num_feature_tracks++;\n }\n }\n\n if (same_type && this.drawables[0] instanceof LineTrack) {\n this.action_icons.composite_icon.show();\n } else {\n this.action_icons.composite_icon.hide();\n $(\".tooltip\").remove();\n }\n\n //\n // Set up group-level filtering and update filter icon.\n //\n if (num_feature_tracks > 1 && num_feature_tracks === this.drawables.length) {\n //\n // Find shared filters.\n //\n var shared_filters = {};\n\n var filter;\n\n // Init shared filters with filters from first drawable.\n drawable = this.drawables[0];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n shared_filters[filter.name] = [filter];\n }\n\n // Create lists of shared filters.\n for (i = 1; i < this.drawables.length; i++) {\n drawable = this.drawables[i];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n if (filter.name in shared_filters) {\n shared_filters[filter.name].push(filter);\n }\n }\n }\n\n //\n // Create filters for shared filters manager. Shared filters manager is group's\n // manager.\n //\n this.filters_manager.remove_all();\n var filters;\n var new_filter;\n var min;\n var max;\n for (var filter_name in shared_filters) {\n filters = shared_filters[filter_name];\n if (filters.length === num_feature_tracks) {\n // Add new filter.\n // FIXME: can filter.copy() be used?\n new_filter = new _filters2.default.NumberFilter({\n name: filters[0].name,\n index: filters[0].index\n });\n this.filters_manager.add_filter(new_filter);\n }\n }\n\n // Show/hide icon based on filter availability.\n this.action_icons.filters_icon.toggle(this.filters_manager.filters.length > 0);\n } else {\n this.action_icons.filters_icon.hide();\n }\n }\n },\n\n /**\n * Restore individual track filter managers.\n */\n _restore_filter_managers: function _restore_filter_managers() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].filters_manager = this.saved_filters_managers[i];\n }\n this.saved_filters_managers = [];\n },\n\n /**\n *\n */\n setup_multitrack_filtering: function setup_multitrack_filtering() {\n // Save tracks' managers and set up shared manager.\n if (this.filters_manager.filters.length > 0) {\n // For all tracks, save current filter manager and set manager to shared (this object's) manager.\n this.saved_filters_managers = [];\n for (var i = 0; i < this.drawables.length; i++) {\n var drawable = this.drawables[i];\n this.saved_filters_managers.push(drawable.filters_manager);\n drawable.filters_manager = this.filters_manager;\n }\n\n //TODO: hide filters icons for each drawable?\n }\n this.filters_manager.init_filters();\n },\n\n /**\n * Replace group with a single composite track that includes all group's tracks.\n */\n show_composite_track: function show_composite_track() {\n var composite_track = new CompositeTrack(this.view, this.view, {\n name: this.config.get_value(\"name\"),\n drawables: this.drawables\n });\n var index = this.container.replace_drawable(this, composite_track, true);\n composite_track.request_draw();\n },\n\n add_drawable: function add_drawable(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n this.update_icons();\n },\n\n remove_drawable: function remove_drawable(drawable) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n this.update_icons();\n },\n\n to_dict: function to_dict() {\n // If filters are visible, need to restore original filter managers before converting to dict.\n if (this.filters_manager.visible()) {\n this._restore_filter_managers();\n }\n\n var obj_dict = extend(DrawableCollection.prototype.to_dict.call(this), {\n filters: this.filters_manager.to_dict()\n });\n\n // Setup multi-track filtering again.\n if (this.filters_manager.visible()) {\n this.setup_multitrack_filtering();\n }\n\n return obj_dict;\n },\n\n request_draw: function request_draw(options) {\n _.each(this.drawables, function (d) {\n d.request_draw(options);\n });\n }\n});\n\n/**\n * View object manages a trackster visualization, including tracks and user interactions.\n * Events triggered:\n * navigate: when browser view changes to a new locations\n */\nvar TracksterView = Backbone.View.extend({\n initialize: function initialize(obj_dict) {\n extend(obj_dict, {\n obj_type: \"View\"\n });\n DrawableCollection.call(this, \"View\", obj_dict.container, obj_dict);\n this.chrom = null;\n this.vis_id = obj_dict.vis_id;\n this.dbkey = obj_dict.dbkey;\n this.stand_alone = obj_dict.stand_alone !== undefined ? obj_dict.stand_alone : true;\n this.label_tracks = [];\n this.tracks_to_be_redrawn = [];\n this.max_low = 0;\n this.max_high = 0;\n this.zoom_factor = 3;\n this.min_separation = 30;\n this.has_changes = false;\n // Deferred object that indicates when view's chrom data has been loaded.\n this.load_chroms_deferred = null;\n this.render();\n this.canvas_manager = new _visualization2.default.CanvasManager(this.container.get(0).ownerDocument);\n this.reset();\n\n // Define track configuration\n this.config = _config2.default.ConfigSettingCollection.from_models_and_saved_values([{\n key: \"name\",\n label: \"Name\",\n type: \"text\",\n default_value: \"\"\n }, {\n key: \"a_color\",\n label: \"A Color\",\n type: \"color\",\n default_value: \"#FF0000\"\n }, {\n key: \"c_color\",\n label: \"C Color\",\n type: \"color\",\n default_value: \"#00FF00\"\n }, {\n key: \"g_color\",\n label: \"G Color\",\n type: \"color\",\n default_value: \"#0000FF\"\n }, {\n key: \"t_color\",\n label: \"T Color\",\n type: \"color\",\n default_value: \"#FF00FF\"\n }, {\n key: \"n_color\",\n label: \"N Color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n }], { name: obj_dict.name });\n },\n\n render: function render() {\n // Attribute init.\n this.requested_redraw = false;\n\n // Create DOM elements\n var parent_element = this.container;\n\n var view = this;\n // Top container for things that are fixed at the top\n this.top_container = $(\"
\").addClass(\"top-container\").appendTo(parent_element);\n // Browser content, primary tracks are contained in here\n this.browser_content_div = $(\"
\").addClass(\"content\").appendTo(parent_element);\n // Bottom container for things that are fixed at the bottom\n this.bottom_container = $(\"
\").addClass(\"bottom-container\").appendTo(parent_element);\n // Label track fixed at top\n this.top_labeltrack = $(\"
\").addClass(\"top-labeltrack\").appendTo(this.top_container);\n // Viewport for dragging tracks in center\n this.viewport_container = $(\"
\").addClass(\"viewport-container\").attr(\"id\", \"viewport-container\").appendTo(this.browser_content_div);\n // Alias viewport_container as content_div so that it matches function of DrawableCollection/Group content_div.\n this.content_div = this.viewport_container;\n is_container(this.viewport_container, view);\n // Introduction div shown when there are no tracks.\n this.intro_div = $(\"
\").addClass(\"intro\").appendTo(this.viewport_container);\n var add_tracks_button = $(\"
\").text(\"Add Datasets to Visualization\").addClass(\"action-button\").appendTo(this.intro_div).click(function () {\n _visualization2.default.select_datasets({ dbkey: view.dbkey }, function (tracks) {\n _.each(tracks, function (track) {\n view.add_drawable(object_from_template(track, view, view));\n });\n });\n });\n\n // Navigation at top\n this.nav_container = $(\"
\").addClass(\"trackster-nav-container\").prependTo(this.top_container);\n this.nav = $(\"
\").addClass(\"trackster-nav\").appendTo(this.nav_container);\n\n if (this.stand_alone) {\n this.nav_container.addClass(\"stand-alone\");\n this.nav.addClass(\"stand-alone\");\n }\n\n // Overview (scrollbar and overview plot) at bottom\n this.overview = $(\"
\").addClass(\"overview\").appendTo(this.bottom_container);\n this.overview_viewport = $(\"
\").addClass(\"overview-viewport\").appendTo(this.overview);\n this.overview_close = $(\"\").attr(\"title\", \"Close overview\").addClass(\"icon-button overview-close tooltip\").hide().appendTo(this.overview_viewport);\n this.overview_highlight = $(\"
\").addClass(\"overview-highlight\").hide().appendTo(this.overview_viewport);\n this.overview_box_background = $(\"
\").addClass(\"overview-boxback\").appendTo(this.overview_viewport);\n this.overview_box = $(\"
\").addClass(\"overview-box\").appendTo(this.overview_viewport);\n this.default_overview_height = this.overview_box.height();\n\n this.nav_controls = $(\"
\").addClass(\"nav-controls\").appendTo(this.nav);\n this.chrom_select = $(\"\").addClass(\"nav-input\").hide().bind(\"keyup focusout\", submit_nav).appendTo(this.nav_controls);\n this.location_span = $(\"\").addClass(\"location\").attr(\"title\", \"Click to change location\").tooltip({ placement: \"bottom\" }).appendTo(this.nav_controls);\n this.location_span.click(function () {\n view.location_span.hide();\n view.chrom_select.hide();\n view.nav_input.val(view.chrom + \":\" + view.low + \"-\" + view.high);\n view.nav_input.css(\"display\", \"inline-block\");\n view.nav_input.select();\n view.nav_input.focus();\n // Set up autocomplete for tracks' features.\n view.nav_input.autocomplete({\n source: function source(request, response) {\n // Using current text, query each track and create list of all matching features.\n var all_features = [];\n\n var feature_search_deferreds = $.map(view.get_tracks(FeatureTrack), function (t) {\n return t.data_manager.search_features(request.term).success(function (dataset_features) {\n all_features = all_features.concat(dataset_features);\n });\n });\n\n // When all searching is done, fill autocomplete.\n $.when.apply($, feature_search_deferreds).done(function () {\n response($.map(all_features, function (feature) {\n return {\n label: feature[0],\n value: feature[1]\n };\n }));\n });\n },\n minLength: 2\n });\n });\n if (this.vis_id !== undefined) {\n this.hidden_input = $(\"\").attr(\"type\", \"hidden\").val(this.vis_id).appendTo(this.nav_controls);\n }\n\n this.zo_link = $(\"\").attr(\"id\", \"zoom-out\").attr(\"title\", \"Zoom out\").tooltip({ placement: \"bottom\" }).click(function () {\n view.zoom_out();\n }).appendTo(this.nav_controls);\n this.zi_link = $(\"\").attr(\"id\", \"zoom-in\").attr(\"title\", \"Zoom in\").tooltip({ placement: \"bottom\" }).click(function () {\n view.zoom_in();\n }).appendTo(this.nav_controls);\n\n // Get initial set of chroms.\n this.load_chroms_deferred = this.load_chroms({ low: 0 });\n this.chrom_select.bind(\"change\", function () {\n view.change_chrom(view.chrom_select.val());\n });\n\n /*\n this.browser_content_div.bind(\"mousewheel\", function( e, delta ) {\n if (Math.abs(delta) < 0.5) {\n return;\n }\n if (delta > 0) {\n view.zoom_in(e.pageX, this.viewport_container);\n } else {\n view.zoom_out();\n }\n e.preventDefault();\n });\n */\n\n // Blur tool/filter inputs when user clicks on content div.\n this.browser_content_div.click(function (e) {\n $(this).find(\"input\").trigger(\"blur\");\n });\n\n // Double clicking zooms in\n this.browser_content_div.bind(\"dblclick\", function (e) {\n view.zoom_in(e.pageX, this.viewport_container);\n });\n\n // Dragging the overview box (~ horizontal scroll bar)\n this.overview_box.bind(\"dragstart\", function (e, d) {\n this.current_x = d.offsetX;\n }).bind(\"drag\", function (e, d) {\n var delta = d.offsetX - this.current_x;\n this.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.max_high - view.max_low));\n view.move_delta(-delta_chrom);\n });\n\n this.overview_close.click(function () {\n view.reset_overview();\n });\n\n // Dragging in the viewport scrolls\n this.viewport_container.bind(\"draginit\", function (e, d) {\n // Disable interaction if started in scrollbar (for webkit)\n if (e.clientX > view.viewport_container.width() - 16) {\n return false;\n }\n }).bind(\"dragstart\", function (e, d) {\n d.original_low = view.low;\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n }).bind(\"drag\", function (e, d) {\n var container = $(this);\n var delta = d.offsetX - d.current_x;\n var new_scroll = container.scrollTop() - (e.clientY - d.current_height);\n container.scrollTop(new_scroll);\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.high - view.low));\n view.move_delta(delta_chrom);\n });\n /*\n FIXME: Do not do this for now because it's too jittery. Some kind of gravity approach is\n needed here because moving left/right should be difficult.\n // Also capture mouse wheel for left/right scrolling\n }).bind( 'mousewheel', function( e, d, dx, dy ) {\n // Only handle x axis scrolling; y axis scrolling is\n // handled by the browser when the event bubbles up.\n if (dx) {\n var delta_chrom = Math.round( - dx / view.viewport_container.width() * (view.high - view.low) );\n view.move_delta( delta_chrom );\n }\n });\n */\n\n // Dragging in the top label track allows selecting a region to zoom in on selected region.\n this.top_labeltrack.bind(\"dragstart\", function (e, d) {\n return $(\"
\").addClass(\"zoom-area\").css(\"height\", view.browser_content_div.height() + view.top_labeltrack.height() + 1).appendTo($(this));\n }).bind(\"drag\", function (e, d) {\n $(d.proxy).css({\n left: Math.min(e.pageX, d.startX) - view.container.offset().left,\n width: Math.abs(e.pageX - d.startX)\n });\n\n var min = Math.min(e.pageX, d.startX) - view.container.offset().left;\n\n var max = Math.max(e.pageX, d.startX) - view.container.offset().left;\n\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n view.update_location(Math.round(min / width * span) + view.low, Math.round(max / width * span) + view.low);\n }).bind(\"dragend\", function (e, d) {\n var min = Math.min(e.pageX, d.startX);\n var max = Math.max(e.pageX, d.startX);\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n var old_low = view.low;\n view.low = Math.round(min / width * span) + old_low;\n view.high = Math.round(max / width * span) + old_low;\n $(d.proxy).remove();\n view.request_redraw();\n });\n\n // FIXME: this is still wonky for embedded visualizations.\n /*\n // For vertical alignment, track mouse with simple line.\n var mouse_tracker_div = $('
').addClass('mouse-pos').appendTo(parent_element);\n // Show tracker only when hovering over view.\n parent_element.hover(\n function() {\n mouse_tracker_div.show();\n parent_element.mousemove(function(e) {\n mouse_tracker_div.css({\n // -1 makes line appear next to the mouse w/o preventing mouse actions.\n left: e.pageX - parent_element.offset().left - 1\n });\n });\n },\n function() {\n parent_element.off('mousemove');\n mouse_tracker_div.hide();\n }\n );\n */\n\n this.add_label_track(new LabelTrack(this, { content_div: this.top_labeltrack }));\n\n $(window).bind(\"resize\", function () {\n // Stop previous timer.\n if (this.resize_timer) {\n clearTimeout(this.resize_timer);\n }\n\n // When function activated, resize window and redraw.\n this.resize_timer = setTimeout(function () {\n view.resize_window();\n }, 500);\n });\n $(document).bind(\"redraw\", function () {\n view.redraw();\n });\n\n this.reset();\n $(window).trigger(\"resize\");\n },\n\n get_base_color: function get_base_color(base) {\n return this.config.get_value(base.toLowerCase() + \"_color\") || this.config.get_value(\"n_color\");\n }\n});\n\n// FIXME: need to use this approach to enable inheritance of DrawableCollection functions.\nextend(TracksterView.prototype, DrawableCollection.prototype, {\n changed: function changed() {\n this.has_changes = true;\n },\n\n /** Add or remove intro div depending on view state. */\n update_intro_div: function update_intro_div() {\n this.intro_div.toggle(this.drawables.length === 0);\n },\n\n /**\n * Triggers navigate events as needed. If there is a delay,\n * then event is triggered only after navigation has stopped.\n */\n trigger_navigate: function trigger_navigate(new_chrom, new_low, new_high, delay) {\n // Stop previous timer.\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n if (delay) {\n // To aggregate calls, use timer and only navigate once\n // location has stabilized.\n var self = this;\n this.timer = setTimeout(function () {\n self.trigger(\"navigate\", new_chrom + \":\" + new_low + \"-\" + new_high);\n }, 500);\n } else {\n view.trigger(\"navigate\", new_chrom + \":\" + new_low + \"-\" + new_high);\n }\n },\n\n update_location: function update_location(low, high) {\n this.location_span.text(_util2.default.commatize(low) + \" - \" + _util2.default.commatize(high));\n this.nav_input.val(this.chrom + \":\" + _util2.default.commatize(low) + \"-\" + _util2.default.commatize(high));\n\n // Update location. Only update when there is a valid chrom; when loading vis, there may\n // not be a valid chrom.\n var chrom = this.chrom_select.val();\n if (chrom !== \"\") {\n this.trigger_navigate(chrom, this.low, this.high, true);\n }\n },\n\n /**\n * Load chrom data for the view. Returns a jQuery Deferred.\n */\n // FIXME: instead of loading chrom data, should load and store genome object.\n load_chroms: function load_chroms(url_parms) {\n url_parms.num = MAX_CHROMS_SELECTABLE;\n\n var view = this;\n var chrom_data = $.Deferred();\n $.ajax({\n url: Galaxy.root + \"api/genomes/\" + this.dbkey,\n data: url_parms,\n dataType: \"json\",\n success: function success(result) {\n // Do nothing if could not load chroms.\n if (result.chrom_info.length === 0) {\n return;\n }\n\n // Load chroms.\n if (result.reference) {\n var ref_track = new ReferenceTrack(view);\n view.add_label_track(ref_track);\n view.reference_track = ref_track;\n }\n view.chrom_data = result.chrom_info;\n\n view.chrom_select.html(\"\");\n view.chrom_select.append($(''));\n\n for (var i = 0, len = view.chrom_data.length; i < len; i++) {\n var chrom = view.chrom_data[i].chrom;\n var chrom_option = $(\"\"));\n }\n if (result.next_chroms) {\n view.chrom_select.append($(\"\"));\n }\n view.chrom_start_index = result.start_index;\n\n chrom_data.resolve(result.chrom_info);\n },\n error: function error() {\n alert(\"Could not load chroms for this dbkey: \" + view.dbkey);\n }\n });\n return chrom_data;\n },\n\n change_chrom: function change_chrom(chrom, low, high) {\n var view = this;\n // If chrom data is still loading, wait for it.\n if (!view.chrom_data) {\n view.load_chroms_deferred.then(function () {\n view.change_chrom(chrom, low, high);\n });\n return;\n }\n\n // Don't do anything if chrom is \"None\" (hackish but some browsers already have this set), or null/blank\n if (!chrom || chrom === \"None\") {\n return;\n }\n\n //\n // If user is navigating to previous/next set of chroms, load new chrom set and return.\n //\n if (chrom === \"previous\") {\n view.load_chroms({\n low: this.chrom_start_index - MAX_CHROMS_SELECTABLE\n });\n return;\n }\n if (chrom === \"next\") {\n view.load_chroms({\n low: this.chrom_start_index + MAX_CHROMS_SELECTABLE\n });\n return;\n }\n\n //\n // User is loading a particular chrom. Look first in current set; if not in current set, load new\n // chrom set.\n //\n var found = $.grep(view.chrom_data, function (v, i) {\n return v.chrom === chrom;\n })[0];\n if (found === undefined) {\n // Try to load chrom and then change to chrom.\n view.load_chroms({ chrom: chrom }, function () {\n view.change_chrom(chrom, low, high);\n });\n return;\n } else {\n // Switching to local chrom.\n if (chrom !== view.chrom) {\n view.chrom = chrom;\n view.chrom_select.val(view.chrom);\n view.max_high = found.len - 1; // -1 because we're using 0-based indexing.\n view.reset();\n\n for (var i = 0, len = view.drawables.length; i < len; i++) {\n var drawable = view.drawables[i];\n if (drawable.init) {\n drawable.init();\n }\n }\n if (view.reference_track) {\n view.reference_track.init();\n }\n }\n\n // Resolve low, high.\n if (low === undefined && high === undefined) {\n // Both are undefined, so view is whole chromosome.\n view.low = 0;\n view.high = view.max_high;\n } else {\n // Low and/or high is defined.\n view.low = low !== undefined ? Math.max(low, 0) : 0;\n if (high === undefined) {\n // Center visualization around low.\n // HACK: max resolution is currently 30 bases.\n view.low = Math.max(view.low - 15, 0);\n view.high = view.low + 30;\n } else {\n // High is defined.\n view.high = Math.min(high, view.max_high);\n }\n }\n\n view.request_redraw();\n }\n },\n\n /**\n * Change viewing region to that denoted by string. General format of string is:\n *\n * [ {separator}[-] ]\n *\n * where separator can be whitespace or a colon. Examples:\n *\n * chr22\n * chr1:100-200\n * chr7 89999\n * chr8 90000 990000\n */\n go_to: function go_to(str) {\n // Remove commas.\n str = str.replace(/,/g, \"\");\n\n // Replace colons and hyphens with space for easy parsing.\n str = str.replace(/:|\\-/g, \" \");\n\n // Parse new location.\n var chrom_pos = str.split(/\\s+/);\n\n var chrom = chrom_pos[0];\n var new_low = chrom_pos[1] ? parseInt(chrom_pos[1], 10) : undefined;\n var new_high = chrom_pos[2] ? parseInt(chrom_pos[2], 10) : undefined;\n\n this.change_chrom(chrom, new_low, new_high);\n },\n\n move_fraction: function move_fraction(fraction) {\n var view = this;\n var span = view.high - view.low;\n this.move_delta(fraction * span);\n },\n\n move_delta: function move_delta(delta_chrom) {\n //\n // Update low, high.\n //\n\n var view = this;\n var current_chrom_span = view.high - view.low;\n // Check for left and right boundaries\n if (view.low - delta_chrom < view.max_low) {\n view.low = view.max_low;\n view.high = view.max_low + current_chrom_span;\n } else if (view.high - delta_chrom > view.max_high) {\n view.high = view.max_high;\n view.low = view.max_high - current_chrom_span;\n } else {\n view.high -= delta_chrom;\n view.low -= delta_chrom;\n }\n\n //\n // Redraw view.\n //\n\n // Redraw without requesting more data immediately.\n view.request_redraw({ data_fetch: false });\n\n // Set up timeout to redraw with more data when moving stops.\n if (this.redraw_on_move_fn) {\n clearTimeout(this.redraw_on_move_fn);\n }\n\n this.redraw_on_move_fn = setTimeout(function () {\n view.request_redraw();\n }, 200);\n\n // Navigate.\n var chrom = view.chrom_select.val();\n this.trigger_navigate(chrom, view.low, view.high, true);\n },\n\n /**\n * Add a drawable to the view.\n */\n add_drawable: function add_drawable(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n drawable.init();\n this.changed();\n this.update_intro_div();\n\n // When drawable config changes, mark view as changed. This\n // captures most (all?) state change that needs to be saved.\n var self = this;\n drawable.config.on(\"change\", function () {\n self.changed();\n });\n },\n\n add_label_track: function add_label_track(label_track) {\n label_track.view = this;\n label_track.init();\n this.label_tracks.push(label_track);\n },\n\n /**\n * Remove drawable from the view.\n */\n remove_drawable: function remove_drawable(drawable, hide) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n if (hide) {\n var view = this;\n drawable.container_div.hide(0, function () {\n $(this).remove();\n view.update_intro_div();\n });\n }\n },\n\n reset: function reset() {\n this.low = this.max_low;\n this.high = this.max_high;\n this.viewport_container.find(\".yaxislabel\").remove();\n },\n\n /**\n * Request that view redraw one or more of view's drawables. If drawable is not specified,\n * all drawables are redrawn.\n */\n request_redraw: function request_redraw(options, drawable) {\n var view = this;\n\n var // Either redrawing a single drawable or all view's drawables.\n track_list = drawable ? [drawable] : view.drawables;\n\n // Add/update tracks in track list to redraw list.\n _.each(track_list, function (track) {\n var track_options = _.find(view.tracks_to_be_redrawn, function (to) {\n return to[0] === track;\n });\n\n if (track_options) {\n // Track already in list; update options.\n track_options[1] = options;\n } else {\n // Track not in list yet.\n view.tracks_to_be_redrawn.push([track, options]);\n }\n });\n\n // Set up redraw if it has not been requested since last redraw.\n if (!this.requested_redraw) {\n requestAnimationFrame(function () {\n view._redraw();\n });\n this.requested_redraw = true;\n }\n },\n\n /**\n * Redraws view and tracks.\n * NOTE: this method should never be called directly; request_redraw() should be used so\n * that requestAnimationFrame can manage redrawing.\n */\n _redraw: function _redraw() {\n // TODO: move this code to function that does location setting.\n\n // Clear because requested redraw is being handled now.\n this.requested_redraw = false;\n\n var low = this.low;\n var high = this.high;\n\n if (low < this.max_low) {\n low = this.max_low;\n }\n if (high > this.max_high) {\n high = this.max_high;\n }\n var span = this.high - this.low;\n if (this.high !== 0 && span < this.min_separation) {\n high = low + this.min_separation;\n }\n this.low = Math.floor(low);\n this.high = Math.ceil(high);\n\n this.update_location(this.low, this.high);\n\n // -- Drawing code --\n\n // Resolution is a pixel density.\n this.resolution_px_b = this.viewport_container.width() / (this.high - this.low);\n\n // Overview\n var left_px = this.low / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var width_px = (this.high - this.low) / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var min_width_px = 13;\n\n this.overview_box.css({\n left: left_px,\n width: Math.max(min_width_px, width_px)\n }).show();\n if (width_px < min_width_px) {\n this.overview_box.css(\"left\", left_px - (min_width_px - width_px) / 2);\n }\n if (this.overview_highlight) {\n this.overview_highlight.css({\n left: left_px,\n width: width_px\n });\n }\n\n // Draw data tracks.\n _.each(this.tracks_to_be_redrawn, function (track_options) {\n var track = track_options[0];\n var options = track_options[1];\n if (track) {\n track._draw(options);\n }\n });\n this.tracks_to_be_redrawn = [];\n\n // Draw label tracks.\n _.each(this.label_tracks, function (label_track) {\n label_track._draw();\n });\n },\n\n zoom_in: function zoom_in(point, container) {\n if (this.max_high === 0 || this.high - this.low <= this.min_separation) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span / this.zoom_factor / 2;\n if (point) {\n cur_center = point / this.viewport_container.width() * (this.high - this.low) + this.low;\n }\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n\n this.changed();\n this.request_redraw();\n },\n\n zoom_out: function zoom_out() {\n if (this.max_high === 0) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span * this.zoom_factor / 2;\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n this.changed();\n this.request_redraw();\n },\n\n /** Resize viewport. Use this method if header/footer content has changed in size. */\n resize_viewport: function resize_viewport() {\n this.viewport_container.height(this.container.height() - this.top_container.height() - this.bottom_container.height());\n },\n\n /** Called when window is resized. */\n resize_window: function resize_window() {\n this.resize_viewport();\n this.request_redraw();\n },\n\n /** Show a Drawable in the overview. */\n set_overview: function set_overview(drawable) {\n if (this.overview_drawable) {\n // If drawable to be set as overview is already in overview, do nothing.\n // Otherwise, remove overview.\n if (this.overview_drawable.dataset.id === drawable.dataset.id) {\n return;\n }\n this.overview_viewport.find(\".track\").remove();\n }\n\n // Set new overview.\n var overview_drawable = drawable.copy({\n content_div: this.overview_viewport\n });\n\n var view = this;\n overview_drawable.header_div.hide();\n overview_drawable.is_overview = true;\n view.overview_drawable = overview_drawable;\n this.overview_drawable.postdraw_actions = function () {\n view.overview_highlight.show().height(view.overview_drawable.content_div.height());\n view.overview_viewport.height(view.overview_drawable.content_div.height() + view.overview_box.outerHeight());\n view.overview_close.show();\n view.resize_window();\n };\n view.overview_drawable.request_draw();\n this.changed();\n },\n\n /** Close and reset overview. */\n reset_overview: function reset_overview() {\n // Update UI.\n $(\".tooltip\").remove();\n this.overview_viewport.find(\".track-tile\").remove();\n this.overview_viewport.height(this.default_overview_height);\n this.overview_box.height(this.default_overview_height);\n this.overview_close.hide();\n this.overview_highlight.hide();\n view.resize_window();\n view.overview_drawable = null;\n }\n});\n\n/**\n * Encapsulation of a tool that users can apply to tracks/datasets.\n */\nvar TracksterTool = _tools2.default.Tool.extend({\n defaults: {\n track: null\n },\n\n initialize: function initialize(options) {\n _tools2.default.Tool.prototype.initialize.call(this, options);\n\n // Restore tool visibility from state; default to hidden.\n var hidden = true;\n if (options.tool_state !== undefined && options.tool_state.hidden !== undefined) {\n hidden = options.tool_state.hidden;\n }\n this.set(\"hidden\", hidden);\n\n // FIXME: need to restore tool values from options.tool_state\n\n // HACK: remove some inputs because Trackster does yet not work with them.\n this.remove_inputs([\"data\", \"hidden_data\", \"conditional\"]);\n },\n\n state_dict: function state_dict(options) {\n return _.extend(this.get_inputs_dict(), {\n hidden: !this.is_visible()\n });\n }\n});\n\n/**\n * View renders tool parameter HTML and updates parameter value as it is changed in the HTML.\n */\nvar ToolParameterView = Backbone.View.extend({\n events: {\n \"change :input\": \"update_value\"\n },\n\n render: function render() {\n var param_div = this.$el.addClass(\"param-row\");\n var param = this.model;\n\n // Param label.\n var label_div = $(\"
\").addClass(\"param-label\").text(param.get(\"label\")).appendTo(param_div);\n // Param HTML.\n var html_div = $(\"
\").addClass(\"param-input\").html(param.get(\"html\")).appendTo(param_div);\n // Set initial value.\n html_div.find(\":input\").val(param.get(\"value\"));\n\n // Add to clear floating layout.\n $(\"
\").appendTo(param_div);\n },\n\n update_value: function update_value(update_event) {\n this.model.set_value($(update_event.target).val());\n }\n});\n\n/**\n * View for TracksterTool.\n */\nvar TracksterToolView = Backbone.View.extend({\n initialize: function initialize(options) {\n this.model.on(\"change:hidden\", this.set_visible, this);\n },\n\n /**\n * Render tool UI.\n */\n render: function render() {\n var self = this;\n var tool = this.model;\n var parent_div = this.$el.addClass(\"dynamic-tool\").hide();\n\n // Prevent div events from propogating to other elements.\n parent_div.bind(\"drag\", function (e) {\n e.stopPropagation();\n }).click(function (e) {\n e.stopPropagation();\n }).bind(\"dblclick\", function (e) {\n e.stopPropagation();\n }).keydown(function (e) {\n e.stopPropagation();\n });\n\n // Add name, inputs.\n var name_div = $(\"
\").appendTo(parent_div).text(tool.get(\"name\"));\n tool.get(\"inputs\").each(function (param) {\n // Render parameter.\n var param_view = new ToolParameterView({ model: param });\n param_view.render();\n parent_div.append(param_view.$el);\n });\n\n // Highlight value for inputs for easy replacement.\n parent_div.find(\"input\").click(function () {\n $(this).select();\n });\n\n // Add buttons for running on dataset, region.\n var run_tool_row = $(\"
\").addClass(\"param-row\").appendTo(parent_div);\n var run_on_dataset_button = $(\"\").attr(\"value\", \"Run on complete dataset\").appendTo(run_tool_row);\n var run_on_region_button = $(\"\").attr(\"value\", \"Run on visible region\").appendTo(run_tool_row);\n run_on_region_button.click(function () {\n // Run tool to create new track.\n self.run_on_region();\n });\n run_on_dataset_button.click(function () {\n self.run_on_dataset();\n });\n\n if (tool.is_visible()) {\n this.$el.show();\n }\n },\n\n /**\n * Show or hide tool depending on tool visibility state.\n */\n set_visible: function set_visible() {\n this.$el.toggle(this.model.is_visible());\n },\n\n /**\n * Update tool parameters.\n */\n update_params: function update_params() {\n for (var i = 0; i < this.params.length; i++) {\n this.params[i].update_value();\n }\n },\n\n /**\n * Run tool on dataset. Output is placed in dataset's history and no changes to viz are made.\n */\n run_on_dataset: function run_on_dataset() {\n var tool = this.model;\n this.run(\n // URL params.\n {\n target_dataset_id: this.model.get(\"track\").dataset.id,\n action: \"rerun\",\n tool_id: tool.id\n }, null, function (track_data) {\n Galaxy.modal.show({\n title: tool.get(\"name\") + \" is Running\",\n body: tool.get(\"name\") + \" is running on the complete dataset. Tool outputs are in dataset's history.\",\n buttons: {\n Close: function Close() {\n Galaxy.modal.hide();\n }\n }\n });\n });\n },\n\n /**\n * Run dataset on visible region. This creates a new track and sets the track's contents\n * to the tool's output.\n */\n run_on_region: function run_on_region() {\n //\n // Create track for tool's output immediately to provide user feedback.\n //\n var track = this.model.get(\"track\");\n\n var tool = this.model;\n\n var region = new _visualization2.default.GenomeRegion({\n chrom: track.view.chrom,\n start: track.view.low,\n end: track.view.high\n });\n\n var url_params = {\n target_dataset_id: track.dataset.id,\n action: \"rerun\",\n tool_id: tool.id,\n regions: [region.toJSON()]\n };\n\n var current_track = track;\n\n var // Set name of track to include tool name, parameters, and region used.\n track_name = tool.get(\"name\") + current_track.tool_region_and_parameters_str(region);\n\n var container;\n\n // If track not in a group, create a group for it and add new track to group. If track\n // already in group, add track to group.\n if (current_track.container === view) {\n // Create new group.\n var group = new DrawableGroup(view, view, {\n name: track.config.get_value(\"name\")\n });\n\n // Replace track with group.\n var index = current_track.container.replace_drawable(current_track, group, false);\n\n // Update HTML.\n // FIXME: this is ugly way to replace a track with a group -- make this easier via\n // a Drawable or DrawableCollection function.\n group.container_div.insertBefore(current_track.view.content_div.children()[index]);\n group.add_drawable(current_track);\n current_track.container_div.appendTo(group.content_div);\n container = group;\n } else {\n // Use current group.\n container = current_track.container;\n }\n\n // Create and init new track.\n var new_track = new current_track.constructor(view, container, {\n name: track_name,\n hda_ldda: \"hda\"\n });\n new_track.init_for_tool_data();\n new_track.change_mode(current_track.mode);\n new_track.set_filters_manager(current_track.filters_manager.copy(new_track));\n new_track.update_icons();\n container.add_drawable(new_track);\n new_track.tiles_div.text(\"Starting job.\");\n\n // Run tool.\n this.run(url_params, new_track, function (track_data) {\n new_track.set_dataset(new _data2.default.Dataset(track_data));\n new_track.tiles_div.text(\"Running job.\");\n new_track.init();\n });\n },\n\n /**\n * Run tool using a set of URL params and a success callback.\n */\n run: function run(url_params, new_track, success_callback) {\n // Run tool.\n url_params.inputs = this.model.get_inputs_dict();\n var ss_deferred = new _util2.default.ServerStateDeferred({\n ajax_settings: {\n url: Galaxy.root + \"api/tools\",\n data: JSON.stringify(url_params),\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\"\n },\n interval: 2000,\n success_fn: function success_fn(response) {\n return response !== \"pending\";\n }\n });\n\n // Start with this status message.\n //new_track.container_div.addClass(\"pending\");\n //new_track.content_div.html(DATA_PENDING);\n\n $.when(ss_deferred.go()).then(function (response) {\n if (response === \"no converter\") {\n // No converter available for input datasets, so cannot run tool.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_NOCONVERTER);\n } else if (response.error) {\n // General error.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);\n } else {\n // Job submitted and running.\n success_callback(response);\n }\n });\n }\n});\n\n/**\n * Generates scale values based on filter and feature's value for filter.\n */\nvar FilterScaler = function FilterScaler(filter, default_val) {\n _painters2.default.Scaler.call(this, default_val);\n this.filter = filter;\n};\n\nFilterScaler.prototype.gen_val = function (feature_data) {\n // If filter is not initalized yet, return default val.\n if (this.filter.high === Number.MAX_VALUE || this.filter.low === -Number.MAX_VALUE || this.filter.low === this.filter.high) {\n return this.default_val;\n }\n\n // Scaling value is ratio of (filter's value compared to low) to (complete filter range).\n return (parseFloat(feature_data[this.filter.index]) - this.filter.low) / (this.filter.high - this.filter.low);\n};\n\n/**\n * Tiles drawn by tracks.\n */\nvar Tile = function Tile(track, region, w_scale, canvas, data) {\n this.track = track;\n this.region = region;\n this.low = region.get(\"start\");\n this.high = region.get(\"end\");\n this.w_scale = w_scale;\n this.canvas = canvas;\n // Wrap element in div for background and to provide container for tile-specific elements.\n this.html_elt = $(\"
\").append(canvas);\n this.data = data;\n this.stale = false;\n};\n\n/**\n * Perform pre-display actions.\n */\nTile.prototype.predisplay_actions = function () {};\n\nvar LineTrackTile = function LineTrackTile(track, region, w_scale, canvas, data) {\n Tile.call(this, track, region, w_scale, canvas, data);\n};\nLineTrackTile.prototype.predisplay_actions = function () {};\n\nvar FeatureTrackTile = function FeatureTrackTile(track, region, w_scale, canvas, data, mode, message, all_slotted, feature_mapper, incomplete_features, seq_data) {\n // Attribute init.\n Tile.call(this, track, region, w_scale, canvas, data);\n this.mode = mode;\n this.all_slotted = all_slotted;\n this.feature_mapper = feature_mapper;\n this.has_icons = false;\n this.incomplete_features = incomplete_features;\n // Features drawn based on data from other tiles.\n this.other_tiles_features_drawn = {};\n this.seq_data = seq_data;\n\n // Add message + action icons to tile's html.\n /*\n This does not work right now because a random set of reads is returned by the server.\n When the server can respond with more data systematically, renable these icons.\n if (message) {\n this.has_icons = true;\n var\n tile = this;\n canvas = this.html_elt.children()[0],\n message_div = $(\"
\").addClass(\"tile-message\")\n // -1 to account for border.\n .css({'height': ERROR_PADDING, 'width': canvas.width}).prependTo(this.html_elt);\n // Handle message; only message currently is that only the first N elements are displayed.\n var tile_region = new visualization.GenomeRegion({\n chrom: track.view.chrom,\n start: this.low,\n end: this.high\n }),\n num_features = data.length,\n more_down_icon = $(\"\").addClass(\"icon more-down\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data including depth\")\n .tooltip().appendTo(message_div),\n more_across_icon = $(\"\").addClass(\"icon more-across\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data excluding depth\")\n .tooltip().appendTo(message_div);\n // Set up actions for icons.\n more_down_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.DEEP_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n more_across_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.BROAD_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n }\n */\n};\nextend(FeatureTrackTile.prototype, Tile.prototype);\n\n/**\n * Sets up support for popups.\n */\nFeatureTrackTile.prototype.predisplay_actions = function () {\n /*\n FIXME: use a canvas library to handle popups.\n //\n // Add support for popups.\n //\n var tile = this,\n popups = {};\n // Only show popups in Pack mode.\n if (tile.mode !== \"Pack\") { return; }\n $(this.html_elt).hover(\n function() {\n this.hovered = true;\n $(this).mousemove();\n },\n function() {\n this.hovered = false;\n // Clear popup if it is still hanging around (this is probably not needed)\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n } ).mousemove(function (e) {\n // Use the hover plugin to get a delay before showing popup\n if ( !this.hovered ) { return; }\n // Get feature data for position.\n var\n this_offset = $(this).offset(),\n offsetX = e.pageX - this_offset.left,\n offsetY = e.pageY - this_offset.top,\n feature_data = tile.feature_mapper.get_feature_data(offsetX, offsetY),\n feature_uid = (feature_data ? feature_data[0] : null);\n // Hide visible popup if not over a feature or over a different feature.\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").each(function() {\n if ( !feature_uid ||\n $(this).attr(\"id\") !== feature_uid.toString() ) {\n $(this).remove();\n }\n });\n if (feature_data) {\n // Get or create popup.\n var popup = popups[feature_uid];\n if (!popup) {\n // Create feature's popup element.\n var feature_dict = {\n name: feature_data[3],\n start: feature_data[1],\n end: feature_data[2],\n strand: feature_data[4]\n },\n filters = tile.track.filters_manager.filters,\n filter;\n // Add filter values to feature dict.\n for (var i = 0; i < filters.length; i++) {\n filter = filters[i];\n feature_dict[filter.name] = feature_data[filter.index];\n }\n // Build popup.\n popup = $(\"
\").attr(\"id\", feature_uid).addClass(\"feature-popup\");\n var table = $(\"\"),\n key, value, row;\n for (key in feature_dict) {\n value = feature_dict[key];\n row = $(\"\").appendTo(table);\n $(\" or other required elements.\n\tthead: [ 1, \"
\").appendTo(row).text(key);\n $(\"\").attr(\"align\", \"left\").appendTo(row)\n .text(typeof(value) === 'number' ? round(value, 2) : value);\n }\n popup.append( $(\"
\").append( table ) );\n popups[feature_uid] = popup;\n }\n // Attach popup to track's overlay.\n popup.appendTo( $(this).parents(\".track-content\").children(\".overlay\") );\n // Offsets are within canvas, but popup must be positioned relative to parent element.\n // parseInt strips \"px\" from left, top measurements. +7 so that mouse pointer does not\n // overlap popup.\n var\n popupX = offsetX + parseInt( tile.html_elt.css(\"left\"), 10 ) - popup.width() / 2,\n popupY = offsetY + parseInt( tile.html_elt.css(\"top\"), 10 ) + 7;\n popup.css(\"left\", popupX + \"px\").css(\"top\", popupY + \"px\");\n }\n else if (!e.isPropagationStopped()) {\n // Propogate event to other tiles because overlapping tiles prevent mousemove from being\n // called on tiles under this tile.\n e.stopPropagation();\n $(this).siblings().each(function() {\n $(this).trigger(e);\n });\n }\n })\n .mouseleave(function() {\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n });\n */\n};\n\n/**\n * Tracks are objects can be added to the View.\n *\n * Track object hierarchy:\n * Track\n * -> LabelTrack\n * -> TiledTrack\n * ----> LineTrack\n * ----> ReferenceTrack\n * ----> FeatureTrack\n * -------> ReadTrack\n * ----> VariantTrack\n */\nvar Track = function Track(view, container, obj_dict) {\n // For now, track's container is always view.\n extend(obj_dict, {\n drag_handle_class: \"draghandle\"\n });\n Drawable.call(this, view, container, obj_dict);\n\n //\n // Attribute init.\n //\n\n // Set or create dataset.\n this.dataset = null;\n if (obj_dict.dataset) {\n // Dataset can be a Backbone model or a dict that can be used to create a model.\n this.dataset = obj_dict.dataset instanceof Backbone.Model ? obj_dict.dataset : new _data2.default.Dataset(obj_dict.dataset);\n }\n this.dataset_check_type = \"converted_datasets_state\";\n this.data_url_extra_params = {};\n this.data_query_wait = \"data_query_wait\" in obj_dict ? obj_dict.data_query_wait : DEFAULT_DATA_QUERY_WAIT;\n // A little ugly creating data manager right now due to transition to Backbone-based objects.\n this.data_manager = \"data_manager\" in obj_dict ? obj_dict.data_manager : new _visualization2.default.GenomeDataManager({\n dataset: this.dataset,\n // HACK: simulate 'genome' attributes from view for now.\n // View should eventually use Genome object.\n genome: new _visualization2.default.Genome({\n key: view.dbkey,\n chroms_info: {\n chrom_info: view.chrom_data\n }\n }),\n data_mode_compatible: this.data_and_mode_compatible,\n can_subset: this.can_subset\n });\n\n // Height attributes: min height, max height, and visible height.\n this.min_height_px = 16;\n this.max_height_px = 800;\n this.visible_height_px = this.config.get_value(\"height\");\n\n //\n // Create content div, which is where track is displayed, and add to container if available.\n //\n this.content_div = $(\"
\").appendTo(this.container_div);\n if (this.container) {\n this.container.content_div.append(this.container_div);\n if (!(\"resize\" in obj_dict) || obj_dict.resize) {\n this.add_resize_handle();\n }\n }\n};\n\nextend(Track.prototype, Drawable.prototype, {\n action_icons_def: [\n // Change track mode.\n {\n name: \"mode_icon\",\n title: \"Set display mode\",\n css_class: \"chevron-expand\",\n on_click_fn: function on_click_fn() {}\n },\n // Hide/show content.\n Drawable.prototype.action_icons_def[0],\n // Set track as overview.\n {\n name: \"overview_icon\",\n title: \"Set as overview\",\n css_class: \"application-dock-270\",\n on_click_fn: function on_click_fn(track) {\n track.view.set_overview(track);\n }\n },\n // Edit config.\n Drawable.prototype.action_icons_def[1],\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function on_click_fn(drawable) {\n // TODO: update Tooltip text.\n if (drawable.filters_manager.visible()) {\n drawable.filters_manager.clear_filters();\n } else {\n drawable.filters_manager.init_filters();\n }\n drawable.filters_manager.toggle();\n }\n },\n // Toggle track tool.\n {\n name: \"tools_icon\",\n title: \"Tool\",\n css_class: \"hammer\",\n on_click_fn: function on_click_fn(track) {\n // TODO: update Tooltip text.\n\n track.tool.toggle();\n\n // Update track name.\n if (track.tool.is_visible()) {\n track.set_name(track.config.get_value(\"name\") + track.tool_region_and_parameters_str());\n } else {\n track.revert_name();\n }\n // HACK: name change modifies icon placement, which leaves tooltip incorrectly placed.\n $(\".tooltip\").remove();\n }\n },\n // Go to parameter exploration visualization.\n {\n name: \"param_space_viz_icon\",\n title: \"Tool parameter space visualization\",\n css_class: \"arrow-split\",\n on_click_fn: function on_click_fn(track) {\n var html = \"Tool:\" + track.tool.get(\"name\") + \"
Dataset:\" + track.config.get_value(\"name\") + \"
Region(s): \";\n\n var cancel_fn = function cancel_fn() {\n Galaxy.modal.hide();\n $(window).unbind(\"keypress.check_enter_esc\");\n };\n\n var ok_fn = function ok_fn() {\n var regions_to_use = $('select[name=\"regions\"] option:selected').val(),\n regions,\n view_region = new _visualization2.default.GenomeRegion({\n chrom: view.chrom,\n start: view.low,\n end: view.high\n }),\n bookmarked_regions = _.map($(\".bookmark\"), function (elt) {\n return new _visualization2.default.GenomeRegion({\n from_str: $(elt).children(\".position\").text()\n });\n });\n\n // Get regions for visualization.\n if (regions_to_use === \"cur\") {\n // Use only current region.\n regions = [view_region];\n } else if (regions_to_use === \"bookmarks\") {\n // Use only bookmarks.\n regions = bookmarked_regions;\n } else {\n // Use both current region and bookmarks.\n regions = [view_region].concat(bookmarked_regions);\n }\n\n Galaxy.modal.hide();\n\n // Go to visualization.\n window.location.href = Galaxy.root + \"visualization/sweepster?\" + $.param({\n dataset_id: track.dataset.id,\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n regions: JSON.stringify(new Backbone.Collection(regions).toJSON())\n });\n };\n\n var check_enter_esc = function check_enter_esc(e) {\n if ((e.keyCode || e.which) === 27) {\n // Escape key\n cancel_fn();\n } else if ((e.keyCode || e.which) === 13) {\n // Enter key\n ok_fn();\n }\n };\n\n // show dialog\n Galaxy.modal.show({\n title: \"Visualize tool parameter space and output from different parameter settings?\",\n body: html,\n buttons: { No: cancel_fn, Yes: ok_fn }\n });\n }\n },\n // Remove track.\n Drawable.prototype.action_icons_def[2]],\n\n can_draw: function can_draw() {\n return this.dataset && Drawable.prototype.can_draw.call(this);\n },\n\n build_container_div: function build_container_div() {\n return $(\"
\").addClass(\"track\").attr(\"id\", \"track_\" + this.id);\n },\n\n /**\n * Set track's dataset.\n */\n set_dataset: function set_dataset(dataset) {\n this.dataset = dataset;\n this.data_manager.set(\"dataset\", dataset);\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function on_resize() {\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Add resizing handle to drawable's container_div.\n */\n add_resize_handle: function add_resize_handle() {\n var track = this;\n var in_handle = false;\n var in_drag = false;\n var drag_control = $(\"
\");\n // Control shows on hover over track, stays while dragging\n $(track.container_div).hover(function () {\n if (track.config.get_value(\"content_visible\")) {\n in_handle = true;\n drag_control.show();\n }\n }, function () {\n in_handle = false;\n if (!in_drag) {\n drag_control.hide();\n }\n });\n // Update height and force redraw of current view while dragging,\n // clear cache to force redraw of other tiles.\n drag_control.hide().bind(\"dragstart\", function (e, d) {\n in_drag = true;\n d.original_height = $(track.content_div).height();\n }).bind(\"drag\", function (e, d) {\n var new_height = Math.min(Math.max(d.original_height + d.deltaY, track.min_height_px), track.max_height_px);\n $(track.tiles_div).css(\"height\", new_height);\n track.visible_height_px = track.max_height_px === new_height ? 0 : new_height;\n track.on_resize();\n }).bind(\"dragend\", function (e, d) {\n track.tile_cache.clear();\n in_drag = false;\n if (!in_handle) {\n drag_control.hide();\n }\n track.config.set_value(\"height\", track.visible_height_px);\n track.changed();\n }).appendTo(track.container_div);\n },\n\n /**\n * Hide any elements that are part of the tracks contents area. Should\n * remove as approprite, the track will be redrawn by show_contents.\n */\n hide_contents: function hide_contents() {\n // Hide tiles.\n this.tiles_div.hide();\n // Hide any y axis labels (common to several track types)\n this.container_div.find(\".yaxislabel, .track-resize\").hide();\n },\n\n show_contents: function show_contents() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n this.container_div.find(\".yaxislabel, .track-resize\").show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n /**\n * Returns track type.\n */\n get_type: function get_type() {\n // Order is important: start with most-specific classes and go up the track hierarchy.\n if (this instanceof LabelTrack) {\n return \"LabelTrack\";\n } else if (this instanceof ReferenceTrack) {\n return \"ReferenceTrack\";\n } else if (this instanceof LineTrack) {\n return \"LineTrack\";\n } else if (this instanceof ReadTrack) {\n return \"ReadTrack\";\n } else if (this instanceof VariantTrack) {\n return \"VariantTrack\";\n } else if (this instanceof CompositeTrack) {\n return \"CompositeTrack\";\n } else if (this instanceof FeatureTrack) {\n return \"FeatureTrack\";\n }\n return \"\";\n },\n\n /**\n * Remove visualization content and display message.\n */\n show_message: function show_message(msg_html) {\n this.tiles_div.remove();\n return $(\"\").addClass(\"message\").html(msg_html).appendTo(this.content_div);\n },\n\n /**\n * Initialize and draw the track.\n */\n init: function init(retry) {\n // FIXME: track should have a 'state' attribute that is checked on load; this state attribute should be\n // used in this function to determine what action(s) to take.\n\n var track = this;\n track.enabled = false;\n track.tile_cache.clear();\n track.data_manager.clear();\n /*\n if (!track.content_div.text()) {\n track.content_div.text(DATA_LOADING);\n }\n */\n // Remove old track content (e.g. tiles, messages).\n track.content_div.children().remove();\n track.container_div.removeClass(\"nodata error pending\");\n\n track.tiles_div = $(\"
\").addClass(\"tiles\").appendTo(track.content_div);\n\n //\n // Tracks with no dataset id are handled differently.\n // FIXME: is this really necessary?\n //\n if (!track.dataset.id) {\n return;\n }\n\n // Get dataset state; if state is fine, enable and draw track. Otherwise, show message\n // about track status.\n var init_deferred = $.Deferred();\n\n var params = {\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n data_type: this.dataset_check_type,\n chrom: track.view.chrom,\n retry: retry\n };\n\n $.getJSON(this.dataset.url(), params, function (result) {\n if (!result || result === \"error\" || result.kind === \"error\") {\n // Dataset is in error state.\n track.container_div.addClass(\"error\");\n var msg_elt = track.show_message(DATA_ERROR);\n if (result.message) {\n // Add links to (a) show error and (b) try again.\n msg_elt.append($(\"\").text(\"View error\").click(function () {\n Galaxy.modal.show({\n title: \"Trackster Error\",\n body: \"
\" + result.message + \"
\",\n buttons: {\n Close: function Close() {\n Galaxy.modal.hide();\n }\n }\n });\n }));\n msg_elt.append($(\"\").text(\" \"));\n msg_elt.append($(\"\").text(\"Try again\").click(function () {\n track.init(true);\n }));\n }\n } else if (result === \"no converter\") {\n track.container_div.addClass(\"error\");\n track.show_message(DATA_NOCONVERTER);\n } else if (result === \"no data\" || result.data !== undefined && (result.data === null || result.data.length === 0)) {\n track.container_div.addClass(\"nodata\");\n track.show_message(DATA_NONE);\n } else if (result === \"pending\") {\n track.container_div.addClass(\"pending\");\n track.show_message(DATA_PENDING);\n //$(\"\").attr(\"src\", image_path + \"/yui/rel_interstitial_loading.gif\").appendTo(track.tiles_div);\n setTimeout(function () {\n track.init();\n }, track.data_query_wait);\n } else if (result === \"data\" || result.status === \"data\") {\n if (result.valid_chroms) {\n track.valid_chroms = result.valid_chroms;\n track.update_icons();\n }\n track.tiles_div.text(DATA_OK);\n if (track.view.chrom) {\n track.tiles_div.text(\"\");\n track.tiles_div.css(\"height\", track.visible_height_px + \"px\");\n track.enabled = true;\n // predraw_init may be asynchronous, wait for it and then draw\n $.when.apply($, track.predraw_init()).done(function () {\n init_deferred.resolve();\n track.container_div.removeClass(\"nodata error pending\");\n track.request_draw();\n });\n } else {\n init_deferred.resolve();\n }\n }\n });\n\n this.update_icons();\n return init_deferred;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {\n var track = this;\n return $.getJSON(track.dataset.url(), {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n }, function (result) {\n var data = result.data;\n\n // Tracks may not have stat data either because there is no data or data is not yet ready.\n if (data && data.min !== undefined && data.max !== undefined) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update config, prefs\n track.config.set_default_value(\"min_value\", min_value);\n track.config.set_default_value(\"max_value\", max_value);\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n });\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function get_drawables() {\n return this;\n }\n});\n\nvar TiledTrack = function TiledTrack(view, container, obj_dict) {\n Track.call(this, view, container, obj_dict);\n\n var track = this;\n\n // Make track moveable.\n moveable(track.container_div, track.drag_handle_class, \".group\", track);\n\n // Attribute init.\n this.filters_manager = new _filters2.default.FiltersManager(this, \"filters\" in obj_dict ? obj_dict.filters : null);\n // HACK: set filters manager for data manager.\n // FIXME: prolly need function to set filters and update data_manager reference.\n this.data_manager.set(\"filters_manager\", this.filters_manager);\n this.filters_available = false;\n this.tool = obj_dict.tool ? new TracksterTool(_.extend(obj_dict.tool, {\n track: this,\n tool_state: obj_dict.tool_state\n })) : null;\n this.tile_cache = new _visualization2.default.Cache(TILE_CACHE_SIZE);\n this.left_offset = 0;\n\n if (this.header_div) {\n //\n // Setup filters.\n //\n this.set_filters_manager(this.filters_manager);\n\n //\n // Create dynamic tool view.\n //\n if (this.tool) {\n var tool_view = new TracksterToolView({ model: this.tool });\n tool_view.render();\n this.dynamic_tool_div = tool_view.$el;\n this.header_div.after(this.dynamic_tool_div);\n }\n }\n\n // Add tiles_div, overlay_div to content_div.\n this.tiles_div = $(\"
\").addClass(\"tiles\").appendTo(this.content_div);\n if (!this.config.get_value(\"content_visible\")) {\n this.tiles_div.hide();\n }\n this.overlay_div = $(\"
\").addClass(\"overlay\").appendTo(this.content_div);\n\n if (obj_dict.mode) {\n this.change_mode(obj_dict.mode);\n }\n};\nextend(TiledTrack.prototype, Drawable.prototype, Track.prototype, {\n action_icons_def: Track.prototype.action_icons_def.concat([\n // Show more rows when all features are not slotted.\n {\n name: \"show_more_rows_icon\",\n title: \"To minimize track height, not all feature rows are displayed. Click to display more rows.\",\n css_class: \"exclamation\",\n on_click_fn: function on_click_fn(track) {\n $(\".tooltip\").remove();\n track.slotters[track.view.resolution_px_b].max_rows *= 2;\n track.request_draw({ clear_tile_cache: true });\n },\n hide: true\n }]),\n\n /**\n * Returns a copy of the track. The copy uses the same data manager so that the tracks can share data.\n */\n copy: function copy(container) {\n // Create copy.\n var obj_dict = this.to_dict();\n extend(obj_dict, {\n data_manager: this.data_manager\n });\n var new_track = new this.constructor(this.view, container, obj_dict);\n // Misc. init and return.\n new_track.change_mode(this.mode);\n new_track.enabled = this.enabled;\n return new_track;\n },\n\n /**\n * Set filters manager + HTML elements.\n */\n set_filters_manager: function set_filters_manager(filters_manager) {\n this.filters_manager = filters_manager;\n this.header_div.after(this.filters_manager.parent_div);\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function to_dict() {\n return {\n track_type: this.get_type(),\n dataset: {\n id: this.dataset.id,\n hda_ldda: this.dataset.get(\"hda_ldda\")\n },\n prefs: this.config.to_key_value_dict(),\n mode: this.mode,\n filters: this.filters_manager.to_dict(),\n tool_state: this.tool ? this.tool.state_dict() : {}\n };\n },\n\n /**\n * Set track bounds for current chromosome.\n */\n set_min_max: function set_min_max() {\n var track = this;\n\n return $.getJSON(track.dataset.url(), {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n }, function (result) {\n var data = result.data;\n if (isNaN(parseFloat(track.config.get_value(\"min_value\"))) || isNaN(parseFloat(track.config.get_value(\"max_value\")))) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update the prefs\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n });\n },\n\n /**\n * Change track's mode.\n */\n change_mode: function change_mode(new_mode) {\n var track = this;\n // TODO: is it necessary to store the mode in two places (.mode and track_config)?\n track.mode = new_mode;\n track.config.set_value(\"mode\", new_mode);\n // FIXME: find a better way to get Auto data w/o clearing cache; using mode in the\n // data manager would work if Auto data were checked for compatibility when a specific\n // mode is chosen.\n if (new_mode === \"Auto\") {\n this.data_manager.clear();\n }\n track.request_draw({ clear_tile_cache: true });\n this.action_icons.mode_icon.attr(\"title\", \"Set display mode (now: \" + track.mode + \")\");\n return track;\n },\n\n /**\n * Update track's buttons.\n */\n update_icons: function update_icons() {\n var track = this;\n\n //\n // Show/hide filter icon.\n //\n track.action_icons.filters_icon.toggle(track.filters_available);\n\n //\n // Show/hide tool icons.\n //\n track.action_icons.tools_icon.toggle(track.tool !== null);\n track.action_icons.param_space_viz_icon.toggle(track.tool !== null);\n },\n\n /**\n * Generate a key for the tile cache.\n * TODO: create a TileCache object (like DataCache) and generate key internally.\n */\n _gen_tile_cache_key: function _gen_tile_cache_key(w_scale, tile_region) {\n return w_scale + \"_\" + tile_region;\n },\n\n /**\n * Request that track be drawn.\n */\n request_draw: function request_draw(options) {\n if (options && options.clear_tile_cache) {\n this.tile_cache.clear();\n }\n this.view.request_redraw(options, this);\n },\n\n /**\n * Actions to be taken before drawing.\n */\n before_draw: function before_draw() {\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n },\n\n /**\n * Draw track. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -clear_after: clear old tiles after drawing new tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n *\n * NOTE: this function should never be called directly; use request_draw() so that drawing\n * management can be used.\n */\n _draw: function _draw(options) {\n if (!this.can_draw()) {\n return;\n }\n\n var clear_after = options && options.clear_after;\n var low = this.view.low;\n var high = this.view.high;\n var range = high - low;\n var width = this.view.container.width();\n var w_scale = this.view.resolution_px_b;\n var resolution = 1 / w_scale;\n\n // For overview, adjust high, low, resolution, and w_scale.\n if (this.is_overview) {\n low = this.view.max_low;\n high = this.view.max_high;\n w_scale = width / (view.max_high - view.max_low);\n resolution = 1 / w_scale;\n }\n\n this.before_draw();\n\n //\n // Method for moving and/or removing tiles:\n // (a) mark all elements for removal using class 'remove'\n // (b) during tile drawing/placement, remove class for elements that are moved;\n // this occurs in show_tile()\n // (c) after drawing tiles, remove elements still marked for removal\n // (i.e. that still have class 'remove').\n //\n\n // Step (a) for (re)moving tiles.\n this.tiles_div.children().addClass(\"remove\");\n\n var // Tile width in bases.\n tile_width = Math.floor(TILE_SIZE * resolution);\n\n var // Index of first tile that overlaps visible region.\n tile_index = Math.floor(low / tile_width);\n\n var tile_region;\n var tile_promise;\n var tile_promises = [];\n var tiles = [];\n // Draw tiles.\n while (tile_index * tile_width < high) {\n // Get tile region.\n tile_region = new _visualization2.default.GenomeRegion({\n chrom: this.view.chrom,\n start: tile_index * tile_width,\n // Tile high cannot be larger than view.max_high, which the chromosome length.\n end: Math.min((tile_index + 1) * tile_width, this.view.max_high)\n });\n tile_promise = this.draw_helper(tile_region, w_scale, options);\n tile_promises.push(tile_promise);\n $.when(tile_promise).then(function (tile) {\n tiles.push(tile);\n });\n\n // Go to next tile.\n tile_index += 1;\n }\n\n // Step (c) for (re)moving tiles when clear_after is false.\n if (!clear_after) {\n this.tiles_div.children(\".remove\").removeClass(\"remove\").remove();\n }\n\n // When all tiles are drawn, call post-draw actions.\n var track = this;\n $.when.apply($, tile_promises).then(function () {\n // Step (c) for (re)moving tiles when clear_after is true:\n track.tiles_div.children(\".remove\").remove();\n\n // Only do postdraw actions for tiles; instances where tiles may not be drawn include:\n // (a) ReferenceTrack without sufficient resolution;\n // (b) data_fetch = false.\n tiles = _.filter(tiles, function (t) {\n return t !== null;\n });\n if (tiles.length !== 0) {\n track.postdraw_actions(tiles, width, w_scale, clear_after);\n }\n });\n },\n\n /**\n * Add a maximum/minimum label to track.\n */\n _add_yaxis_label: function _add_yaxis_label(type, on_change) {\n var track = this;\n var css_class = type === \"max\" ? \"top\" : \"bottom\";\n var text = type === \"max\" ? \"max\" : \"min\";\n var pref_name = type === \"max\" ? \"max_value\" : \"min_value\";\n var label = this.container_div.find(\".yaxislabel.\" + css_class);\n var value = round(track.config.get_value(pref_name), 1);\n\n // Default action for on_change is to redraw track.\n on_change = on_change || function () {\n track.request_draw({ clear_tile_cache: true });\n };\n\n if (label.length !== 0) {\n // Label already exists, so update value.\n label.text(value);\n } else {\n // Add label.\n label = $(\"
\").text(value).make_text_editable({\n num_cols: 12,\n on_finish: function on_finish(new_val) {\n $(\".tooltip\").remove();\n track.config.set_value(pref_name, round(new_val, 1));\n on_change();\n },\n help_text: \"Set \" + text + \" value\"\n }).addClass(\"yaxislabel \" + css_class).css(\"color\", this.config.get_value(\"label_color\"));\n this.container_div.prepend(label);\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n var line_track_tiles = _.filter(tiles, function (tile) {\n return tile instanceof LineTrackTile;\n });\n\n //\n // Take different actions depending on whether there are LineTrack/Coverage tiles.\n //\n\n if (line_track_tiles.length > 0) {\n // -- Drawing in Coverage mode. --\n\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n var track = this;\n _.each(tiles, function (tile) {\n if (!(tile instanceof LineTrackTile)) {\n tile.html_elt.remove();\n track.draw_helper(tile.region, w_scale, {\n force: true,\n mode: \"Coverage\"\n });\n }\n });\n\n track._add_yaxis_label(\"max\");\n } else {\n // -- Drawing in non-Coverage mode. --\n\n // Remove Y-axis labels because there are no line track tiles.\n this.container_div.find(\".yaxislabel\").remove();\n\n //\n // If some tiles have icons, set padding of tiles without icons so features and rows align.\n //\n var icons_present = _.find(tiles, function (tile) {\n return tile.has_icons;\n });\n\n if (icons_present) {\n _.each(tiles, function (tile) {\n if (!tile.has_icons) {\n // Need to align with other tile(s) that have icons.\n tile.html_elt.css(\"padding-top\", ERROR_PADDING);\n }\n });\n }\n }\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function get_mode(data) {\n return this.mode;\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function update_auto_mode(display_mode) {\n // FIXME: needs to be implemented.\n },\n\n /**\n * Returns a list of drawables to draw. Defaults to current track.\n */\n _get_drawables: function _get_drawables() {\n return [this];\n },\n\n /**\n * Retrieves from cache, draws, or sets up drawing for a single tile. Returns either a Tile object or a\n * jQuery.Deferred object that is fulfilled when tile can be drawn again. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n */\n draw_helper: function draw_helper(region, w_scale, options) {\n // Init options if necessary to avoid having to check if options defined.\n if (!options) {\n options = {};\n }\n\n var force = options.force;\n var mode = options.mode || this.mode;\n var resolution = 1 / w_scale;\n\n var // Useful vars.\n track = this;\n\n var drawables = this._get_drawables();\n var key = this._gen_tile_cache_key(w_scale, region);\n\n var is_tile = function is_tile(o) {\n return o && \"track\" in o;\n };\n\n // Check tile cache, if found show existing tile in correct position\n var tile = force ? undefined : track.tile_cache.get_elt(key);\n if (tile) {\n if (is_tile(tile)) {\n track.show_tile(tile, w_scale);\n }\n return tile;\n }\n\n // If not fetching data, nothing more to do because data is needed to draw tile.\n if (options.data_fetch === false) {\n return null;\n }\n\n // Function that returns data/Deferreds needed to draw tile.\n var get_tile_data = function get_tile_data() {\n // HACK: if display mode (mode) is in continuous data modes, data mode must be coverage to get coverage data.\n var data_mode = _.find(CONTINUOUS_DATA_MODES, function (m) {\n return m === mode;\n }) ? \"Coverage\" : mode;\n\n // Map drawable object to data needed for drawing.\n var tile_data = _.map(drawables, function (d // Get the track data/promise.\n ) {\n return d.data_manager.get_data(region, data_mode, resolution, track.data_url_extra_params);\n });\n\n // Get reference data/promise.\n if (view.reference_track) {\n tile_data.push(view.reference_track.data_manager.get_data(region, mode, resolution, view.reference_track.data_url_extra_params));\n }\n\n return tile_data;\n };\n\n //\n // When data is available, draw tile.\n //\n var tile_drawn = $.Deferred();\n track.tile_cache.set_elt(key, tile_drawn);\n $.when.apply($, get_tile_data()).then(function () {\n var tile_data = get_tile_data();\n var tracks_data = tile_data;\n var seq_data;\n\n // Deferreds may show up here if trying to fetch a subset of data from a superset data chunk\n // that cannot be subsetted. This may occur if the superset has a message. If there is a\n // Deferred, try again from the top. NOTE: this condition could (should?) be handled by the\n // GenomeDataManager in visualization module.\n if (_.find(tile_data, function (d) {\n return _util2.default.is_deferred(d);\n })) {\n track.tile_cache.set_elt(key, undefined);\n $.when(track.draw_helper(region, w_scale, options)).then(function (tile) {\n tile_drawn.resolve(tile);\n });\n return;\n }\n\n // If sequence data is available, subset to get only data in region.\n if (view.reference_track) {\n seq_data = view.reference_track.data_manager.subset_entry(tile_data.pop(), region);\n }\n\n // Get drawing modes, heights for all tracks.\n var drawing_modes = [];\n\n var drawing_heights = [];\n\n _.each(drawables, function (d, i) {\n var mode = d.mode;\n var data = tracks_data[i];\n if (mode === \"Auto\") {\n mode = d.get_mode(data);\n d.update_auto_mode(mode);\n }\n drawing_modes.push(mode);\n drawing_heights.push(d.get_canvas_height(data, mode, w_scale, width));\n });\n\n var canvas = track.view.canvas_manager.new_canvas();\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var all_data_index = 0;\n\n var width = Math.ceil((tile_high - tile_low) * w_scale) + track.left_offset;\n\n var height = _.max(drawing_heights);\n var tile;\n\n //\n // Draw all tracks on tile.\n //\n canvas.width = width;\n // Height is specified in options or is the height found above.\n canvas.height = options.height || height;\n var ctx = canvas.getContext(\"2d\");\n ctx.translate(track.left_offset, 0);\n if (drawables.length > 1) {\n ctx.globalAlpha = 0.5;\n ctx.globalCompositeOperation = \"source-over\";\n }\n _.each(drawables, function (d, i) {\n tile = d.draw_tile(tracks_data[i], ctx, drawing_modes[i], region, w_scale, seq_data);\n });\n\n // Don't cache, show if no tile.\n if (tile !== undefined) {\n track.tile_cache.set_elt(key, tile);\n track.show_tile(tile, w_scale);\n }\n\n tile_drawn.resolve(tile);\n });\n\n return tile_drawn;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function get_canvas_height(result, mode, w_scale, canvas_width) {\n return this.visible_height_px;\n },\n\n /**\n * Draw line (bigwig) data onto tile.\n */\n _draw_line_track_tile: function _draw_line_track_tile(result, ctx, mode, region, w_scale) {\n // Set min/max if they are not already set.\n // FIXME: checking for different null/undefined/0 is messy; it would be nice to\n // standardize this.\n if ([undefined, null].indexOf(this.config.get_value(\"min_value\")) !== -1) {\n this.config.set_value(\"min_value\", 0);\n }\n if ([undefined, null, 0].indexOf(this.config.get_value(\"max_value\")) !== -1) {\n this.config.set_value(\"max_value\", _.max(_.map(result.data, function (d) {\n return d[1];\n })) || 0);\n }\n\n var canvas = ctx.canvas;\n\n var painter = new _painters2.default.LinePainter(result.data, region.get(\"start\"), region.get(\"end\"), this.config.to_key_value_dict(), mode);\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new LineTrackTile(this, region, w_scale, canvas, result.data);\n },\n\n /**\n * Draw a track tile.\n * @param result result from server\n * @param ctx canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale, ref_seq) {},\n\n /**\n * Show track tile and perform associated actions. Showing tile may actually move\n * an existing tile rather than reshowing it.\n */\n show_tile: function show_tile(tile, w_scale) {\n var track = this;\n var tile_element = tile.html_elt;\n\n // -- Show/move tile element. --\n\n tile.predisplay_actions();\n\n // Position tile element based on current viewport.\n var left = Math.round((tile.low - (this.is_overview ? this.view.max_low : this.view.low)) * w_scale);\n if (this.left_offset) {\n left -= this.left_offset;\n }\n tile_element.css(\"left\", left);\n\n if (tile_element.hasClass(\"remove\")) {\n // Step (b) for (re)moving tiles. See _draw() function for description of algorithm\n // for removing tiles.\n tile_element.removeClass(\"remove\");\n } else {\n // Showing new tile.\n this.tiles_div.append(tile_element);\n }\n\n // -- Update track, tile heights based on new tile. --\n\n tile_element.css(\"height\", \"auto\");\n\n // Update max height based on current tile's height.\n // BUG/HACK: tile_element.height() returns a height that is always 2 pixels too big, so\n // -2 to get the correct height.\n this.max_height_px = Math.max(this.max_height_px, tile_element.height() - 2);\n\n // Update height for all tiles based on max height.\n tile_element.parent().children().css(\"height\", this.max_height_px + \"px\");\n\n // Update track height based on max height and visible height.\n var track_height = this.max_height_px;\n if (this.visible_height_px !== 0) {\n track_height = Math.min(this.max_height_px, this.visible_height_px);\n }\n this.tiles_div.css(\"height\", track_height + \"px\");\n },\n\n /**\n * Utility function that creates a label string describing the region and parameters of a track's tool.\n */\n tool_region_and_parameters_str: function tool_region_and_parameters_str(region) {\n var track = this;\n var region_str = region !== undefined ? region.toString() : \"all\";\n var param_str = _.values(track.tool.get_inputs_dict()).join(\", \");\n return \" - region=[\" + region_str + \"], parameters=[\" + param_str + \"]\";\n },\n\n /**\n * Returns true if data is compatible with a given mode.\n */\n data_and_mode_compatible: function data_and_mode_compatible(data, mode) {\n // Only handle modes that user can set.\n if (mode === \"Auto\") {\n return true;\n } else if (mode === \"Coverage\") {\n // Histogram mode requires bigwig data.\n return data.dataset_type === \"bigwig\";\n } else if (data.dataset_type === \"bigwig\" || data.extra_info === \"no_detail\") {\n // All other modes--Dense, Squish, Pack--require data + details.\n return false;\n } else {\n return true;\n }\n },\n\n /**\n * Returns true if entry can be subsetted.\n */\n can_subset: function can_subset(entry) {\n // Do not subset entries with a message or data with no detail.\n if (entry.message || entry.extra_info === \"no_detail\") {\n return false;\n } else if (entry.dataset_type === \"bigwig\") {\n // Subset only if data is single-bp resolution.\n return entry.data[1][0] - entry.data[0][0] === 1;\n }\n\n return true;\n },\n\n /**\n * Set up track to receive tool data.\n */\n init_for_tool_data: function init_for_tool_data() {\n // Set up track to fetch raw data rather than converted data.\n this.data_manager.set(\"data_type\", \"raw_data\");\n this.data_query_wait = 1000;\n this.dataset_check_type = \"state\";\n\n // FIXME: this is optional and is disabled for now because it creates\n // additional converter jobs without a clear benefit because indexing\n // such a small dataset provides little benefit.\n //\n // Set up one-time, post-draw to clear tool execution settings.\n //\n /*\n this.normal_postdraw_actions = this.postdraw_actions;\n this.postdraw_actions = function(tiles, width, w_scale, clear_after) {\n var self = this;\n // Do normal postdraw init.\n self.normal_postdraw_actions(tiles, width, w_scale, clear_after);\n // Tool-execution specific post-draw init:\n // Reset dataset check, wait time.\n self.dataset_check_type = 'converted_datasets_state';\n self.data_query_wait = DEFAULT_DATA_QUERY_WAIT;\n // Reset data URL when dataset indexing has completed/when not pending.\n var ss_deferred = new util.ServerStateDeferred({\n url: self.dataset_state_url,\n url_params: {dataset_id : self.dataset.id, hda_ldda: self.dataset.get('hda_ldda')},\n interval: self.data_query_wait,\n // Set up deferred to check dataset state until it is not pending.\n success_fn: function(result) { return result !== \"pending\"; }\n });\n $.when(ss_deferred.go()).then(function() {\n // Dataset is indexed, so use converted data.\n self.data_manager.set('data_type', 'data');\n });\n // Reset post-draw actions function.\n self.postdraw_actions = self.normal_postdraw_actions;\n };\n */\n }\n});\n\nvar LabelTrack = function LabelTrack(view, container) {\n Track.call(this, view, container, {\n resize: false,\n header: false\n });\n this.container_div.addClass(\"label-track\");\n};\nextend(LabelTrack.prototype, Track.prototype, {\n init: function init() {\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {},\n\n _draw: function _draw(options) {\n var view = this.view;\n var range = view.high - view.low;\n\n var tickDistance = Math.floor(Math.pow(10, Math.floor(Math.log(range) / Math.log(10))));\n\n var position = Math.floor(view.low / tickDistance) * tickDistance;\n var width = this.view.container.width();\n var new_div = $(\"
\").addClass(\"label-container\");\n while (position < view.high) {\n var screenPosition = Math.floor((position - view.low) / range * width);\n new_div.append($(\"
\").addClass(\"pos-label\").text(_util2.default.commatize(position)).css({\n left: screenPosition\n }));\n position += tickDistance;\n }\n this.content_div.children(\":first\").remove();\n this.content_div.append(new_div);\n }\n});\n\n// FIXME: Composite tracks have code for showing composite tracks with line tracks and\n// composite tracks with line + feature tracks. It's probably best if different classes\n// are created for each type of composite track.\n\n/**\n * A tiled track composed of multiple other tracks. Composite tracks only work with\n * bigwig data for now.\n */\nvar CompositeTrack = function CompositeTrack(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n\n // Init drawables; each drawable is a copy so that config/preferences\n // are independent of each other. Also init left offset.\n this.drawables = [];\n if (\"drawables\" in obj_dict) {\n var drawable;\n for (var i = 0; i < obj_dict.drawables.length; i++) {\n drawable = obj_dict.drawables[i];\n this.drawables[i] = object_from_template(drawable, view, null);\n\n // Track's left offset is the max of all tracks.\n if (drawable.left_offset > this.left_offset) {\n this.left_offset = drawable.left_offset;\n }\n }\n this.enabled = true;\n }\n\n // Set all feature tracks to use Coverage mode.\n _.each(this.drawables, function (d) {\n if (d instanceof FeatureTrack || d instanceof ReadTrack) {\n d.change_mode(\"Coverage\");\n }\n });\n\n this.update_icons();\n\n // HACK: needed for saving object for now. Need to generalize get_type() to all Drawables and use\n // that for object type.\n this.obj_type = \"CompositeTrack\";\n};\n\nextend(CompositeTrack.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }]);\n },\n\n action_icons_def: [\n // Create composite track from group's tracks.\n {\n name: \"composite_icon\",\n title: \"Show individual tracks\",\n css_class: \"layers-stack\",\n on_click_fn: function on_click_fn(track) {\n $(\".tooltip\").remove();\n track.show_group();\n }\n }].concat(TiledTrack.prototype.action_icons_def),\n\n // HACK: CompositeTrack should inherit from DrawableCollection as well.\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: DrawableCollection.prototype.to_dict,\n\n add_drawable: DrawableCollection.prototype.add_drawable,\n\n unpack_drawables: DrawableCollection.prototype.unpack_drawables,\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function on_resize() {\n // Propogate visible height to other tracks.\n var visible_height = this.visible_height_px;\n _.each(this.drawables, function (d) {\n d.visible_height_px = visible_height;\n });\n Track.prototype.on_resize.call(this);\n },\n\n /**\n * Change mode for all tracks.\n */\n change_mode: function change_mode(new_mode) {\n TiledTrack.prototype.change_mode.call(this, new_mode);\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].change_mode(new_mode);\n }\n },\n\n /**\n * Initialize component tracks and draw composite track when all components are initialized.\n */\n init: function init() {\n // Init components.\n var init_deferreds = [];\n for (var i = 0; i < this.drawables.length; i++) {\n init_deferreds.push(this.drawables[i].init());\n }\n\n // Draw composite when all tracks available.\n var track = this;\n $.when.apply($, init_deferreds).then(function () {\n track.enabled = true;\n track.request_draw();\n });\n },\n\n update_icons: function update_icons() {\n // For now, hide filters and tool.\n this.action_icons.filters_icon.hide();\n this.action_icons.tools_icon.hide();\n this.action_icons.param_space_viz_icon.hide();\n },\n\n can_draw: Drawable.prototype.can_draw,\n\n _get_drawables: function _get_drawables() {\n return this.drawables;\n },\n\n /**\n * Replace this track with group that includes individual tracks.\n */\n show_group: function show_group() {\n // Create group with individual tracks.\n var group = new DrawableGroup(this.view, this.container, {\n name: this.config.get_value(\"name\")\n });\n\n var track;\n for (var i = 0; i < this.drawables.length; i++) {\n track = this.drawables[i];\n track.update_icons();\n group.add_drawable(track);\n track.container = group;\n group.content_div.append(track.container_div);\n }\n\n // Replace track with group.\n var index = this.container.replace_drawable(this, group, true);\n group.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions taken before drawing.\n */\n before_draw: function before_draw() {\n // FIXME: this is needed only if there are feature tracks in the composite track.\n // TiledTrack.prototype.before_draw.call(this);\n\n //\n // Set min, max for tracks to be largest min, max.\n //\n\n // Get smallest min, biggest max.\n var min = _.min(_.map(this.drawables, function (d) {\n return d.config.get_value(\"min_value\");\n }));\n\n var max = _.max(_.map(this.drawables, function (d) {\n return d.config.get_value(\"max_value\");\n }));\n\n this.config.set_value(\"min_value\", min);\n this.config.set_value(\"max_value\", max);\n\n // Set all tracks to smallest min, biggest max.\n _.each(this.drawables, function (d) {\n d.config.set_value(\"min_value\", min);\n d.config.set_value(\"max_value\", max);\n });\n },\n\n /**\n * Update minimum, maximum for component tracks.\n */\n update_all_min_max: function update_all_min_max() {\n var track = this;\n var min_value = this.config.get_value(\"min_value\");\n var max_value = this.config.get_value(\"max_value\");\n _.each(this.drawables, function (d) {\n d.config.set_value(\"min_value\", min_value);\n d.config.set_value(\"max_value\", max_value);\n });\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n // All tiles must be the same height in order to draw LineTracks, so redraw tiles as needed.\n var max_height = -1;\n\n var i;\n for (i = 0; i < tiles.length; i++) {\n var height = tiles[i].html_elt.find(\"canvas\").height();\n if (height > max_height) {\n max_height = height;\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.html_elt.find(\"canvas\").height() !== max_height) {\n this.draw_helper(tile.region, w_scale, {\n force: true,\n height: max_height\n });\n tile.html_elt.remove();\n }\n }\n\n // Wrap function so that it can be called without object reference.\n var track = this;\n\n var t = function t() {\n track.update_all_min_max();\n };\n\n // Add min, max labels.\n this._add_yaxis_label(\"min\", t);\n this._add_yaxis_label(\"max\", t);\n }\n});\n\n/**\n * Displays reference genome data.\n */\nvar ReferenceTrack = function ReferenceTrack(view) {\n TiledTrack.call(this, view, { content_div: view.top_labeltrack }, { resize: false, header: false });\n\n // Use offset to ensure that bases at tile edges are drawn.\n this.left_offset = view.canvas_manager.char_width_px;\n this.container_div.addClass(\"reference-track\");\n this.data_url = Galaxy.root + \"api/genomes/\" + this.view.dbkey;\n this.data_url_extra_params = { reference: true };\n this.data_manager = new _visualization2.default.GenomeReferenceDataManager({\n data_url: this.data_url,\n can_subset: this.can_subset\n });\n this.hide_contents();\n};\nextend(ReferenceTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"height\",\n type: \"int\",\n default_value: 13,\n hidden: true\n }]);\n },\n\n init: function init() {\n this.data_manager.clear();\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {},\n\n can_draw: Drawable.prototype.can_draw,\n\n /**\n * Draws and shows tile if reference data can be displayed; otherwise track is hidden.\n */\n draw_helper: function draw_helper(region, w_scale, options) {\n var cur_visible = this.tiles_div.is(\":visible\");\n var new_visible;\n var tile = null;\n if (w_scale > this.view.canvas_manager.char_width_px) {\n this.tiles_div.show();\n new_visible = true;\n tile = TiledTrack.prototype.draw_helper.call(this, region, w_scale, options);\n } else {\n new_visible = false;\n this.tiles_div.hide();\n }\n\n // NOTE: viewport resizing conceptually belongs in postdraw_actions(), but currently\n // postdraw_actions is not called when reference track not shown due to no tiles. If\n // it is moved to postdraw_actions, resize must be called each time because cannot\n // easily detect showing/hiding.\n\n // If showing or hiding reference track, resize viewport.\n if (cur_visible !== new_visible) {\n this.view.resize_viewport();\n }\n\n return tile;\n },\n\n can_subset: function can_subset(entry) {\n return true;\n },\n\n /**\n * Draw ReferenceTrack tile.\n */\n draw_tile: function draw_tile(data, ctx, mode, region, w_scale) {\n // Try to subset data.\n var subset = this.data_manager.subset_entry(data, region);\n\n var seq_data = subset.data;\n\n // Draw sequence data.\n var canvas = ctx.canvas;\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"center\";\n for (var c = 0, str_len = seq_data.length; c < str_len; c++) {\n ctx.fillStyle = this.view.get_base_color(seq_data[c]);\n ctx.fillText(seq_data[c], Math.floor(c * w_scale), 10);\n }\n return new Tile(this, region, w_scale, canvas, subset);\n }\n});\n\n/**\n * Track displays continuous/numerical data. Track expects position data in 1-based format, i.e. wiggle format.\n */\nvar LineTrack = function LineTrack(view, container, obj_dict) {\n this.mode = \"Histogram\";\n TiledTrack.call(this, view, container, obj_dict);\n // Need left offset for drawing overlap near tile boundaries.\n this.left_offset = 30;\n\n // If server has byte-range support, use BBI data manager to read directly from the BBI file.\n // FIXME: there should be a flag to wait for this check to complete before loading the track.\n var self = this;\n $.when(supportsByteRanges(Galaxy.root + \"datasets/\" + this.dataset.id + \"/display\")).then(function (supportsByteRanges) {\n if (supportsByteRanges) {\n self.data_manager = new _bbiDataManager2.default.BBIDataManager({\n dataset: self.dataset\n });\n }\n });\n};\n\nextend(LineTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{ key: \"color\", label: \"Color\", type: \"color\" }, {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken before drawing.\n */\n // FIXME: can the default behavior be used; right now it breaks during resize.\n before_draw: function before_draw() {},\n\n /**\n * Draw track tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale) {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n },\n\n /**\n * Subset data only if data is at single-base pair resolution.\n */\n can_subset: function can_subset(entry) {\n return entry.data[1][0] - entry.data[0][0] === 1;\n },\n\n /**\n * Add min, max labels.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n // Add min, max labels.\n this._add_yaxis_label(\"max\");\n this._add_yaxis_label(\"min\");\n }\n});\n\n/**\n * Diagonal heatmap for showing interactions data.\n */\nvar DiagonalHeatmapTrack = function DiagonalHeatmapTrack(view, container, obj_dict) {\n this.mode = \"Heatmap\";\n TiledTrack.call(this, view, container, obj_dict);\n};\n\nextend(DiagonalHeatmapTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Heatmap\"],\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"pos_color\",\n label: \"Positive Color\",\n type: \"color\",\n default_value: \"#FF8C00\"\n }, {\n key: \"neg_color\",\n label: \"Negative Color\",\n type: \"color\",\n default_value: \"#4169E1\"\n }, {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"int\",\n default_value: undefined\n }, {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"int\",\n default_value: undefined\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 500,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {\n var track = this;\n return $.getJSON(track.dataset.url(), {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n }, function (result) {\n var data = result.data;\n });\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale) {\n // Paint onto canvas.\n var canvas = ctx.canvas;\n\n var painter = new _painters2.default.DiagonalHeatmapPainter(result.data, region.get(\"start\"), region.get(\"end\"), this.config.to_key_value_dict(), mode);\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new Tile(this, region, w_scale, canvas, result.data);\n }\n});\n\n/**\n * A track that displays features/regions. Track expects position data in BED format, i.e. 0-based, half-open.\n */\nvar FeatureTrack = function FeatureTrack(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.container_div.addClass(\"feature-track\");\n this.summary_draw_height = 30;\n this.slotters = {};\n this.start_end_dct = {};\n this.left_offset = 200;\n\n // this.painter = painters.LinkedFeaturePainter;\n this.set_painter_from_config();\n};\nextend(FeatureTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"block_color\",\n label: \"Block color\",\n type: \"color\"\n }, {\n key: \"reverse_strand_color\",\n label: \"Antisense strand color\",\n type: \"color\"\n }, {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n }, {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true,\n help: \"Show the number of items in each bin when drawing summary histogram\"\n }, {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"connector_style\",\n label: \"Connector style\",\n type: \"select\",\n default_value: \"fishbones\",\n options: [{\n label: \"Line with arrows\",\n value: \"fishbone\"\n }, { label: \"Arcs\", value: \"arcs\" }]\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.set_painter_from_config();\n this.request_draw({ clear_tile_cache: true });\n },\n\n set_painter_from_config: function set_painter_from_config() {\n if (this.config.get_value(\"connector_style\") === \"arcs\") {\n this.painter = _painters2.default.ArcLinkedFeaturePainter;\n } else {\n this.painter = _painters2.default.LinkedFeaturePainter;\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var track = this;\n var i;\n\n var line_track_tiles = _.filter(tiles, function (t) {\n return t instanceof LineTrackTile;\n });\n\n //\n // Finish drawing of features that span multiple tiles. Features that span multiple tiles\n // are labeled incomplete on the tile level because they cannot be completely drawn.\n //\n if (line_track_tiles.length === 0) {\n // Gather incomplete features together.\n var all_incomplete_features = {};\n _.each(_.pluck(tiles, \"incomplete_features\"), function (inc_features) {\n _.each(inc_features, function (feature) {\n all_incomplete_features[feature[0]] = feature;\n });\n });\n\n // Draw incomplete features on each tile.\n var self = this;\n _.each(tiles, function (tile) {\n // Remove features already drawn on tile originally.\n var tile_incomplete_features = _.omit(all_incomplete_features, _.map(tile.incomplete_features, function (f) {\n return f[0];\n }));\n\n // Remove features already drawn on tile in past postdraw actions.\n tile_incomplete_features = _.omit(tile_incomplete_features, _.keys(tile.other_tiles_features_drawn));\n\n // Draw tile's incomplete features.\n if (_.size(tile_incomplete_features) !== 0) {\n // To draw incomplete features, create new canvas, copy original canvas/tile onto new\n // canvas, and then draw incomplete features on the new canvas.\n var features = {\n data: _.values(tile_incomplete_features)\n };\n\n var new_canvas = self.view.canvas_manager.new_canvas();\n var new_canvas_ctx = new_canvas.getContext(\"2d\");\n new_canvas.height = Math.max(tile.canvas.height, self.get_canvas_height(features, tile.mode, tile.w_scale, 100));\n new_canvas.width = tile.canvas.width;\n new_canvas_ctx.drawImage(tile.canvas, 0, 0);\n new_canvas_ctx.translate(track.left_offset, 0);\n var new_tile = self.draw_tile(features, new_canvas_ctx, tile.mode, tile.region, tile.w_scale, tile.seq_data);\n $(tile.canvas).replaceWith($(new_tile.canvas));\n tile.canvas = new_canvas;\n _.extend(tile.other_tiles_features_drawn, all_incomplete_features);\n }\n });\n }\n\n // If mode is Coverage and tiles do not share max, redraw tiles as necessary using new max.\n /*\n This code isn't used right now because Coverage mode uses predefined max in preferences.\n if (track.mode === \"Coverage\") {\n // Get global max.\n var global_max = -1;\n for (i = 0; i < tiles.length; i++) {\n var cur_max = tiles[i].max_val;\n if (cur_max > global_max) {\n global_max = cur_max;\n }\n }\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.max_val !== global_max) {\n tile.html_elt.remove();\n track.draw_helper(tile.index, w_scale, { more_tile_data: { force: true, max: global_max } } );\n }\n }\n }\n */\n\n //\n // Update filter attributes, UI.\n //\n\n // Update filtering UI.\n if (track.filters_manager) {\n var filters = track.filters_manager.filters;\n var f;\n for (f = 0; f < filters.length; f++) {\n filters[f].update_ui_elt();\n }\n\n // Determine if filters are available; this is based on the tiles' data.\n // Criteria for filter to be available: (a) it is applicable to tile data and (b) filter min != filter max.\n var filters_available = false;\n\n var example_feature;\n var filter;\n for (i = 0; i < tiles.length; i++) {\n if (tiles[i].data.length) {\n example_feature = tiles[i].data[0];\n for (f = 0; f < filters.length; f++) {\n filter = filters[f];\n if (filter.applies_to(example_feature) && filter.min !== filter.max) {\n filters_available = true;\n break;\n }\n }\n }\n }\n\n // If filter availability changed, hide filter div if necessary and update menu.\n if (track.filters_available !== filters_available) {\n track.filters_available = filters_available;\n if (!track.filters_available) {\n track.filters_manager.hide();\n }\n track.update_icons();\n }\n }\n\n //\n // If not all features slotted, show icon for showing more rows (slots).\n //\n if (tiles[0] instanceof FeatureTrackTile) {\n var all_slotted = true;\n for (i = 0; i < tiles.length; i++) {\n if (!tiles[i].all_slotted) {\n all_slotted = false;\n break;\n }\n }\n this.action_icons.show_more_rows_icon.toggle(!all_slotted);\n } else {\n this.action_icons.show_more_rows_icon.hide();\n }\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function update_auto_mode(mode) {\n if (this.mode === \"Auto\") {\n if (mode === \"no_detail\") {\n mode = \"feature spans\";\n }\n this.action_icons.mode_icon.attr(\"title\", \"Set display mode (now: Auto/\" + mode + \")\");\n }\n },\n\n /**\n * Place features in slots for drawing (i.e. pack features).\n * this.slotters[level] is created in this method. this.slotters[level]\n * is a Slotter object. Returns the number of slots used to pack features.\n */\n incremental_slots: function incremental_slots(level, features, mode) {\n // Get/create incremental slots for level. If display mode changed,\n // need to create new slots.\n\n var dummy_context = this.view.canvas_manager.dummy_context;\n\n var slotter = this.slotters[level];\n if (!slotter || slotter.mode !== mode) {\n slotter = new _slotting2.default.FeatureSlotter(level, mode, MAX_FEATURE_DEPTH, function (x) {\n return dummy_context.measureText(x);\n });\n this.slotters[level] = slotter;\n }\n\n return slotter.slot_features(features);\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function get_mode(data) {\n var mode;\n // HACK: use no_detail mode track is in overview to prevent overview from being too large.\n if (data.extra_info === \"no_detail\" || this.is_overview) {\n mode = \"no_detail\";\n } else {\n // Choose b/t Squish and Pack.\n // Proxy measures for using Squish:\n // (a) error message re: limiting number of features shown;\n // (b) X number of features shown;\n // (c) size of view shown.\n // TODO: cannot use (a) and (b) because it requires coordinating mode across tiles;\n // fix this so that tiles are redrawn as necessary to use the same mode.\n //if ( (result.message && result.message.match(/^Only the first [\\d]+/)) ||\n // (result.data && result.data.length > 2000) ||\n //var data = result.data;\n // if ( (data.length && data.length < 4) ||\n // (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) ) {\n if (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) {\n mode = \"Squish\";\n } else {\n mode = \"Pack\";\n }\n }\n return mode;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function get_canvas_height(result, mode, w_scale, canvas_width) {\n if (mode === \"Coverage\" || result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // All other modes require slotting.\n var rows_required = this.incremental_slots(w_scale, result.data, mode);\n // HACK: use dummy painter to get required height. Painter should be extended so that get_required_height\n // works as a static function.\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return Math.max(this.min_height_px, dummy_painter.get_required_height(rows_required, canvas_width));\n }\n },\n\n /**\n * Draw FeatureTrack tile.\n * @param result result from server\n * @param cxt canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n * @param cur_tile true if drawing is occurring on a currently visible tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale, ref_seq, cur_tile) {\n var track = this;\n var canvas = ctx.canvas;\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var left_offset = this.left_offset;\n\n // If data is line track data, draw line track tile.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n }\n\n // Handle row-by-row tracks\n\n // Preprocessing: filter features and determine whether all unfiltered features have been slotted.\n var filtered = [];\n\n var slots = this.slotters[w_scale].slots;\n var all_slotted = true;\n if (result.data) {\n var filters = this.filters_manager.filters;\n for (var i = 0, len = result.data.length; i < len; i++) {\n var feature = result.data[i];\n var hide_feature = false;\n var filter;\n for (var f = 0, flen = filters.length; f < flen; f++) {\n filter = filters[f];\n filter.update_attrs(feature);\n if (!filter.keep(feature)) {\n hide_feature = true;\n break;\n }\n }\n if (!hide_feature) {\n // Feature visible.\n filtered.push(feature);\n // Set flag if not slotted.\n if (!(feature[0] in slots)) {\n all_slotted = false;\n }\n }\n }\n }\n\n // Create painter.\n var filter_alpha_scaler = this.filters_manager.alpha_filter ? new FilterScaler(this.filters_manager.alpha_filter) : null;\n\n var filter_height_scaler = this.filters_manager.height_filter ? new FilterScaler(this.filters_manager.height_filter) : null;\n\n var painter = new this.painter(filtered, tile_low, tile_high, this.config.to_key_value_dict(), mode, filter_alpha_scaler, filter_height_scaler,\n // HACK: ref_seq only be defined for ReadTracks, and only the ReadPainter accepts that argument\n ref_seq, function (b) {\n return track.view.get_base_color(b);\n });\n\n var feature_mapper = null;\n\n ctx.fillStyle = this.config.get_value(\"block_color\");\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"right\";\n\n if (result.data) {\n // Draw features.\n var draw_results = painter.draw(ctx, canvas.width, canvas.height, w_scale, slots);\n feature_mapper = draw_results.feature_mapper;\n incomplete_features = draw_results.incomplete_features;\n feature_mapper.translation = -left_offset;\n }\n\n // If not drawing on current tile, create new tile.\n if (!cur_tile) {\n return new FeatureTrackTile(track, region, w_scale, canvas, result.data, mode, result.message, all_slotted, feature_mapper, incomplete_features, ref_seq);\n }\n }\n});\n\n/**\n * Displays variant data.\n */\nvar VariantTrack = function VariantTrack(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.painter = _painters2.default.VariantPainter;\n this.summary_draw_height = 30;\n\n // Maximum resolution is ~45 pixels/base, so use this size left offset to ensure that full\n // variant is drawn when variant is at start of tile.\n this.left_offset = 30;\n};\n\nextend(VariantTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"color\",\n label: \"Histogram color\",\n type: \"color\"\n }, {\n key: \"show_sample_data\",\n label: \"Show sample data\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"show_labels\",\n label: \"Show summary and sample labels\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"summary_height\",\n label: \"Locus summary height\",\n type: \"float\",\n default_value: 20\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function draw_tile(result, ctx, mode, region, w_scale) {\n // Data could be coverage data or variant data.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, \"Histogram\", region, w_scale);\n } else {\n // result.dataset_type === 'variant'\n var view = this.view;\n\n var painter = new this.painter(result.data, region.get(\"start\"), region.get(\"end\"), this.config.to_key_value_dict(), mode, function (b) {\n return view.get_base_color(b);\n });\n\n painter.draw(ctx, ctx.canvas.width, ctx.canvas.height, w_scale);\n return new Tile(this, region, w_scale, ctx.canvas, result.data);\n }\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function get_canvas_height(result, mode, w_scale, canvas_width) {\n if (result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // HACK: sample_names is not be defined when dataset definition is fetched before\n // dataset is complete (as is done when running tools). In that case, fall back on\n // # of samples in data. This can be fixed by re-requesting dataset definition\n // in init.\n var num_samples = this.dataset.get_metadata(\"sample_names\") ? this.dataset.get_metadata(\"sample_names\").length : 0;\n if (num_samples === 0 && result.data.length !== 0) {\n // Sample data is separated by commas, so this computes # of samples:\n num_samples = result.data[0][7].match(/,/g);\n if (num_samples === null) {\n num_samples = 1;\n } else {\n num_samples = num_samples.length + 1;\n }\n }\n\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return dummy_painter.get_required_height(num_samples);\n }\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function predraw_init() {\n var deferreds = [Track.prototype.predraw_init.call(this)];\n // FIXME: updating dataset metadata is only needed for visual analysis. Can\n // this be moved somewhere else?\n if (!this.dataset.get_metadata(\"sample_names\")) {\n deferreds.push(this.dataset.fetch());\n }\n return deferreds;\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function postdraw_actions(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var line_track_tiles = _.filter(tiles, function (t) {\n return t instanceof LineTrackTile;\n });\n\n // Add summary/sample labels if needed and not already included.\n var sample_names = this.dataset.get_metadata(\"sample_names\");\n if (line_track_tiles.length === 0 && this.config.get_value(\"show_labels\") && sample_names && sample_names.length > 1) {\n var font_size;\n\n // Add and/or style labels.\n if (this.container_div.find(\".yaxislabel.variant\").length === 0) {\n // Add summary and sample labels.\n\n // Add summary label to middle of summary area.\n font_size = this.config.get_value(\"summary_height\") / 2;\n this.tiles_div.prepend($(\"
\").text(\"Summary\").addClass(\"yaxislabel variant top\").css({\n \"font-size\": font_size + \"px\",\n top: (this.config.get_value(\"summary_height\") - font_size) / 2 + \"px\"\n }));\n\n // Show sample labels.\n if (this.config.get_value(\"show_sample_data\")) {\n var samples_div_html = sample_names.join(\"
\");\n\n this.tiles_div.prepend($(\"
\").html(samples_div_html).addClass(\"yaxislabel variant top sample\").css({\n top: this.config.get_value(\"summary_height\")\n }));\n }\n }\n\n // Style labels.\n\n // Match sample font size to mode.\n font_size = (this.mode === \"Squish\" ? 5 : 10) + \"px\";\n $(this.tiles_div).find(\".sample\").css({\n \"font-size\": font_size,\n \"line-height\": font_size\n });\n // Color labels to preference color.\n $(this.tiles_div).find(\".yaxislabel\").css(\"color\", this.config.get_value(\"label_color\"));\n } else {\n // Remove all labels.\n this.container_div.find(\".yaxislabel.variant\").remove();\n }\n }\n});\n\n/**\n * Track that displays mapped reads. Track expects position data in 1-based, closed format, i.e. SAM/BAM format.\n */\nvar ReadTrack = function ReadTrack(view, container, obj_dict) {\n FeatureTrack.call(this, view, container, obj_dict);\n this.painter = _painters2.default.ReadPainter;\n this.update_icons();\n};\n\nextend(ReadTrack.prototype, Drawable.prototype, TiledTrack.prototype, FeatureTrack.prototype, {\n build_config_params: function build_config_params() {\n return _.union(Drawable.prototype.config_params, [{\n key: \"block_color\",\n label: \"Histogram color\",\n type: \"color\"\n }, {\n key: \"detail_block_color\",\n label: \"Sense strand block color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n }, {\n key: \"reverse_strand_color\",\n label: \"Antisense strand block color\",\n type: \"color\",\n default_value: \"#DDDDDD\"\n }, {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n }, {\n key: \"show_insertions\",\n label: \"Show insertions\",\n type: \"bool\",\n default_value: false\n }, {\n key: \"show_differences\",\n label: \"Show differences only\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true\n }, {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n }, {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n }, {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }]);\n },\n\n config_onchange: function config_onchange() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n }\n});\n\n/**\n * Objects that can be added to a view.\n */\nvar addable_objects = {\n CompositeTrack: CompositeTrack,\n DrawableGroup: DrawableGroup,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n FeatureTrack: FeatureTrack,\n LineTrack: LineTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n // For backward compatibility, map vcf track to variant.\n VcfTrack: VariantTrack\n};\n\n/**\n * Create new object from a template. A template can be either an object dictionary or an\n * object itself.\n */\nvar object_from_template = function object_from_template(template, view, container) {\n if (\"copy\" in template) {\n // Template is an object.\n return template.copy(container);\n } else {\n // Template is a dictionary.\n var drawable_type = template.obj_type;\n // For backward compatibility:\n if (!drawable_type) {\n drawable_type = template.track_type;\n }\n return new addable_objects[drawable_type](view, container, template);\n }\n};\n\nexports.default = {\n TracksterView: TracksterView,\n DrawableGroup: DrawableGroup,\n LineTrack: LineTrack,\n FeatureTrack: FeatureTrack,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n CompositeTrack: CompositeTrack,\n object_from_template: object_from_template\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0), __webpack_require__(2)))\n\n/***/ }),\n/* 115 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n * View for track/group header.\n */\nvar TrackHeaderView = Backbone.View.extend({\n className: \"track-header\",\n\n initialize: function initialize() {\n // Watch and update name changes.\n this.model.config.get(\"name\").on(\"change:value\", this.update_name, this);\n this.render();\n },\n\n render: function render() {\n this.$el.append($(\"
\").addClass(this.model.drag_handle_class));\n this.$el.append($(\"
\").addClass(\"track-name\").text(this.model.config.get_value(\"name\")));\n\n // Icons container.\n this.action_icons = {};\n this.render_action_icons();\n\n // Suppress double clicks in header so that they do not impact viz under header.\n this.$el.dblclick(function (e) {\n e.stopPropagation();\n });\n\n // Needed for floating elts in header.\n this.$el.append($(\"
\"));\n },\n\n update_name: function update_name() {\n this.$el.find(\".track-name\").text(this.model.config.get_value(\"name\"));\n },\n\n render_action_icons: function render_action_icons() {\n var self = this;\n this.icons_div = $(\"
\").addClass(\"track-icons\").hide().appendTo(this.$el);\n _.each(this.model.action_icons_def, function (icon_dict) {\n self.add_action_icon(icon_dict.name, icon_dict.title, icon_dict.css_class, icon_dict.on_click_fn, icon_dict.prepend, icon_dict.hide);\n });\n\n // Set up behavior for modes popup.\n this.set_display_modes(this.model.display_modes);\n },\n\n /**\n * Add an action icon to this object. Appends icon unless prepend flag is specified.\n */\n add_action_icon: function add_action_icon(name, title, css_class, on_click_fn, prepend, hide) {\n var self = this;\n this.action_icons[name] = $(\"\").attr(\"title\", title).addClass(\"icon-button\").addClass(css_class).tooltip().click(function () {\n on_click_fn(self.model);\n }).appendTo(this.icons_div);\n if (hide) {\n this.action_icons[name].hide();\n }\n },\n\n /**\n * Set track's modes and update mode icon popup.\n */\n set_display_modes: function set_display_modes(new_modes, init_mode) {\n if (!new_modes) {\n return;\n }\n\n // HACK: move this out of view and into track.\n\n // Set modes, init mode.\n this.model.display_modes = new_modes;\n this.model.mode = init_mode || this.model.config.get_value(\"mode\") || this.model.display_modes[0];\n\n this.action_icons.mode_icon.attr(\"title\", \"Set display mode (now: \" + this.mode + \")\");\n\n // Setup popup menu for changing modes.\n var self = this;\n\n var track = this.model;\n var mode_mapping = {};\n for (var i = 0, len = track.display_modes.length; i < len; i++) {\n var mode = track.display_modes[i];\n mode_mapping[mode] = function (mode) {\n return function () {\n track.change_mode(mode);\n // HACK: the popup menu messes with the track's hover event, so manually show/hide\n // icons div for now.\n //self.icons_div.show();\n //track.container_div.mouseleave(function() { track.icons_div.hide(); } );\n };\n }(mode);\n }\n\n make_popupmenu(this.action_icons.mode_icon, mode_mapping);\n }\n});\n\nexports.default = {\n TrackHeaderView: TrackHeaderView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 116 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar extend = _.extend;\n\n// HACK: LABEL_SPACING is currently duplicated between here and painters\nvar LABEL_SPACING = 2;\n\nvar PACK_SPACING = 5;\n\n/**\n * Hold slotting information for a feature.\n */\nvar SlottedInfo = function SlottedInfo(slot, feature) {\n this.slot = slot;\n this.feature = feature;\n};\n\n/**\n * FeatureSlotter determines slots in which to draw features for vertical\n * packing.\n *\n * This implementation is incremental, any feature assigned a slot will be\n * retained for slotting future features.\n */\nvar FeatureSlotter = function FeatureSlotter(w_scale, mode, max_rows, measureText) {\n this.slots = {};\n this.start_end_dct = {};\n this.w_scale = w_scale;\n this.mode = mode;\n this.include_label = mode === \"Pack\";\n this.max_rows = max_rows;\n this.measureText = measureText;\n};\n\n/**\n * Slot a set of features, `this.slots` will be updated with slots by id, and\n * the largest slot required for the passed set of features is returned\n */\nextend(FeatureSlotter.prototype, {\n /**\n * Get drawing coordinate for a feature.\n */\n _get_draw_coords: function _get_draw_coords(feature) {\n // Get initial draw coordinates using w_scale.\n var draw_start = Math.floor(feature[1] * this.w_scale);\n\n var draw_end = Math.ceil(feature[2] * this.w_scale);\n var f_name = feature[3];\n var text_align;\n\n // Update start, end drawing locations to include feature name.\n // Try to put the name on the left, if not, put on right.\n if (f_name !== undefined && this.include_label) {\n // Add gap for label spacing and extra pack space padding\n // TODO: Fix constants\n var text_len = this.measureText(f_name).width + (LABEL_SPACING + PACK_SPACING);\n if (draw_start - text_len >= 0) {\n draw_start -= text_len;\n text_align = \"left\";\n } else {\n draw_end += text_len;\n text_align = \"right\";\n }\n }\n\n /*\n if (slot_num < 0) {\n \n TODO: this is not yet working --\n console.log(feature_uid, \"looking for slot with text on the right\");\n // Slot not found. If text was on left, try on right and see\n // if slot can be found.\n // TODO: are there any checks we need to do to ensure that text\n // will fit on tile?\n if (text_align === \"left\") {\n draw_start -= text_len;\n draw_end -= text_len;\n text_align = \"right\";\n slot_num = find_slot(draw_start, draw_end);\n }\n if (slot_num >= 0) {\n console.log(feature_uid, \"found slot with text on the right\");\n }\n }\n */\n\n return [draw_start, draw_end];\n },\n\n /**\n * Find the first slot such that current feature doesn't overlap any other features in that slot.\n * Returns -1 if no slot was found.\n */\n _find_slot: function _find_slot(draw_coords) {\n // TODO: Use a data structure for faster searching of available slots.\n var draw_start = draw_coords[0];\n\n var draw_end = draw_coords[1];\n for (var slot_num = 0; slot_num <= this.max_rows; slot_num++) {\n var has_overlap = false;\n var slot = this.start_end_dct[slot_num];\n if (slot !== undefined) {\n // Iterate through features already in slot to see if current feature will fit.\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n var s_e = slot[k];\n if (draw_end > s_e[0] && draw_start < s_e[1]) {\n // There is overlap\n has_overlap = true;\n break;\n }\n }\n }\n if (!has_overlap) {\n return slot_num;\n }\n }\n return -1;\n },\n\n /**\n * Slot features.\n */\n slot_features: function slot_features(features) {\n var start_end_dct = this.start_end_dct;\n var undone = [];\n var highest_slot = 0;\n var feature;\n var feature_uid;\n\n // Loop through features to (a) find those that are not yet slotted and (b) update\n // those that are slotted if new information is availabe. For (a), features already\n // slotted (based on slotting from other tiles) will retain their current slot.\n for (var i = 0, len = features.length; i < len; i++) {\n feature = features[i];\n feature_uid = feature[0];\n var slotted_info = this.slots[feature_uid];\n\n // Separate and handle slotted vs. unslotted features.\n if (slotted_info) {\n // Feature is slotted; if feature now has larger start/end coordinates,\n // update drawing coordinates.\n if (feature[1] < slotted_info.feature[1] || slotted_info.feature[2] < feature[2]) {\n // Feature has changed (e.g. a single read now has its pair), so recalculate its\n // drawing coordinates.\n var old_draw_coords = this._get_draw_coords(slotted_info.feature);\n\n var new_draw_coords = this._get_draw_coords(feature);\n var slotted_coords = this.start_end_dct[slotted_info.slot];\n for (var k = 0; k < slotted_coords.length; k++) {\n var dc = slotted_coords[k];\n if (dc[0] === old_draw_coords[0] && dc[1] === old_draw_coords[1]) {\n // Replace old drawing coordinates with new ones.\n slotted_coords[k] = new_draw_coords;\n }\n }\n }\n highest_slot = Math.max(highest_slot, this.slots[feature_uid].slot);\n } else {\n undone.push(i);\n }\n }\n\n // Slot unslotted features.\n\n // Do slotting.\n for (var i = 0, len = undone.length; i < len; i++) {\n feature = features[undone[i]];\n feature_uid = feature[0];\n var draw_coords = this._get_draw_coords(feature);\n\n // Find slot.\n var slot_num = this._find_slot(draw_coords);\n\n // Do slotting.\n if (slot_num >= 0) {\n // Add current feature to slot.\n if (start_end_dct[slot_num] === undefined) {\n start_end_dct[slot_num] = [];\n }\n start_end_dct[slot_num].push(draw_coords);\n this.slots[feature_uid] = new SlottedInfo(slot_num, feature);\n highest_slot = Math.max(highest_slot, slot_num);\n }\n }\n\n // Debugging: view slots data.\n /*\n for (var i = 0; i < MAX_FEATURE_DEPTH; i++) {\n var slot = start_end_dct[i];\n if (slot !== undefined) {\n console.log(i, \"*************\");\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n console.log(\"\\t\", slot[k][0], slot[k][1]);\n }\n }\n }\n */\n return highest_slot + 1;\n }\n});\n\nexports.default = {\n FeatureSlotter: FeatureSlotter\n};\n\n/***/ }),\n/* 117 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\n/**\n * Compute the type of overlap between two regions. They are assumed to be on the same chrom/contig.\n * The overlap is computed relative to the second region; hence, OVERLAP_START indicates that the first\n * region overlaps the start (but not the end) of the second region.\n * NOTE: Coordinates are assumed to be in BED format: half open (start is closed, end is open).\n */\nvar BEFORE = 1001;\n\nvar CONTAINS = 1002;\nvar OVERLAP_START = 1003;\nvar OVERLAP_END = 1004;\nvar CONTAINED_BY = 1005;\nvar AFTER = 1006;\nvar compute_overlap = function compute_overlap(first_region, second_region) {\n var first_start = first_region[0];\n var first_end = first_region[1];\n var second_start = second_region[0];\n var second_end = second_region[1];\n var overlap;\n if (first_start < second_start) {\n if (first_end <= second_start) {\n overlap = BEFORE;\n } else if (first_end <= second_end) {\n overlap = OVERLAP_START;\n } else {\n // first_end > second_end\n overlap = CONTAINS;\n }\n } else {\n // first_start >= second_start\n if (first_start > second_end) {\n overlap = AFTER;\n } else if (first_end <= second_end) {\n overlap = CONTAINED_BY;\n } else {\n overlap = OVERLAP_END;\n }\n }\n\n return overlap;\n};\n\n/**\n * Returns true if regions overlap.\n */\nvar is_overlap = function is_overlap(first_region, second_region) {\n var overlap = compute_overlap(first_region, second_region);\n return overlap !== BEFORE && overlap !== AFTER;\n};\n\n/**\n * Draw a dashed line on a canvas using filled rectangles. This function is based on:\n * http://vetruvet.blogspot.com/2010/10/drawing-dashed-lines-on-html5-canvas.html\n * However, that approach uses lines, which don't seem to render as well, so use\n * rectangles instead.\n */\nvar dashedLine = function dashedLine(ctx, x1, y1, x2, y2, dashLen) {\n if (dashLen === undefined) {\n dashLen = 4;\n }\n var dX = x2 - x1;\n var dY = y2 - y1;\n var dashes = Math.floor(Math.sqrt(dX * dX + dY * dY) / dashLen);\n var dashX = dX / dashes;\n var dashY = dY / dashes;\n var q;\n\n for (q = 0; q < dashes; q++, x1 += dashX, y1 += dashY) {\n if (q % 2 !== 0) {\n continue;\n }\n ctx.fillRect(x1, y1, dashLen, 1);\n }\n};\n\n/**\n * Draw an isosceles triangle that points down.\n */\nvar drawDownwardEquilateralTriangle = function drawDownwardEquilateralTriangle(ctx, down_vertex_x, down_vertex_y, side_len) {\n // Compute other two points of triangle.\n var x1 = down_vertex_x - side_len / 2;\n\n var x2 = down_vertex_x + side_len / 2;\n var y = down_vertex_y - Math.sqrt(side_len * 3 / 2);\n\n // Draw and fill.\n ctx.beginPath();\n ctx.moveTo(x1, y);\n ctx.lineTo(x2, y);\n ctx.lineTo(down_vertex_x, down_vertex_y);\n ctx.lineTo(x1, y);\n\n ctx.strokeStyle = this.fillStyle;\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n};\n\n/**\n * Base class for all scalers. Scalers produce values that are used to change (scale) drawing attributes.\n */\nvar Scaler = function Scaler(default_val) {\n this.default_val = default_val ? default_val : 1;\n};\n\n/**\n * Produce a scaling value.\n */\nScaler.prototype.gen_val = function (input) {\n return this.default_val;\n};\n\n/**\n * Results from painter.draw()\n */\nvar DrawResults = function DrawResults(options) {\n this.incomplete_features = options.incomplete_features;\n this.feature_mapper = options.feature_mapper;\n};\n\n/**\n * Base class for painters\n *\n * -- Mode and prefs are both optional\n */\nvar Painter = function Painter(data, view_start, view_end, prefs, mode) {\n // Data and data properties\n this.data = data;\n // View\n this.view_start = view_start;\n this.view_end = view_end;\n // Drawing prefs\n this.prefs = _.extend({}, this.default_prefs, prefs);\n this.mode = mode;\n};\n\nPainter.prototype.default_prefs = {};\n\n/**\n * Draw on the context using a rectangle of width x height using scale w_scale.\n */\nPainter.prototype.draw = function (ctx, width, height, w_scale) {};\n\n/**\n * Get starting drawing position, which is offset a half-base left of coordinate.\n */\nPainter.prototype.get_start_draw_pos = function (chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, -0.5);\n};\n\n/**\n * Get end drawing position, which is offset a half-base right of coordinate.\n */\nPainter.prototype.get_end_draw_pos = function (chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0.5);\n};\n\n/**\n * Get drawing position.\n */\nPainter.prototype.get_draw_pos = function (chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0);\n};\n\n/**\n * Convert chromosome position to drawing position.\n */\nPainter.prototype._chrom_pos_to_draw_pos = function (chrom_pos, w_scale, offset) {\n return Math.floor(w_scale * (Math.max(0, chrom_pos - this.view_start) + offset));\n};\n\nvar LinePainter = function LinePainter(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n};\n\nLinePainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Histogram\",\n color: \"#000\",\n overflow_color: \"#F66\"\n};\n\nLinePainter.prototype.draw = function (ctx, width, height, w_scale) {\n var in_path = false;\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var vertical_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n\n ctx.save();\n\n // Pixel position of 0 on the y axis\n var y_zero = Math.round(height + min_value / vertical_range * height);\n\n // Horizontal line to denote x-axis\n if (mode !== \"Intensity\") {\n ctx.fillStyle = \"#aaa\";\n ctx.fillRect(0, y_zero, width, 1);\n }\n\n ctx.beginPath();\n var x_scaled;\n var y;\n var delta_x_pxs;\n if (data.length > 1) {\n delta_x_pxs = _.map(data.slice(0, -1), function (d, i) {\n return Math.ceil((data[i + 1][0] - data[i][0]) * w_scale);\n });\n } else {\n delta_x_pxs = [10];\n }\n\n // Painter color can be in either block_color (FeatureTrack) or color pref (LineTrack).\n var painter_color = this.prefs.block_color || this.prefs.color;\n\n var // Extract RGB from preference color.\n pref_color = parseInt(painter_color.slice(1), 16);\n\n var pref_r = (pref_color & 0xff0000) >> 16;\n var pref_g = (pref_color & 0x00ff00) >> 8;\n var pref_b = pref_color & 0x0000ff;\n var top_overflow = false;\n var bot_overflow = false;\n\n // Paint track.\n var delta_x_px;\n for (var i = 0, len = data.length; i < len; i++) {\n // Reset attributes for next point.\n ctx.fillStyle = ctx.strokeStyle = painter_color;\n top_overflow = bot_overflow = false;\n delta_x_px = delta_x_pxs[i];\n\n x_scaled = Math.floor((data[i][0] - view_start - 0.5) * w_scale);\n y = data[i][1];\n\n // Process Y (scaler) value.\n if (y === null) {\n if (in_path && mode === \"Filled\") {\n ctx.lineTo(x_scaled, height_px);\n }\n in_path = false;\n continue;\n }\n\n // Bound Y value by min, max.\n if (y < min_value) {\n bot_overflow = true;\n y = min_value;\n } else if (y > max_value) {\n top_overflow = true;\n y = max_value;\n }\n\n // Draw point.\n if (mode === \"Histogram\") {\n // y becomes the bar height in pixels, which is the negated for canvas coords\n y = Math.round(y / vertical_range * height_px);\n ctx.fillRect(x_scaled, y_zero, delta_x_px, -y);\n } else if (mode === \"Intensity\") {\n var saturation = (y - min_value) / vertical_range;\n\n var // Range is [pref_color, 255] where saturation = 0 --> 255 and saturation = 1 --> pref color\n new_r = Math.round(pref_r + (255 - pref_r) * (1 - saturation));\n\n var new_g = Math.round(pref_g + (255 - pref_g) * (1 - saturation));\n var new_b = Math.round(pref_b + (255 - pref_b) * (1 - saturation));\n ctx.fillStyle = \"rgb(\" + new_r + \",\" + new_g + \",\" + new_b + \")\";\n ctx.fillRect(x_scaled, 0, delta_x_px, height_px);\n } else {\n // mode is Coverage/Line or Filled.\n\n // Scale Y value.\n y = Math.round(height_px - (y - min_value) / vertical_range * height_px);\n if (in_path) {\n ctx.lineTo(x_scaled, y);\n } else {\n in_path = true;\n if (mode === \"Filled\") {\n ctx.moveTo(x_scaled, height_px);\n ctx.lineTo(x_scaled, y);\n } else {\n ctx.moveTo(x_scaled, y);\n // Use this approach (note: same as for filled) to draw line from 0 to\n // first data point.\n //ctx.moveTo(x_scaled, height_px);\n //ctx.lineTo(x_scaled, y);\n }\n }\n }\n\n // Draw lines at boundaries if overflowing min or max\n ctx.fillStyle = this.prefs.overflow_color;\n if (top_overflow || bot_overflow) {\n var overflow_x;\n if (mode === \"Histogram\" || mode === \"Intensity\") {\n overflow_x = delta_x_px;\n } else {\n // Line and Filled, which are points\n x_scaled -= 2; // Move it over to the left so it's centered on the point\n overflow_x = 4;\n }\n if (top_overflow) {\n ctx.fillRect(x_scaled, 0, overflow_x, 3);\n }\n if (bot_overflow) {\n ctx.fillRect(x_scaled, height_px - 3, overflow_x, 3);\n }\n }\n ctx.fillStyle = painter_color;\n }\n if (mode === \"Filled\") {\n if (in_path) {\n ctx.lineTo(x_scaled, y_zero);\n ctx.lineTo(0, y_zero);\n }\n ctx.fill();\n } else {\n ctx.stroke();\n }\n\n ctx.restore();\n};\n\n/**\n * Mapper that contains information about feature locations and data.\n */\nvar FeaturePositionMapper = function FeaturePositionMapper(slot_height) {\n this.feature_positions = {};\n this.slot_height = slot_height;\n this.translation = 0;\n this.y_translation = 0;\n};\n\n/**\n * Map feature data to a position defined by .\n */\nFeaturePositionMapper.prototype.map_feature_data = function (feature_data, slot, x_start, x_end) {\n if (!this.feature_positions[slot]) {\n this.feature_positions[slot] = [];\n }\n this.feature_positions[slot].push({\n data: feature_data,\n x_start: x_start,\n x_end: x_end\n });\n};\n\n/**\n * Get feature data for position \n */\nFeaturePositionMapper.prototype.get_feature_data = function (x, y) {\n // Find slot using Y.\n var slot = Math.floor((y - this.y_translation) / this.slot_height);\n\n var feature_dict;\n\n // May not be over a slot due to padding, margin, etc.\n if (!this.feature_positions[slot]) {\n return null;\n }\n\n // Find feature using X.\n x += this.translation;\n for (var i = 0; i < this.feature_positions[slot].length; i++) {\n feature_dict = this.feature_positions[slot][i];\n if (x >= feature_dict.x_start && x <= feature_dict.x_end) {\n return feature_dict.data;\n }\n }\n};\n\n/**\n * Abstract object for painting feature tracks. Subclasses must implement draw_element() for painting to work.\n * Painter uses a 0-based, half-open coordinate system; start coordinate is closed--included--and the end is open.\n * This coordinate system matches the BED format.\n */\nvar FeaturePainter = function FeaturePainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.alpha_scaler = alpha_scaler ? alpha_scaler : new Scaler();\n this.height_scaler = height_scaler ? height_scaler : new Scaler();\n this.max_label_length = 200;\n};\n\nFeaturePainter.prototype.default_prefs = {\n block_color: \"#FFF\",\n connector_color: \"#FFF\"\n};\n\n_.extend(FeaturePainter.prototype, {\n get_required_height: function get_required_height(rows_required, width) {\n // y_scale is the height per row\n var required_height = this.get_row_height();\n\n var y_scale = required_height;\n var mode = this.mode;\n // If using a packing mode, need to multiply by the number of slots used\n if (mode === \"no_detail\" || mode === \"Squish\" || mode === \"Pack\") {\n required_height = rows_required * y_scale;\n }\n return required_height + this.get_top_padding(width);\n },\n\n /** Extra padding before first row of features */\n get_top_padding: function get_top_padding(width) {\n return 0;\n },\n\n /**\n * Draw data on ctx using slots and within the rectangle defined by width and height. Returns\n * a FeaturePositionMapper object with information about where features were drawn.\n */\n draw: function draw(ctx, width, height, w_scale, slots) {\n var data = this.data;\n var view_start = this.view_start;\n var view_end = this.view_end;\n\n ctx.save();\n\n ctx.fillStyle = this.prefs.block_color;\n ctx.textAlign = \"right\";\n\n var y_scale = this.get_row_height();\n var feature_mapper = new FeaturePositionMapper(y_scale);\n var x_draw_coords;\n var incomplete_features = [];\n\n for (var i = 0, len = data.length; i < len; i++) {\n var feature = data[i];\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n\n var // Slot valid only if features are slotted and this feature is slotted;\n // feature may not be due to lack of space.\n slot = slots && slots[feature_uid] !== undefined ? slots[feature_uid].slot : null;\n\n // Draw feature if (a) mode is dense or feature is slotted (as it must be for all non-dense modes) and\n // (b) there's overlap between the feature and drawing region.\n if ((this.mode === \"Dense\" || slot !== null) && feature_start < view_end && feature_end > view_start) {\n x_draw_coords = this.draw_element(ctx, this.mode, feature, slot, view_start, view_end, w_scale, y_scale, width);\n feature_mapper.map_feature_data(feature, slot, x_draw_coords[0], x_draw_coords[1]);\n\n // Add to incomplete features if it's not drawn completely in region.\n if (feature_start < view_start || feature_end > view_end) {\n incomplete_features.push(feature);\n }\n }\n }\n\n ctx.restore();\n\n feature_mapper.y_translation = this.get_top_padding(width);\n return new DrawResults({\n incomplete_features: incomplete_features,\n feature_mapper: feature_mapper\n });\n },\n\n /**\n * Abstract function for drawing an individual feature.\n */\n draw_element: function draw_element(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n return [0, 0];\n }\n});\n\n// Constants specific to feature tracks moved here (HACKING, these should\n// basically all be configuration options)\nvar DENSE_TRACK_HEIGHT = 10;\n\nvar NO_DETAIL_TRACK_HEIGHT = 3;\nvar SQUISH_TRACK_HEIGHT = 5;\nvar PACK_TRACK_HEIGHT = 10;\nvar NO_DETAIL_FEATURE_HEIGHT = 1;\nvar DENSE_FEATURE_HEIGHT = 9;\nvar SQUISH_FEATURE_HEIGHT = 3;\nvar PACK_FEATURE_HEIGHT = 9;\nvar LABEL_SPACING = 2;\nvar CONNECTOR_COLOR = \"#ccc\";\n\nvar LinkedFeaturePainter = function LinkedFeaturePainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Whether to draw a single connector in the background that spans the entire feature (the intron fishbone)\n this.draw_background_connector = true;\n // Whether to call draw_connector for every pair of blocks\n this.draw_individual_connectors = false;\n};\n\n_.extend(LinkedFeaturePainter.prototype, FeaturePainter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function get_row_height() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"no_detail\") {\n height = NO_DETAIL_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Draw a feature. Returns an array with feature's start and end X coordinates.\n */\n draw_element: function draw_element(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n var feature_strand = feature[4];\n\n var // -0.5 to offset region between bases.\n f_start = Math.floor(Math.max(0, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var draw_start = f_start;\n var draw_end = f_end;\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale + this.get_top_padding(width);\n\n var thickness;\n var y_start;\n var thick_start = null;\n var thick_end = null;\n\n var // TODO: is there any reason why block, label color cannot be set at the Painter level?\n // For now, assume '.' === '+'\n block_color = !feature_strand || feature_strand === \"+\" || feature_strand === \".\" ? this.prefs.block_color : this.prefs.reverse_strand_color;\n\n var label_color = this.prefs.label_color;\n\n // Set global alpha.\n ctx.globalAlpha = this.alpha_scaler.gen_val(feature);\n\n // In dense mode, put all data in top slot.\n if (mode === \"Dense\") {\n slot = 1;\n }\n\n if (mode === \"no_detail\") {\n // No details for feature, so only one way to display.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 5, f_end - f_start, NO_DETAIL_FEATURE_HEIGHT);\n } else {\n // Mode is either Squish or Pack:\n // Feature details.\n var feature_ts = feature[5];\n\n var feature_te = feature[6];\n var feature_blocks = feature[7];\n\n var // Whether we are drawing full height or squished features\n full_height = true;\n\n if (feature_ts && feature_te) {\n thick_start = Math.floor(Math.max(0, (feature_ts - tile_low) * w_scale));\n thick_end = Math.ceil(Math.min(width, Math.max(0, (feature_te - tile_low) * w_scale)));\n }\n\n // Set vars that depend on mode.\n var thin_height;\n\n var thick_height;\n if (mode === \"Squish\") {\n thin_height = 1;\n thick_height = SQUISH_FEATURE_HEIGHT;\n full_height = false;\n } else if (mode === \"Dense\") {\n thin_height = 5;\n thick_height = DENSE_FEATURE_HEIGHT;\n } else {\n // mode === \"Pack\"\n thin_height = 5;\n thick_height = PACK_FEATURE_HEIGHT;\n }\n\n // Draw feature/feature blocks + connectors.\n if (!feature_blocks) {\n // If there are no blocks, treat the feature as one big exon.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n // If strand is specified, draw arrows over feature\n if (feature_strand && full_height) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n }\n } else {\n //\n // There are feature blocks and mode is either Squish or Pack.\n //\n // Approach: (a) draw whole feature as connector/intron and (b) draw blocks as\n // needed. This ensures that whole feature, regardless of whether it starts with\n // a block, is visible.\n //\n\n // Compute y axis start position and height\n var cur_y_start;\n\n var cur_height;\n if (mode === \"Squish\" || mode === \"Dense\") {\n cur_y_start = y_start + Math.floor(SQUISH_FEATURE_HEIGHT / 2) + 1;\n cur_height = 1;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n cur_y_start = y_start;\n cur_height = thick_height;\n } else {\n cur_y_start += SQUISH_FEATURE_HEIGHT / 2 + 1;\n cur_height = 1;\n }\n }\n\n // Draw whole feature as connector/intron.\n if (this.draw_background_connector) {\n if (mode === \"Squish\" || mode === \"Dense\") {\n ctx.fillStyle = CONNECTOR_COLOR;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand\");\n }\n } else {\n ctx.fillStyle = CONNECTOR_COLOR;\n }\n }\n ctx.fillRect(f_start, cur_y_start, f_end - f_start, cur_height);\n }\n\n // Draw blocks.\n var start_and_height;\n for (var k = 0, k_len = feature_blocks.length; k < k_len; k++) {\n var block = feature_blocks[k];\n\n var // -0.5 to offset block between bases.\n block_start = Math.floor(Math.max(0, (block[0] - tile_low - 0.5) * w_scale));\n\n var block_end = Math.ceil(Math.min(width, Math.max((block[1] - tile_low - 0.5) * w_scale)));\n\n var last_block_start;\n var last_block_end;\n\n // Skip drawing if block not on tile.\n if (block_start > block_end) {\n continue;\n }\n\n // Draw thin block.\n ctx.fillStyle = block_color;\n ctx.fillRect(block_start, y_start + (thick_height - thin_height) / 2 + 1, block_end - block_start, thin_height);\n\n // If block intersects with thick region, draw block as thick.\n // - No thick is sometimes encoded as thick_start == thick_end, so don't draw in that case\n if (thick_start !== undefined && feature_te > feature_ts && !(block_start > thick_end || block_end < thick_start)) {\n var block_thick_start = Math.max(block_start, thick_start);\n\n var block_thick_end = Math.min(block_end, thick_end);\n ctx.fillRect(block_thick_start, y_start + 1, block_thick_end - block_thick_start, thick_height);\n if (feature_blocks.length === 1 && mode === \"Pack\") {\n // Exactly one block means we have no introns, but do have a distinct \"thick\" region,\n // draw arrows over it if in pack mode.\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n // If region is wide enough in pixels, pad a bit\n if (block_thick_start + 14 < block_thick_end) {\n block_thick_start += 2;\n block_thick_end -= 2;\n }\n ctx.fillRect(block_thick_start, y_start + 1, block_thick_end - block_thick_start, thick_height);\n }\n }\n // Draw individual connectors if required\n if (this.draw_individual_connectors && last_block_start) {\n this.draw_connector(ctx, last_block_start, last_block_end, block_start, block_end, y_start);\n }\n last_block_start = block_start;\n last_block_end = block_end;\n }\n\n // FIXME: Height scaling only works in Pack mode right now.\n if (mode === \"Pack\") {\n // Reset alpha so height scaling is not impacted by alpha scaling.\n ctx.globalAlpha = 1;\n\n // Height scaling: draw white lines to reduce height according to height scale factor.\n ctx.fillStyle = \"white\"; // TODO: set this to background color.\n var hscale_factor = this.height_scaler.gen_val(feature);\n\n var // Ceil ensures that min height is >= 1.\n new_height = Math.ceil(thick_height * hscale_factor);\n\n var ws_height = Math.round((thick_height - new_height) / 2);\n if (hscale_factor !== 1) {\n ctx.fillRect(f_start, cur_y_start + 1, f_end - f_start, ws_height);\n ctx.fillRect(f_start, cur_y_start + thick_height - ws_height + 1, f_end - f_start, ws_height);\n }\n }\n }\n\n // Reset alpha so that label is not transparent.\n ctx.globalAlpha = 1;\n\n // Draw label for Pack mode.\n if (feature_name && mode === \"Pack\" && feature_start > tile_low) {\n ctx.fillStyle = label_color;\n // FIXME: assumption here that the entire view starts at 0\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_end += ctx.measureText(feature_name).width + LABEL_SPACING;\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_start -= ctx.measureText(feature_name).width + LABEL_SPACING;\n }\n //ctx.fillStyle = block_color;\n }\n }\n\n // Reset global alpha.\n ctx.globalAlpha = 1;\n\n return [draw_start, draw_end];\n }\n});\n\nvar ReadPainter = function ReadPainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler, ref_seq, base_color_fn) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n this.ref_seq = ref_seq ? ref_seq.data : null;\n this.base_color_fn = base_color_fn;\n};\n\n_.extend(ReadPainter.prototype, FeaturePainter.prototype, {\n /**\n * Returns height based on mode.\n */\n get_row_height: function get_row_height() {\n var height;\n var mode = this.mode;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n if (this.prefs.show_insertions) {\n height *= 2;\n }\n }\n return height;\n },\n\n /**\n * Parse CIGAR string to get (a) a list of contiguous drawing blocks (MD=X) and\n * (b) an array of [ op_index, op_len ] pairs where op_index is an index into the\n * string 'MIDNSHP=X' Return value is a dictionary with two entries, blocks and cigar\n */\n _parse_cigar: function _parse_cigar(cigar_str) {\n var cigar_ops = \"MIDNSHP=X\";\n\n // Parse cigar.\n var blocks = [[0, 0]];\n\n var cur_block = blocks[0];\n var base_pos = 0;\n\n var // Parse cigar operations out and update/create blocks as needed.\n parsed_cigar = _.map(cigar_str.match(/[0-9]+[MIDNSHP=X]/g), function (op) {\n // Get operation length, character.\n var op_len = parseInt(op.slice(0, -1), 10),\n op_char = op.slice(-1);\n\n // Update drawing block.\n if (op_char === \"N\") {\n // At skip, so need to start new block if current block represents\n // drawing area.\n if (cur_block[1] !== 0) {\n cur_block = [base_pos + op_len, base_pos + op_len];\n blocks.push(cur_block);\n }\n } else if (\"ISHP\".indexOf(op_char) === -1) {\n // Operation is M,D,=,X.\n cur_block[1] += op_len;\n base_pos += op_len;\n }\n\n // Return parsed cigar.\n return [cigar_ops.indexOf(op_char), op_len];\n });\n\n return {\n blocks: blocks,\n cigar: parsed_cigar\n };\n },\n\n /**\n * Draw a single read from reference-based read sequence and cigar.\n */\n draw_read: function draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature_start, cigar, strand, read_seq) {\n // Helper function to update base and sequnence offsets.\n var update_base_offset = function update_base_offset(offset, cig_op, cig_len) {\n if (\"M=NXD\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var update_seq_offset = function update_seq_offset(offset, cig_op, cig_len) {\n if (\"IX\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var // Gets drawing coordinate for a sequence coordinate. Assumes closure variables w_scale and tile_low.\n get_draw_coord = function get_draw_coord(sequence_coord // -0.5 to offset sequence between bases.\n ) {\n return Math.floor(Math.max(0, (sequence_coord - tile_low - 0.5) * w_scale));\n };\n\n ctx.textAlign = \"center\";\n var tile_region = [tile_low, tile_high];\n var base_offset = 0;\n var seq_offset = 0;\n var gap = Math.round(w_scale / 2);\n var char_width_px = ctx.canvas.manager.char_width_px;\n\n var block_color = strand === \"+\" ? this.prefs.detail_block_color : this.prefs.reverse_strand_color;\n\n var pack_mode = mode === \"Pack\";\n\n var draw_height = pack_mode ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var rect_y = y_start + 1;\n var paint_utils = new ReadPainterUtils(ctx, draw_height, w_scale, mode);\n var drawing_blocks = [];\n var s_start;\n var s_end;\n\n // Keep list of items that need to be drawn on top of initial drawing layer.\n var draw_last = [];\n\n // Parse cigar and get drawing blocks.\n var t = this._parse_cigar(cigar);\n cigar = t.cigar;\n drawing_blocks = t.blocks;\n\n // Draw blocks.\n for (var i = 0; i < drawing_blocks.length; i++) {\n var block = drawing_blocks[i];\n\n if (is_overlap([feature_start + block[0], feature_start + block[1]], tile_region)) {\n s_start = get_draw_coord(feature_start + block[0]);\n s_end = get_draw_coord(feature_start + block[1]);\n\n // Make sure that block is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read base as rectangle.\n ctx.fillStyle = block_color;\n ctx.fillRect(s_start, rect_y, s_end - s_start, draw_height);\n }\n }\n\n // Draw read features.\n for (var cig_id = 0, len = cigar.length; cig_id < len; cig_id++) {\n var cig = cigar[cig_id];\n var cig_op = \"MIDNSHP=X\"[cig[0]];\n var cig_len = cig[1];\n\n var seq_start = feature_start + base_offset;\n s_start = get_draw_coord(seq_start);\n s_end = get_draw_coord(seq_start + cig_len);\n\n // Skip feature if it's not in tile.\n if (!is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n // Update offsets.\n base_offset = update_base_offset(base_offset, cig_op, cig_len);\n seq_offset = update_seq_offset(seq_offset, cig_op, cig_len);\n continue;\n }\n\n // Make sure that read is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read feature.\n switch (cig_op) {\n case \"H\": // Hard clipping.\n case \"S\": // Soft clipping.\n case \"P\":\n // Padding.\n // Sequence not present and not related to alignment; do nothing.\n break;\n case \"M\":\n // \"Match\".\n // Because it's not known whether there is a match, ignore.\n base_offset += cig_len;\n break;\n case \"=\": // Match with reference.\n case \"X\":\n // Mismatch with reference.\n //\n // Draw sequence and/or variants.\n //\n\n // Get sequence to draw.\n var cur_seq = \"\";\n if (cig_op === \"X\") {\n // Get sequence from read_seq.\n cur_seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n } else if (this.ref_seq) {\n // && cig_op === '='\n // Use reference sequence.\n cur_seq = this.ref_seq.slice(\n // If read starts after tile start, slice at read start.\n Math.max(0, seq_start - tile_low),\n // If read ends before tile end, slice at read end.\n Math.min(seq_start - tile_low + cig_len, tile_high - tile_low));\n }\n\n // Draw sequence. Because cur_seq starts and read/tile start, go to there to start writing.\n var start_pos = Math.max(seq_start, tile_low);\n for (var c = 0; c < cur_seq.length; c++) {\n // Draw base if showing all (i.e. not showing differences) or there is a mismatch.\n if (cur_seq && !this.prefs.show_differences || cig_op === \"X\") {\n // Draw base.\n var c_start = Math.floor(Math.max(0, (start_pos + c - tile_low) * w_scale));\n ctx.fillStyle = this.base_color_fn(cur_seq[c]);\n if (pack_mode && w_scale > char_width_px) {\n ctx.fillText(cur_seq[c], c_start, y_start + 9);\n } else if (w_scale > 0.05) {\n // Require a minimum w_scale so that variants are only drawn when somewhat zoomed in.\n ctx.fillRect(c_start - gap, rect_y, Math.max(1, Math.round(w_scale)), draw_height);\n }\n }\n }\n\n // Move forward in sequence only if sequence used to get mismatches.\n if (cig_op === \"X\") {\n seq_offset += cig_len;\n }\n base_offset += cig_len;\n\n break;\n case \"N\":\n // Skipped bases.\n ctx.fillStyle = CONNECTOR_COLOR;\n ctx.fillRect(s_start, rect_y + (draw_height - 1) / 2, s_end - s_start, 1);\n // No change in seq_offset because sequence not used when skipping.\n base_offset += cig_len;\n break;\n case \"D\":\n // Deletion.\n paint_utils.draw_deletion(s_start, rect_y, cig_len);\n base_offset += cig_len;\n break;\n case \"I\":\n // Insertion.\n // Check to see if sequence should be drawn at all by looking at the overlap between\n // the sequence region and the tile region.\n var insert_x_coord = s_start - gap;\n\n if (is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n var seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n // Insertion point is between the sequence start and the previous base: (-gap) moves\n // back from sequence start to insertion point.\n if (this.prefs.show_insertions) {\n //\n // Show inserted sequence above, centered on insertion point.\n //\n\n // Draw sequence.\n // X center is offset + start - \n var x_center = s_start - (s_end - s_start) / 2;\n if ((mode === \"Pack\" || this.mode === \"Auto\") && read_seq !== undefined && w_scale > char_width_px) {\n // Draw sequence container.\n ctx.fillStyle = \"yellow\";\n ctx.fillRect(x_center - gap, y_start - 9, s_end - s_start, 9);\n draw_last[draw_last.length] = {\n type: \"triangle\",\n data: [insert_x_coord, y_start + 4, 5]\n };\n ctx.fillStyle = CONNECTOR_COLOR;\n // Based on overlap b/t sequence and tile, get sequence to be drawn.\n switch (compute_overlap([seq_start, seq_start + cig_len], tile_region)) {\n case OVERLAP_START:\n seq = seq.slice(tile_low - seq_start);\n break;\n case OVERLAP_END:\n seq = seq.slice(0, seq_start - tile_high);\n break;\n case CONTAINED_BY:\n // All of sequence drawn.\n break;\n case CONTAINS:\n seq = seq.slice(tile_low - seq_start, seq_start - tile_high);\n break;\n }\n // Draw sequence.\n for (var c = 0, str_len = seq.length; c < str_len; c++) {\n var c_start = Math.floor(Math.max(0, (seq_start + c - tile_low) * w_scale));\n ctx.fillText(seq[c], c_start - (s_end - s_start) / 2, y_start);\n }\n } else {\n // Draw block.\n ctx.fillStyle = \"yellow\";\n // TODO: This is a pretty hack-ish way to fill rectangle based on mode.\n ctx.fillRect(x_center, y_start + (this.mode !== \"Dense\" ? 2 : 5), s_end - s_start, mode !== \"Dense\" ? SQUISH_FEATURE_HEIGHT : DENSE_FEATURE_HEIGHT);\n }\n } else {\n if ((mode === \"Pack\" || this.mode === \"Auto\") && read_seq !== undefined && w_scale > char_width_px) {\n // Show insertions with a single number at the insertion point.\n draw_last.push({\n type: \"text\",\n data: [seq.length, insert_x_coord, y_start + 9]\n });\n } else {\n // TODO: probably can merge this case with code above.\n }\n }\n }\n seq_offset += cig_len;\n // No change to base offset because insertions are drawn above sequence/read.\n break;\n }\n }\n\n //\n // Draw last items.\n //\n ctx.fillStyle = \"yellow\";\n var item;\n var type;\n var data;\n for (var i = 0; i < draw_last.length; i++) {\n item = draw_last[i];\n type = item.type;\n data = item.data;\n if (type === \"text\") {\n ctx.save();\n ctx.font = \"bold \" + ctx.font;\n ctx.fillText(data[0], data[1], data[2]);\n ctx.restore();\n } else if (type === \"triangle\") {\n drawDownwardEquilateralTriangle(ctx, data[0], data[1], data[2]);\n }\n }\n },\n\n /**\n * Draw a complete read pair\n */\n draw_element: function draw_element(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n // All features need a start, end, and vertical center.\n var feature_uid = feature[0];\n\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n\n var // -0.5 to put element between bases.\n f_start = Math.floor(Math.max(-0.5 * w_scale, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale;\n\n var draw_height = mode === \"Pack\" ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var label_color = this.prefs.label_color;\n\n // Draw read.\n if (feature[5] instanceof Array) {\n // Read is paired.\n var connector = true;\n\n // Draw left/forward read.\n if (feature[4][1] >= tile_low && feature[4][0] <= tile_high && feature[4][2]) {\n this.draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature[4][0], feature[4][2], feature[4][3], feature[4][4]);\n } else {\n connector = false;\n }\n\n // Draw right/reverse read.\n if (feature[5][1] >= tile_low && feature[5][0] <= tile_high && feature[5][2]) {\n this.draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature[5][0], feature[5][2], feature[5][3], feature[5][4]);\n } else {\n connector = false;\n }\n\n // Draw connector if both reads were drawn.\n // TODO: currently, there is no way to connect reads drawn on different tiles; to connect reads on different tiles, data manager\n // code is needed to join mate pairs from different regions. Alternatively, requesting multiple regions of data at once would\n // make it possible to put together more easily.\n // -0.5 to position connector correctly between reads.\n var b1_end = Math.ceil(Math.min(width, Math.max(-0.5 * w_scale, (feature[4][1] - tile_low - 0.5) * w_scale)));\n\n var b2_start = Math.floor(Math.max(-0.5 * w_scale, (feature[5][0] - tile_low - 0.5) * w_scale));\n\n if (connector && b2_start > b1_end) {\n ctx.fillStyle = CONNECTOR_COLOR;\n var line_height = y_start + 1 + (draw_height - 1) / 2;\n dashedLine(ctx, b1_end, line_height, b2_start, line_height);\n }\n } else {\n // Read is single.\n this.draw_read(ctx, mode, w_scale, y_start, tile_low, tile_high, feature_start, feature[4], feature[5], feature[6]);\n }\n if (mode === \"Pack\" && feature_start >= tile_low && feature_name !== \".\") {\n // Draw label.\n ctx.fillStyle = this.prefs.label_color;\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 9, this.max_label_length);\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 9, this.max_label_length);\n }\n }\n\n // FIXME: provide actual coordinates for drawn read.\n return [0, 0];\n }\n});\n\nvar ArcLinkedFeaturePainter = function ArcLinkedFeaturePainter(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n LinkedFeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Need to know the longest feature length for adding spacing\n this.longest_feature_length = this.calculate_longest_feature_length();\n this.draw_background_connector = false;\n this.draw_individual_connectors = true;\n};\n\n_.extend(ArcLinkedFeaturePainter.prototype, FeaturePainter.prototype, LinkedFeaturePainter.prototype, {\n calculate_longest_feature_length: function calculate_longest_feature_length() {\n var longest_feature_length = 0;\n for (var i = 0, len = this.data.length; i < len; i++) {\n var feature = this.data[i];\n var feature_start = feature[1];\n var feature_end = feature[2];\n longest_feature_length = Math.max(longest_feature_length, feature_end - feature_start);\n }\n return longest_feature_length;\n },\n\n get_top_padding: function get_top_padding(width) {\n var view_range = this.view_end - this.view_start;\n var w_scale = width / view_range;\n return Math.min(128, Math.ceil(this.longest_feature_length / 2 * w_scale));\n },\n\n draw_connector: function draw_connector(ctx, block1_start, block1_end, block2_start, block2_end, y_start) {\n // Arc drawing -- from closest endpoints\n var x_center = (block1_end + block2_start) / 2;\n\n var radius = block2_start - x_center;\n\n // For full half circles\n var angle1 = Math.PI;\n\n var angle2 = 0;\n if (radius > 0) {\n ctx.beginPath();\n ctx.arc(x_center, y_start, block2_start - x_center, Math.PI, 0);\n ctx.stroke();\n }\n }\n});\n\n// Color stuff from less.js\n\nvar Color = function Color(rgb, a) {\n /**\n * The end goal here, is to parse the arguments\n * into an integer triplet, such as `128, 255, 0`\n *\n * This facilitates operations and conversions.\n */\n if (Array.isArray(rgb)) {\n this.rgb = rgb;\n } else if (rgb.length == 6) {\n this.rgb = rgb.match(/.{2}/g).map(function (c) {\n return parseInt(c, 16);\n });\n } else if (rgb.length == 7) {\n this.rgb = rgb.substring(1, 7).match(/.{2}/g).map(function (c) {\n return parseInt(c, 16);\n });\n } else {\n this.rgb = rgb.split(\"\").map(function (c) {\n return parseInt(c + c, 16);\n });\n }\n this.alpha = typeof a === \"number\" ? a : 1;\n};\nColor.prototype = {\n eval: function _eval() {\n return this;\n },\n\n //\n // If we have some transparency, the only way to represent it\n // is via `rgba`. Otherwise, we use the hex representation,\n // which has better compatibility with older browsers.\n // Values are capped between `0` and `255`, rounded and zero-padded.\n //\n toCSS: function toCSS() {\n if (this.alpha < 1.0) {\n return \"rgba(\" + this.rgb.map(function (c) {\n return Math.round(c);\n }).concat(this.alpha).join(\", \") + \")\";\n } else {\n return \"#\" + this.rgb.map(function (i) {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? \"0\" + i : i;\n }).join(\"\");\n }\n },\n\n toHSL: function toHSL() {\n var r = this.rgb[0] / 255;\n var g = this.rgb[1] / 255;\n var b = this.rgb[2] / 255;\n var a = this.alpha;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n var d = max - min;\n\n if (max === min) {\n h = s = 0;\n } else {\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h * 360, s: s, l: l, a: a };\n },\n\n toARGB: function toARGB() {\n var argb = [Math.round(this.alpha * 255)].concat(this.rgb);\n return \"#\" + argb.map(function (i) {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? \"0\" + i : i;\n }).join(\"\");\n },\n\n mix: function mix(color2, weight) {\n var color1 = this;\n\n var p = weight; // .value / 100.0;\n var w = p * 2 - 1;\n var a = color1.toHSL().a - color2.toHSL().a;\n\n var w1 = ((w * a == -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n var w2 = 1 - w1;\n\n var rgb = [color1.rgb[0] * w1 + color2.rgb[0] * w2, color1.rgb[1] * w1 + color2.rgb[1] * w2, color1.rgb[2] * w1 + color2.rgb[2] * w2];\n\n var alpha = color1.alpha * p + color2.alpha * (1 - p);\n\n return new Color(rgb, alpha);\n }\n};\n\n// End colors from less.js\n\nvar LinearRamp = function LinearRamp(start_color, end_color, start_value, end_value) {\n /**\n * Simple linear gradient\n */\n this.start_color = new Color(start_color);\n this.end_color = new Color(end_color);\n this.start_value = start_value;\n this.end_value = end_value;\n this.value_range = end_value - start_value;\n};\n\nLinearRamp.prototype.map_value = function (value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n value = (value - this.start_value) / this.value_range;\n // HACK: just red for now\n // return \"hsl(0,100%,\" + (value * 100) + \"%)\"\n return this.start_color.mix(this.end_color, 1 - value).toCSS();\n};\n\nvar SplitRamp = function SplitRamp(start_color, middle_color, end_color, start_value, end_value) {\n /**\n * Two gradients split away from 0\n */\n this.positive_ramp = new LinearRamp(middle_color, end_color, 0, end_value);\n this.negative_ramp = new LinearRamp(middle_color, start_color, 0, -start_value);\n this.start_value = start_value;\n this.end_value = end_value;\n};\n\nSplitRamp.prototype.map_value = function (value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n if (value >= 0) {\n return this.positive_ramp.map_value(value);\n } else {\n return this.negative_ramp.map_value(-value);\n }\n};\n\nvar DiagonalHeatmapPainter = function DiagonalHeatmapPainter(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n var i;\n var len;\n\n if (this.prefs.min_value === undefined) {\n var min_value = Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n min_value = Math.min(min_value, this.data[i][6]);\n }\n this.prefs.min_value = min_value;\n }\n if (this.prefs.max_value === undefined) {\n var max_value = -Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n max_value = Math.max(max_value, this.data[i][6]);\n }\n this.prefs.max_value = max_value;\n }\n};\n\nDiagonalHeatmapPainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Heatmap\",\n pos_color: \"#FF8C00\",\n neg_color: \"#4169E1\"\n};\n\nDiagonalHeatmapPainter.prototype.draw = function (ctx, width, height, w_scale) {\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var value_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n var invsqrt2 = 1 / Math.sqrt(2);\n\n var ramp = new SplitRamp(this.prefs.neg_color, \"#FFFFFF\", this.prefs.pos_color, min_value, max_value);\n\n var d;\n var s1;\n var e1;\n var s2;\n var e2;\n var value;\n\n var scale = function scale(p) {\n return (p - view_start) * w_scale;\n };\n\n ctx.save();\n\n // Draw into triangle, then rotate and scale\n ctx.rotate(-45 * Math.PI / 180);\n ctx.scale(invsqrt2, invsqrt2);\n\n // Paint track.\n for (var i = 0, len = data.length; i < len; i++) {\n d = data[i];\n\n s1 = scale(d[1]);\n e1 = scale(d[2]);\n s2 = scale(d[4]);\n e2 = scale(d[5]);\n value = d[6];\n\n ctx.fillStyle = ramp.map_value(value);\n ctx.fillRect(s1, s2, e1 - s1, e2 - s2);\n }\n\n ctx.restore();\n};\n\n/**\n * Utilities for painting reads.\n */\nvar ReadPainterUtils = function ReadPainterUtils(ctx, row_height, px_per_base, mode) {\n this.ctx = ctx;\n this.row_height = row_height;\n this.px_per_base = px_per_base;\n this.draw_details = (mode === \"Pack\" || mode === \"Auto\") && px_per_base >= ctx.canvas.manager.char_width_px;\n this.delete_details_thickness = 0.2;\n};\n\n_.extend(ReadPainterUtils.prototype, {\n /**\n * Draw deletion of base(s).\n * @param draw_detail if true, drawing in detail and deletion is drawn more subtly\n */\n draw_deletion: function draw_deletion(x, y, len) {\n this.ctx.fillStyle = \"black\";\n var thickness = (this.draw_details ? this.delete_details_thickness : 1) * this.row_height;\n y += 0.5 * (this.row_height - thickness);\n this.ctx.fillRect(x, y, len * this.px_per_base, thickness);\n }\n});\n\n/**\n * Paints variant data onto canvas.\n */\nvar VariantPainter = function VariantPainter(data, view_start, view_end, prefs, mode, base_color_fn) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.base_color_fn = base_color_fn;\n this.divider_height = 1;\n};\n\n_.extend(VariantPainter.prototype, Painter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function get_row_height() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Returns required height to draw a particular number of samples in a given mode.\n */\n get_required_height: function get_required_height(num_samples) {\n // FIXME: for single-sample data, height should be summary_height when zoomed out and\n // row_height when zoomed in.\n var height = this.prefs.summary_height;\n\n // If showing sample data, height is summary + divider + samples.\n if (num_samples > 1 && this.prefs.show_sample_data) {\n height += this.divider_height + num_samples * this.get_row_height();\n }\n return height;\n },\n\n /**\n * Draw on the context using a rectangle of width x height with scale w_scale.\n */\n draw: function draw(ctx, width, height, w_scale) {\n ctx.save();\n\n var /**\n * Returns dictionary of information about an indel; returns empty if there no indel. Assumes indel is left-aligned.\n * Dict attributes:\n * -type: 'insertion' or 'deletion'\n * -start: where the deletion starts relative to reference start\n * -len: how long the deletion is\n */\n get_indel_info = function get_indel_info(ref, alt) {\n var ref_len = ref.length;\n var alt_len = alt.length;\n var start = 0;\n var len = 1;\n var type = null;\n if (alt === \"-\") {\n type = \"deletion\";\n len = ref.length;\n } else if (ref.indexOf(alt) === 0 && ref_len > alt_len) {\n type = \"deletion\";\n len = ref_len - alt_len;\n start = alt_len;\n } else if (alt.indexOf(ref) === 0 && ref_len < alt_len) {\n // Insertion.\n type = \"insertion\";\n len = alt_len - ref_len;\n start = alt_len;\n }\n\n return type !== null ? { type: type, start: start, len: len } : {};\n };\n\n // Draw.\n var locus_data;\n\n var pos;\n var id;\n var ref;\n var alt;\n var qual;\n var filter;\n var sample_gts;\n var allele_counts;\n var variant;\n var draw_x_start;\n var draw_y_start;\n var genotype;\n\n var // Always draw variants at least 1 pixel wide.\n base_px = Math.max(1, Math.floor(w_scale));\n\n var // Determine number of samples.\n num_samples = this.data.length ? this.data[0][7].split(\",\").length : 0;\n\n var row_height = this.mode === \"Squish\" ? SQUISH_TRACK_HEIGHT : PACK_TRACK_HEIGHT;\n\n var // If zoomed out, fill the whole row with feature to make it easier to read;\n // when zoomed in, use feature height so that there are gaps in sample rows.\n feature_height = w_scale < 0.1 ? row_height : this.mode === \"Squish\" ? SQUISH_FEATURE_HEIGHT : PACK_FEATURE_HEIGHT;\n\n var draw_summary = true;\n\n var paint_utils = new ReadPainterUtils(ctx, row_height, w_scale, this.mode);\n\n var j;\n\n // If there's a single sample, update drawing variables.\n if (num_samples === 1) {\n row_height = feature_height = w_scale < ctx.canvas.manager.char_width_px ? this.prefs.summary_height : row_height;\n paint_utils.row_height = row_height;\n // No summary when there's a single sample.\n draw_summary = false;\n }\n\n // Draw divider between summary and samples.\n if (this.prefs.show_sample_data && draw_summary) {\n ctx.fillStyle = \"#F3F3F3\";\n ctx.globalAlpha = 1;\n ctx.fillRect(0, this.prefs.summary_height - this.divider_height, width, this.divider_height);\n }\n\n // Draw variants.\n ctx.textAlign = \"center\";\n for (var i = 0; i < this.data.length; i++) {\n // Get locus data.\n locus_data = this.data[i];\n pos = locus_data[1];\n ref = locus_data[3];\n alt = [locus_data[4].split(\",\")];\n sample_gts = locus_data[7].split(\",\");\n allele_counts = locus_data.slice(8);\n\n // Process alterate values to derive information about each alt.\n alt = _.map(_.flatten(alt), function (a) {\n var alt_info = {\n type: \"snp\",\n value: a,\n start: 0\n };\n\n var indel_info = get_indel_info(ref, a);\n\n return _.extend(alt_info, indel_info);\n });\n\n // Only draw locus data if it's in viewing region.\n if (pos < this.view_start || pos > this.view_end) {\n continue;\n }\n\n // Draw summary for alleles.\n if (draw_summary) {\n ctx.fillStyle = \"#999999\";\n ctx.globalAlpha = 1;\n for (j = 0; j < alt.length; j++) {\n // Draw background for summary.\n draw_x_start = this.get_start_draw_pos(pos + alt[j].start, w_scale);\n ctx.fillRect(draw_x_start, 0, base_px, this.prefs.summary_height);\n draw_y_start = this.prefs.summary_height;\n // Draw allele fractions onto summary.\n for (j = 0; j < alt.length; j++) {\n ctx.fillStyle = alt[j].type === \"deletion\" ? \"black\" : this.base_color_fn(alt[j].value);\n var allele_frac = allele_counts / sample_gts.length;\n var draw_height = Math.ceil(this.prefs.summary_height * allele_frac);\n ctx.fillRect(draw_x_start, draw_y_start - draw_height, base_px, draw_height);\n draw_y_start -= draw_height;\n }\n }\n }\n\n // Done drawing if not showing samples data.\n if (!this.prefs.show_sample_data) {\n continue;\n }\n\n // Draw sample genotype(s).\n draw_y_start = draw_summary ? this.prefs.summary_height + this.divider_height : 0;\n for (j = 0; j < sample_gts.length; j++, draw_y_start += row_height) {\n genotype = sample_gts[j] ? sample_gts[j].split(/\\/|\\|/) : [\"0\", \"0\"];\n\n // Get variant to draw and set drawing properties.\n variant = null;\n if (genotype[0] === genotype[1]) {\n if (genotype[0] === \".\") {\n // TODO: draw uncalled variant.\n } else if (genotype[0] !== \"0\") {\n // Homozygous for variant.\n variant = alt[parseInt(genotype[0], 10) - 1];\n ctx.globalAlpha = 1;\n }\n // else reference\n } else {\n // Heterozygous for variant.\n variant = genotype[0] !== \"0\" ? genotype[0] : genotype[1];\n variant = alt[parseInt(variant, 10) - 1];\n ctx.globalAlpha = 0.5;\n }\n\n // If there's a variant, draw it.\n if (variant) {\n draw_x_start = this.get_start_draw_pos(pos + variant.start, w_scale);\n if (variant.type === \"snp\") {\n var snp = variant.value;\n ctx.fillStyle = this.base_color_fn(snp);\n if (paint_utils.draw_details) {\n ctx.fillText(snp, this.get_draw_pos(pos, w_scale), draw_y_start + row_height);\n } else {\n ctx.fillRect(draw_x_start, draw_y_start + 1, base_px, feature_height);\n }\n } else if (variant.type === \"deletion\") {\n paint_utils.draw_deletion(draw_x_start, draw_y_start + 1, variant.len);\n } else {\n // TODO: handle insertions.\n }\n }\n }\n }\n\n ctx.restore();\n }\n});\n\nexports.default = {\n Scaler: Scaler,\n LinePainter: LinePainter,\n LinkedFeaturePainter: LinkedFeaturePainter,\n ReadPainter: ReadPainter,\n ArcLinkedFeaturePainter: ArcLinkedFeaturePainter,\n DiagonalHeatmapPainter: DiagonalHeatmapPainter,\n VariantPainter: VariantPainter\n};\n\n/***/ }),\n/* 118 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _underscore = __webpack_require__(1);\n\nvar _ = _interopRequireWildcard(_underscore);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar extend = _.extend;\n\n/**\n * Filters that enable users to show/hide data points dynamically.\n */\nvar Filter = function Filter(obj_dict) {\n this.manager = null;\n this.name = obj_dict.name;\n // Index into payload to filter.\n this.index = obj_dict.index;\n this.tool_id = obj_dict.tool_id;\n // Name to use for filter when building expression for tool.\n this.tool_exp_name = obj_dict.tool_exp_name;\n};\n\nextend(Filter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function to_dict() {\n return {\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n };\n }\n});\n\n/**\n * Creates an action icon.\n */\nvar create_action_icon = function create_action_icon(title, css_class, on_click_fn) {\n return $(\"\").attr(\"href\", \"javascript:void(0);\").attr(\"title\", title).addClass(\"icon-button\").addClass(css_class).tooltip().click(on_click_fn);\n};\n\n/**\n * Number filters have a min, max as well as a low, high; low and high are used\n */\nvar NumberFilter = function NumberFilter(obj_dict) {\n //\n // Attribute init.\n //\n Filter.call(this, obj_dict);\n // Filter low/high. These values are used to filter elements.\n this.low = \"low\" in obj_dict ? obj_dict.low : -Number.MAX_VALUE;\n this.high = \"high\" in obj_dict ? obj_dict.high : Number.MAX_VALUE;\n // Slide min/max. These values are used to set/update slider.\n this.min = \"min\" in obj_dict ? obj_dict.min : Number.MAX_VALUE;\n this.max = \"max\" in obj_dict ? obj_dict.max : -Number.MAX_VALUE;\n // UI elements associated with filter.\n this.container = null;\n this.slider = null;\n this.slider_label = null;\n\n //\n // Create HTML.\n //\n\n // Function that supports inline text editing of slider values.\n // Enable users to edit parameter's value via a text box.\n var edit_slider_values = function edit_slider_values(container, span, slider) {\n container.click(function () {\n var cur_value = span.text();\n var max = parseFloat(slider.slider(\"option\", \"max\"));\n\n var input_size = max <= 1 ? 4 : max <= 1000000 ? max.toString().length : 6;\n\n var multi_value = false;\n var slider_row = $(this).parents(\".slider-row\");\n\n // Row now has input.\n slider_row.addClass(\"input\");\n\n // Increase input size if there are two values.\n if (slider.slider(\"option\", \"values\")) {\n input_size = 2 * input_size + 1;\n multi_value = true;\n }\n span.text(\"\");\n // Temporary input for changing value.\n $(\"\").attr(\"size\", input_size).attr(\"maxlength\", input_size).attr(\"value\", cur_value).appendTo(span).focus().select().click(function (e) {\n // Don't want click to propogate up to values_span and restart everything.\n e.stopPropagation();\n }).blur(function () {\n $(this).remove();\n span.text(cur_value);\n slider_row.removeClass(\"input\");\n }).keyup(function (e) {\n if (e.keyCode === 27) {\n // Escape key.\n $(this).trigger(\"blur\");\n } else if (e.keyCode === 13) {\n //\n // Enter/return key initiates callback. If new value(s) are in slider range,\n // change value (which calls slider's change() function).\n //\n var slider_min = slider.slider(\"option\", \"min\");\n\n var slider_max = slider.slider(\"option\", \"max\");\n\n var invalid = function invalid(a_val) {\n return isNaN(a_val) || a_val > slider_max || a_val < slider_min;\n };\n\n var new_value = $(this).val();\n if (!multi_value) {\n new_value = parseFloat(new_value);\n if (invalid(new_value)) {\n alert(\"Parameter value must be in the range [\" + slider_min + \"-\" + slider_max + \"]\");\n return $(this);\n }\n } else {\n // Multi value.\n new_value = new_value.split(\"-\");\n new_value = [parseFloat(new_value[0]), parseFloat(new_value[1])];\n if (invalid(new_value[0]) || invalid(new_value[1])) {\n alert(\"Parameter value must be in the range [\" + slider_min + \"-\" + slider_max + \"]\");\n return $(this);\n }\n }\n\n // Updating the slider also updates slider values and removes input.\n slider.slider(multi_value ? \"values\" : \"value\", new_value);\n slider_row.removeClass(\"input\");\n }\n });\n });\n };\n\n var filter = this;\n\n filter.parent_div = $(\"
\").addClass(\"filter-row slider-row\");\n\n // Set up filter label (name, values).\n var filter_label = $(\"
\").addClass(\"elt-label\").appendTo(filter.parent_div);\n\n var name_span = $(\"\").addClass(\"slider-name\").text(filter.name + \" \").appendTo(filter_label);\n\n var values_span = $(\"\").text(this.low + \"-\" + this.high);\n\n var values_span_container = $(\"\").addClass(\"slider-value\").appendTo(filter_label).append(\"[\").append(values_span).append(\"]\");\n\n filter.values_span = values_span;\n\n // Set up slider for filter.\n var slider_div = $(\"
\").addClass(\"slider\").appendTo(filter.parent_div);\n filter.control_element = $(\"
\").attr(\"id\", filter.name + \"-filter-control\").appendTo(slider_div);\n filter.control_element.slider({\n range: true,\n min: this.min,\n max: this.max,\n step: this.get_slider_step(this.min, this.max),\n values: [this.low, this.high],\n slide: function slide(event, ui) {\n filter.slide(event, ui);\n },\n change: function change(event, ui) {\n filter.control_element.slider(\"option\", \"slide\").call(filter.control_element, event, ui);\n }\n });\n filter.slider = filter.control_element;\n filter.slider_label = values_span;\n\n // Enable users to edit slider values via text box.\n edit_slider_values(values_span_container, values_span, filter.control_element);\n\n // Set up filter display controls.\n var display_controls_div = $(\"
\").addClass(\"display-controls\").appendTo(filter.parent_div);\n this.transparency_icon = create_action_icon(\"Use filter for data transparency\", \"layer-transparent\", function () {\n if (filter.manager.alpha_filter !== filter) {\n // Setting this filter as the alpha filter.\n filter.manager.alpha_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div.find(\".layer-transparent\").removeClass(\"active\").hide();\n filter.transparency_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.alpha_filter = null;\n filter.transparency_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }).appendTo(display_controls_div).hide();\n this.height_icon = create_action_icon(\"Use filter for data height\", \"arrow-resize-090\", function () {\n if (filter.manager.height_filter !== filter) {\n // Setting this filter as the height filter.\n filter.manager.height_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div.find(\".arrow-resize-090\").removeClass(\"active\").hide();\n filter.height_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.height_filter = null;\n filter.height_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }).appendTo(display_controls_div).hide();\n filter.parent_div.hover(function () {\n filter.transparency_icon.show();\n filter.height_icon.show();\n }, function () {\n if (filter.manager.alpha_filter !== filter) {\n filter.transparency_icon.hide();\n }\n if (filter.manager.height_filter !== filter) {\n filter.height_icon.hide();\n }\n });\n\n // Add to clear floating layout.\n $(\"
\").appendTo(filter.parent_div);\n};\nextend(NumberFilter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function to_dict() {\n var obj_dict = Filter.prototype.to_dict.call(this);\n return extend(obj_dict, {\n type: \"number\",\n min: this.min,\n max: this.max,\n low: this.low,\n high: this.high\n });\n },\n /**\n * Return a copy of filter.\n */\n copy: function copy() {\n return new NumberFilter({\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n });\n },\n /**\n * Get step for slider.\n */\n // FIXME: make this a \"static\" function.\n get_slider_step: function get_slider_step(min, max) {\n var range = max - min;\n return range <= 2 ? 0.01 : 1;\n },\n /**\n * Handle slide events.\n */\n slide: function slide(event, ui) {\n var values = ui.values;\n\n // Set new values in UI.\n this.values_span.text(values[0] + \"-\" + values[1]);\n\n // Set new values in filter.\n this.low = values[0];\n this.high = values[1];\n\n // Set timeout to update if filter low, high are stable.\n var self = this;\n setTimeout(function () {\n if (values[0] === self.low && values[1] === self.high) {\n self.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }\n }, 25);\n },\n /**\n * Returns true if filter can be applied to element.\n */\n applies_to: function applies_to(element) {\n if (element.length > this.index) {\n return true;\n }\n return false;\n },\n /**\n * Helper function: returns true if value in in filter's [low, high] range.\n */\n _keep_val: function _keep_val(val) {\n return isNaN(val) || val >= this.low && val <= this.high;\n },\n /**\n * Returns true if (a) element's value(s) is in [low, high] (range is inclusive)\n * or (b) if value is non-numeric and hence unfilterable.\n */\n keep: function keep(element) {\n if (!this.applies_to(element)) {\n // No element to filter on.\n return true;\n }\n\n // Keep value function.\n var filter = this;\n\n // Do filtering.\n var to_filter = element[this.index];\n if (to_filter instanceof Array) {\n var returnVal = true;\n for (var i = 0; i < to_filter.length; i++) {\n if (!this._keep_val(to_filter[i])) {\n // Exclude element.\n returnVal = false;\n break;\n }\n }\n return returnVal;\n } else {\n return this._keep_val(element[this.index]);\n }\n },\n /**\n * Update filter's min and max values based on element's values.\n */\n update_attrs: function update_attrs(element) {\n var updated = false;\n if (!this.applies_to(element)) {\n return updated;\n }\n\n //\n // Update filter's min, max based on element values.\n //\n\n // Make value(s) into an Array.\n var values = element[this.index];\n if (!(values instanceof Array)) {\n values = [values];\n }\n\n // Loop through values and update min, max.\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n if (value < this.min) {\n this.min = Math.floor(value);\n updated = true;\n }\n if (value > this.max) {\n this.max = Math.ceil(value);\n updated = true;\n }\n }\n return updated;\n },\n /**\n * Update filter's slider.\n */\n update_ui_elt: function update_ui_elt() {\n // Only show filter if min < max because filter is not useful otherwise. This\n // covers all corner cases, such as when min, max have not been defined and\n // when min == max.\n if (this.min < this.max) {\n this.parent_div.show();\n } else {\n this.parent_div.hide();\n }\n\n var slider_min = this.slider.slider(\"option\", \"min\");\n var slider_max = this.slider.slider(\"option\", \"max\");\n if (this.min < slider_min || this.max > slider_max) {\n // Update slider min, max, step.\n this.slider.slider(\"option\", \"min\", this.min);\n this.slider.slider(\"option\", \"max\", this.max);\n this.slider.slider(\"option\", \"step\", this.get_slider_step(this.min, this.max));\n // Refresh slider:\n // TODO: do we want to keep current values or reset to min/max?\n // Currently we reset values:\n this.slider.slider(\"option\", \"values\", [this.min, this.max]);\n // To use the current values.\n //var values = this.slider.slider( \"option\", \"values\" );\n //this.slider.slider( \"option\", \"values\", values );\n }\n }\n});\n\n/**\n * Manages a set of filters.\n */\nvar FiltersManager = function FiltersManager(track, obj_dict) {\n this.track = track;\n this.alpha_filter = null;\n this.height_filter = null;\n this.filters = [];\n\n //\n // Create HTML.\n //\n\n //\n // Create parent div.\n //\n this.parent_div = $(\"
\").addClass(\"filters\").hide();\n // Disable dragging, double clicking, keys on div so that actions on slider do not impact viz.\n this.parent_div.bind(\"drag\", function (e) {\n e.stopPropagation();\n }).click(function (e) {\n e.stopPropagation();\n }).bind(\"dblclick\", function (e) {\n e.stopPropagation();\n }).bind(\"keydown\", function (e) {\n e.stopPropagation();\n });\n\n //\n // Restore state from dict.\n //\n if (obj_dict && \"filters\" in obj_dict) {\n // Second condition needed for backward compatibility.\n var alpha_filter_name = \"alpha_filter\" in obj_dict ? obj_dict.alpha_filter : null;\n\n var height_filter_name = \"height_filter\" in obj_dict ? obj_dict.height_filter : null;\n\n var filters_dict = obj_dict.filters;\n var filter;\n for (var i = 0; i < filters_dict.length; i++) {\n if (filters_dict[i].type === \"number\") {\n filter = new NumberFilter(filters_dict[i]);\n this.add_filter(filter);\n if (filter.name === alpha_filter_name) {\n this.alpha_filter = filter;\n filter.transparency_icon.addClass(\"active\").show();\n }\n if (filter.name === height_filter_name) {\n this.height_filter = filter;\n filter.height_icon.addClass(\"active\").show();\n }\n } else {\n console.log(\"ERROR: unsupported filter: \", name, type);\n }\n }\n\n if (\"visible\" in obj_dict && obj_dict.visible) {\n this.parent_div.show();\n }\n }\n\n // Add button to filter complete dataset.\n if (this.filters.length !== 0) {\n var run_buttons_row = $(\"
\").addClass(\"param-row\").appendTo(this.parent_div);\n var run_on_dataset_button = $(\"\").attr(\"value\", \"Run on complete dataset\").appendTo(run_buttons_row);\n var filter_manager = this;\n run_on_dataset_button.click(function () {\n filter_manager.run_on_dataset();\n });\n }\n};\n\nextend(FiltersManager.prototype, {\n // HTML manipulation and inspection.\n show: function show() {\n this.parent_div.show();\n },\n hide: function hide() {\n this.parent_div.hide();\n },\n toggle: function toggle() {\n this.parent_div.toggle();\n },\n visible: function visible() {\n return this.parent_div.is(\":visible\");\n },\n /**\n * Returns dictionary for manager.\n */\n to_dict: function to_dict() {\n var obj_dict = {};\n var filter_dicts = [];\n var filter;\n\n // Include individual filter states.\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n filter_dicts.push(filter.to_dict());\n }\n obj_dict.filters = filter_dicts;\n\n // Include transparency, height filters.\n obj_dict.alpha_filter = this.alpha_filter ? this.alpha_filter.name : null;\n obj_dict.height_filter = this.height_filter ? this.height_filter.name : null;\n\n // Include visibility.\n obj_dict.visible = this.parent_div.is(\":visible\");\n\n return obj_dict;\n },\n /**\n * Return a copy of the manager.\n */\n copy: function copy(new_track) {\n var copy = new FiltersManager(new_track);\n for (var i = 0; i < this.filters.length; i++) {\n copy.add_filter(this.filters[i].copy());\n }\n return copy;\n },\n /**\n * Add a filter to the manager.\n */\n add_filter: function add_filter(filter) {\n filter.manager = this;\n this.parent_div.append(filter.parent_div);\n this.filters.push(filter);\n },\n /**\n * Remove all filters from manager.\n */\n remove_all: function remove_all() {\n this.filters = [];\n this.parent_div.children().remove();\n },\n /**\n * Initialize filters.\n */\n\n init_filters: function init_filters() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.update_ui_elt();\n }\n },\n /**\n * Clear filters so that they do not impact track display.\n */\n clear_filters: function clear_filters() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.slider.slider(\"option\", \"values\", [filter.min, filter.max]);\n }\n this.alpha_filter = null;\n this.height_filter = null;\n\n // Hide icons for setting filters.\n this.parent_div.find(\".icon-button\").hide();\n },\n run_on_dataset: function run_on_dataset() {\n // Get or create dictionary item.\n var get_or_create_dict_item = function get_or_create_dict_item(dict, key, new_item) {\n // Add new item to dict if\n if (!(key in dict)) {\n dict[key] = new_item;\n }\n return dict[key];\n };\n\n //\n // Find and group active filters. Active filters are those being used to hide data.\n // Filters with the same tool id are grouped.\n //\n var active_filters = {};\n\n var filter;\n var tool_filter_conditions;\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n if (filter.tool_id) {\n // Add filtering conditions if filter low/high are set.\n if (filter.min !== filter.low) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + \" >= \" + filter.low;\n }\n if (filter.max !== filter.high) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = filter.tool_exp_name + \" <= \" + filter.high;\n }\n }\n }\n\n //\n // Use tools to run filters.\n //\n\n // Create list of (tool_id, tool_filters) tuples.\n var active_filters_list = [];\n for (var tool_id in active_filters) {\n active_filters_list[active_filters_list.length] = [tool_id, active_filters[tool_id]];\n }\n\n // Invoke recursive function to run filters; this enables chaining of filters via\n // iteratively application.\n (function run_filter(input_dataset_id, filters) {\n var // Set up filtering info and params.\n filter_tuple = filters[0];\n\n var tool_id = filter_tuple[0];\n var tool_filters = filter_tuple[1];\n var tool_filter_str = \"(\" + tool_filters.join(\") and (\") + \")\";\n\n var url_params = {\n cond: tool_filter_str,\n input: input_dataset_id,\n target_dataset_id: input_dataset_id,\n tool_id: tool_id\n };\n\n // Remove current filter.\n filters = filters.slice(1);\n\n $.getJSON(run_tool_url, url_params, function (response) {\n if (response.error) {\n // General error.\n Galaxy.modal.show({\n title: \"Filter Dataset\",\n body: \"Error running tool \" + tool_id,\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else if (filters.length === 0) {\n // No more filters to run.\n Galaxy.modal.show({\n title: \"Filtering Dataset\",\n body: \"Filter(s) are running on the complete dataset. Outputs are in dataset's history.\",\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else {\n // More filters to run.\n run_filter(response.dataset_id, filters);\n }\n });\n })(this.track.dataset_id, active_filters_list);\n }\n});\n\nexports.default = {\n FiltersManager: FiltersManager,\n NumberFilter: NumberFilter\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 119 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiPortlet = __webpack_require__(21);\n\nvar _uiPortlet2 = _interopRequireDefault(_uiPortlet);\n\nvar _formRepeat = __webpack_require__(120);\n\nvar _formRepeat2 = _interopRequireDefault(_formRepeat);\n\nvar _formInput = __webpack_require__(121);\n\nvar _formInput2 = _interopRequireDefault(_formInput);\n\nvar _formParameters = __webpack_require__(122);\n\nvar _formParameters2 = _interopRequireDefault(_formParameters);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n This class creates a form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.\n*/\nvar View = Backbone.View.extend({\n initialize: function initialize(app, options) {\n this.app = app;\n this.inputs = options.inputs;\n this.parameters = new _formParameters2.default();\n this.setElement($(\"
\"));\n this.render();\n },\n\n /** Render section view */\n render: function render() {\n var self = this;\n this.$el.empty();\n _.each(this.inputs, function (input) {\n self.add(input);\n });\n },\n\n /** Add a new input element */\n add: function add(input) {\n var input_def = jQuery.extend(true, {}, input);\n input_def.id = input.id = _utils2.default.uid();\n this.app.input_list[input_def.id] = input_def;\n switch (input_def.type) {\n case \"conditional\":\n this._addConditional(input_def);\n break;\n case \"repeat\":\n this._addRepeat(input_def);\n break;\n case \"section\":\n this._addSection(input_def);\n break;\n default:\n this._addRow(input_def);\n }\n },\n\n /** Add a conditional block */\n _addConditional: function _addConditional(input_def) {\n var self = this;\n input_def.test_param.id = input_def.id;\n this.app.model.get(\"sustain_conditionals\") && (input_def.test_param.disabled = true);\n var field = this._addRow(input_def.test_param);\n\n // set onchange event for test parameter\n field.model && field.model.set(\"onchange\", function (value) {\n var selectedCase = self.app.data.matchCase(input_def, value);\n for (var i in input_def.cases) {\n var case_def = input_def.cases[i];\n var section_row = self.$(\"#\" + input_def.id + \"-section-\" + i);\n var nonhidden = false;\n for (var j in case_def.inputs) {\n if (!case_def.inputs[j].hidden) {\n nonhidden = true;\n break;\n }\n }\n if (i == selectedCase && nonhidden) {\n section_row.fadeIn(\"fast\");\n } else {\n section_row.hide();\n }\n }\n self.app.trigger(\"change\");\n });\n\n // add conditional sub sections\n for (var i in input_def.cases) {\n var sub_section = new View(this.app, {\n inputs: input_def.cases[i].inputs\n });\n this._append(sub_section.$el.addClass(\"ui-form-section\"), input_def.id + \"-section-\" + i);\n }\n\n // trigger refresh on conditional input field after all input elements have been created\n field.trigger(\"change\");\n },\n\n /** Add a repeat block */\n _addRepeat: function _addRepeat(input_def) {\n var self = this;\n var block_index = 0;\n\n // create repeat block element\n var repeat = new _formRepeat2.default.View({\n title: input_def.title || \"Repeat\",\n min: input_def.min,\n max: input_def.max,\n onnew: function onnew() {\n create(input_def.inputs);\n self.app.trigger(\"change\");\n }\n });\n\n // helper function to create new repeat blocks\n function create(inputs) {\n var sub_section_id = input_def.id + \"-section-\" + block_index++;\n var sub_section = new View(self.app, { inputs: inputs });\n repeat.add({\n id: sub_section_id,\n $el: sub_section.$el,\n ondel: function ondel() {\n repeat.del(sub_section_id);\n self.app.trigger(\"change\");\n }\n });\n }\n\n //\n // add parsed/minimum number of repeat blocks\n //\n var n_cache = _.size(input_def.cache);\n for (var i = 0; i < Math.max(Math.max(n_cache, input_def.min || 0), input_def.default || 0); i++) {\n create(i < n_cache ? input_def.cache[i] : input_def.inputs);\n }\n\n // hide options\n this.app.model.get(\"sustain_repeats\") && repeat.hideOptions();\n\n // create input field wrapper\n var input_element = new _formInput2.default(this.app, {\n label: input_def.title || input_def.name,\n help: input_def.help,\n field: repeat\n });\n this._append(input_element.$el, input_def.id);\n },\n\n /** Add a customized section */\n _addSection: function _addSection(input_def) {\n var portlet = new _uiPortlet2.default.View({\n title: input_def.title || input_def.name,\n cls: \"ui-portlet-section\",\n collapsible: true,\n collapsible_button: true,\n collapsed: !input_def.expanded\n });\n portlet.append(new View(this.app, { inputs: input_def.inputs }).$el);\n portlet.append($(\"
\").addClass(\"ui-form-info\").html(input_def.help));\n this.app.on(\"expand\", function (input_id) {\n portlet.$(\"#\" + input_id).length > 0 && portlet.expand();\n });\n this._append(portlet.$el, input_def.id);\n },\n\n /** Add a single input field element */\n _addRow: function _addRow(input_def) {\n var self = this;\n var id = input_def.id;\n input_def.onchange = input_def.onchange || function () {\n self.app.trigger(\"change\", id);\n };\n var field = this.parameters.create(input_def);\n this.app.field_list[id] = field;\n var input_element = new _formInput2.default(this.app, {\n name: input_def.name,\n label: input_def.hide_label ? \"\" : input_def.label || input_def.name,\n value: input_def.value,\n text_value: input_def.text_value,\n collapsible_value: input_def.collapsible_value,\n collapsible_preview: input_def.collapsible_preview,\n help: input_def.help,\n argument: input_def.argument,\n disabled: input_def.disabled,\n color: input_def.color,\n style: input_def.style,\n backdrop: input_def.backdrop,\n hidden: input_def.hidden,\n fixed: input_def.fixed,\n field: field\n });\n this.app.element_list[id] = input_element;\n this._append(input_element.$el, input_def.id);\n return field;\n },\n\n /** Append a new element to the form i.e. input element, repeat block, conditionals etc. */\n _append: function _append($el, id) {\n this.$el.append($el.addClass(\"section-row\").attr(\"id\", id));\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 120 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiPortlet = __webpack_require__(21);\n\nvar _uiPortlet2 = _interopRequireDefault(_uiPortlet);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n this.list = {};\n this.options = _utils2.default.merge(options, {\n title: \"Repeat\",\n empty_text: \"Not available.\",\n max: null,\n min: null\n });\n this.button_new = new _uiMisc2.default.ButtonIcon({\n icon: \"fa-plus\",\n title: \"Insert \" + this.options.title,\n tooltip: \"Add new \" + this.options.title + \" block\",\n cls: \"ui-button-icon ui-clear-float form-repeat-add\",\n onclick: function onclick() {\n options.onnew && options.onnew();\n }\n });\n this.setElement($(\"
\").append(this.$list = $(\"
\")).append($(\"
\").append(this.button_new.$el)));\n },\n\n /** Number of repeat blocks */\n size: function size() {\n return _.size(this.list);\n },\n\n /** Add new repeat block */\n add: function add(options) {\n if (!options.id || this.list[options.id]) {\n Galaxy.emit.debug(\"form-repeat::add()\", \"Duplicate or invalid repeat block id.\");\n return;\n }\n var button_delete = new _uiMisc2.default.ButtonIcon({\n icon: \"fa-trash-o\",\n tooltip: \"Delete this repeat block\",\n cls: \"ui-button-icon-plain form-repeat-delete\",\n onclick: function onclick() {\n options.ondel && options.ondel();\n }\n });\n var portlet = new _uiPortlet2.default.View({\n id: options.id,\n title: \"placeholder\",\n cls: options.cls || \"ui-portlet-repeat\",\n operations: { button_delete: button_delete }\n });\n portlet.append(options.$el);\n portlet.$el.addClass(\"section-row\").hide();\n this.list[options.id] = portlet;\n this.$list.append(portlet.$el.fadeIn(\"fast\"));\n this.options.max > 0 && this.size() >= this.options.max && this.button_new.disable();\n this._refresh();\n },\n\n /** Delete repeat block */\n del: function del(id) {\n if (!this.list[id]) {\n Galaxy.emit.debug(\"form-repeat::del()\", \"Invalid repeat block id.\");\n return;\n }\n this.$list.find(\"#\" + id).remove();\n delete this.list[id];\n this.button_new.enable();\n this._refresh();\n },\n\n /** Remove all */\n delAll: function delAll() {\n for (var id in this.list) {\n this.del(id);\n }\n },\n\n /** Hides add/del options */\n hideOptions: function hideOptions() {\n this.button_new.$el.hide();\n _.each(this.list, function (portlet) {\n portlet.hideOperation(\"button_delete\");\n });\n _.isEmpty(this.list) && this.$el.append($(\"
\").addClass(\"ui-form-info\").html(this.options.empty_text));\n },\n\n /** Refresh view */\n _refresh: function _refresh() {\n var index = 0;\n for (var id in this.list) {\n var portlet = this.list[id];\n portlet.title(++index + \": \" + this.options.title);\n portlet[this.size() > this.options.min ? \"showOperation\" : \"hideOperation\"](\"button_delete\");\n }\n }\n}); /** This class creates a ui component which enables the dynamic creation of portlets */\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 121 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/**\n This class creates a form input element wrapper\n*/\n\nexports.default = Backbone.View.extend({\n initialize: function initialize(app, options) {\n this.app = app;\n this.app_options = app.model ? app.model.attributes : {};\n this.field = options && options.field || new Backbone.View();\n this.model = options && options.model || new Backbone.Model({\n text_enable: this.app_options.text_enable || \"Enable\",\n text_disable: this.app_options.text_disable || \"Disable\",\n cls_enable: this.app_options.cls_enable || \"fa fa-caret-square-o-down\",\n cls_disable: this.app_options.cls_disable || \"fa fa-caret-square-o-up\",\n always_refresh: this.app_options.always_refresh\n }).set(options);\n\n // set element and link components\n this.setElement(this._template());\n this.$field = this.$(\".ui-form-field\");\n this.$info = this.$(\".ui-form-info\");\n this.$preview = this.$(\".ui-form-preview\");\n this.$collapsible = this.$(\".ui-form-collapsible\");\n this.$collapsible_text = this.$(\".ui-form-collapsible-text\");\n this.$collapsible_icon = this.$(\".ui-form-collapsible-icon\");\n this.$title = this.$(\".ui-form-title\");\n this.$title_text = this.$(\".ui-form-title-text\");\n this.$error_text = this.$(\".ui-form-error-text\");\n this.$error = this.$(\".ui-form-error\");\n this.$backdrop = this.$(\".ui-form-backdrop\");\n\n // add field element\n this.$field.prepend(this.field.$el);\n\n // decide wether to expand or collapse fields\n var collapsible_value = this.model.get(\"collapsible_value\");\n this.field.collapsed = collapsible_value !== undefined && JSON.stringify(this.model.get(\"value\")) == JSON.stringify(collapsible_value);\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n\n // add click handler\n var self = this;\n this.$collapsible.on(\"click\", function () {\n self.field.collapsed = !self.field.collapsed;\n app.trigger && app.trigger(\"change\");\n self.render();\n });\n\n // hide error on value change\n if (this.field.model && !this.model.get(\"always_refresh\")) {\n this.listenTo(this.field.model, \"change:value\", function () {\n self.reset();\n });\n }\n },\n\n /** Set backdrop for input element */\n backdrop: function backdrop() {\n this.model.set(\"backdrop\", true);\n },\n\n /** Set error text */\n error: function error(text) {\n this.model.set(\"error_text\", text);\n },\n\n /** Reset this view */\n reset: function reset() {\n !this.model.get(\"fixed\") && this.model.set(\"error_text\", null);\n },\n\n render: function render() {\n // render help\n $(\".tooltip\").hide();\n var help_text = this.model.get(\"help\", \"\");\n var help_argument = this.model.get(\"argument\");\n if (help_argument && help_text.indexOf(\"(\" + help_argument + \")\") == -1) {\n help_text += \" (\" + help_argument + \")\";\n }\n this.$info.html(help_text);\n // render visibility\n this.$el[this.model.get(\"hidden\") ? \"hide\" : \"show\"]();\n // render preview view for collapsed fields\n this.$preview[this.field.collapsed && this.model.get(\"collapsible_preview\") || this.model.get(\"disabled\") ? \"show\" : \"hide\"]().html(_.escape(this.model.get(\"text_value\")));\n // render error messages\n var error_text = this.model.get(\"error_text\");\n this.$error[error_text ? \"show\" : \"hide\"]();\n this.$el[error_text ? \"addClass\" : \"removeClass\"](\"ui-error\");\n this.$error_text.html(error_text);\n // render backdrop\n this.$backdrop[this.model.get(\"backdrop\") ? \"show\" : \"hide\"]();\n // render input field\n this.field.collapsed || this.model.get(\"disabled\") ? this.$field.hide() : this.$field.show();\n // render input field color and style\n this.field.model && this.field.model.set({\n color: this.model.get(\"color\"),\n style: this.model.get(\"style\")\n });\n // render collapsible options\n if (!this.model.get(\"disabled\") && this.model.get(\"collapsible_value\") !== undefined) {\n var collapsible_state = this.field.collapsed ? \"enable\" : \"disable\";\n this.$title_text.hide();\n this.$collapsible.show();\n this.$collapsible_text.text(this.model.get(\"label\"));\n this.$collapsible_icon.removeClass().addClass(\"icon\").addClass(this.model.get(\"cls_\" + collapsible_state)).attr(\"data-original-title\", this.model.get(\"text_\" + collapsible_state)).tooltip({ placement: \"bottom\" });\n } else {\n this.$title_text.show().text(this.model.get(\"label\"));\n this.$collapsible.hide();\n }\n },\n\n _template: function _template() {\n return $(\"
\").addClass(\"ui-form-element\").append($(\"
\").addClass(\"ui-form-error ui-error\").append($(\"\").addClass(\"fa fa-arrow-down\")).append($(\"\").addClass(\"ui-form-error-text\"))).append($(\"
\").addClass(\"ui-form-title\").append($(\"
\").addClass(\"ui-form-collapsible\").append($(\"\").addClass(\"ui-form-collapsible-icon\")).append($(\"\").addClass(\"ui-form-collapsible-text\"))).append($(\"\").addClass(\"ui-form-title-text\"))).append($(\"
\").addClass(\"ui-form-field\").append($(\"\").addClass(\"ui-form-info\")).append($(\"
\").addClass(\"ui-form-backdrop\"))).append($(\"
\").addClass(\"ui-form-preview\"));\n }\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 122 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiSelectContent = __webpack_require__(123);\n\nvar _uiSelectContent2 = _interopRequireDefault(_uiSelectContent);\n\nvar _uiSelectLibrary = __webpack_require__(124);\n\nvar _uiSelectLibrary2 = _interopRequireDefault(_uiSelectLibrary);\n\nvar _uiSelectFtp = __webpack_require__(125);\n\nvar _uiSelectFtp2 = _interopRequireDefault(_uiSelectFtp);\n\nvar _uiSelectGenomespace = __webpack_require__(126);\n\nvar _uiSelectGenomespace2 = _interopRequireDefault(_uiSelectGenomespace);\n\nvar _uiColorPicker = __webpack_require__(128);\n\nvar _uiColorPicker2 = _interopRequireDefault(_uiColorPicker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// create form view\nexports.default = Backbone.Model.extend({\n /** Available parameter types */\n types: {\n text: \"_fieldText\",\n password: \"_fieldText\",\n select: \"_fieldSelect\",\n data_column: \"_fieldSelect\",\n genomebuild: \"_fieldSelect\",\n data: \"_fieldData\",\n data_collection: \"_fieldData\",\n integer: \"_fieldSlider\",\n float: \"_fieldSlider\",\n boolean: \"_fieldBoolean\",\n drill_down: \"_fieldDrilldown\",\n color: \"_fieldColor\",\n hidden: \"_fieldHidden\",\n hidden_data: \"_fieldHidden\",\n baseurl: \"_fieldHidden\",\n library_data: \"_fieldLibrary\",\n ftpfile: \"_fieldFtp\",\n upload: \"_fieldUpload\",\n genomespacefile: \"_fieldGenomeSpace\"\n },\n\n /** Returns an input field for a given field type */\n create: function create(input_def) {\n var fieldClass = this.types[input_def.type];\n var field = typeof this[fieldClass] === \"function\" ? this[fieldClass].call(this, input_def) : null;\n if (!field) {\n field = input_def.options ? this._fieldSelect(input_def) : this._fieldText(input_def);\n Galaxy.emit.debug(\"form-parameters::_addRow()\", \"Auto matched field type (\" + input_def.type + \").\");\n }\n input_def.value === undefined && (input_def.value = null);\n field.value(input_def.value);\n return field;\n },\n\n /** Data input field */\n _fieldData: function _fieldData(input_def) {\n return new _uiSelectContent2.default.View({\n id: \"field-\" + input_def.id,\n extensions: input_def.extensions,\n optional: input_def.optional,\n multiple: input_def.multiple,\n type: input_def.type,\n flavor: input_def.flavor,\n data: input_def.options,\n onchange: input_def.onchange\n });\n },\n\n /** Select/Checkbox/Radio options field */\n _fieldSelect: function _fieldSelect(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // customize properties\n if (input_def.type == \"data_column\") {\n input_def.error_text = \"Missing columns in referenced dataset.\";\n }\n\n // identify available options\n var data = input_def.data;\n if (!data) {\n data = [];\n _.each(input_def.options, function (option) {\n data.push({ label: option[0], value: option[1] });\n });\n }\n\n // identify display type\n var SelectClass = _uiMisc2.default.Select;\n switch (input_def.display) {\n case \"checkboxes\":\n SelectClass = _uiMisc2.default.Checkbox;\n break;\n case \"radio\":\n SelectClass = _uiMisc2.default.Radio;\n break;\n case \"radiobutton\":\n SelectClass = _uiMisc2.default.RadioButton;\n break;\n }\n\n // create select field\n return new SelectClass.View({\n id: \"field-\" + input_def.id,\n data: data,\n error_text: input_def.error_text || \"No options available\",\n readonly: input_def.readonly,\n multiple: input_def.multiple,\n optional: input_def.optional,\n onchange: input_def.onchange,\n individual: input_def.individual,\n searchable: input_def.flavor !== \"workflow\"\n });\n },\n\n /** Drill down options field */\n _fieldDrilldown: function _fieldDrilldown(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // create drill down field\n return new _uiMisc2.default.Drilldown.View({\n id: \"field-\" + input_def.id,\n data: input_def.options,\n display: input_def.display,\n optional: input_def.optional,\n onchange: input_def.onchange\n });\n },\n\n /** Text input field */\n _fieldText: function _fieldText(input_def) {\n // field replaces e.g. a select field\n if (input_def.options && input_def.data) {\n input_def.area = input_def.multiple;\n if (_utils2.default.isEmpty(input_def.value)) {\n input_def.value = null;\n } else {\n if ($.isArray(input_def.value)) {\n var str_value = \"\";\n for (var i in input_def.value) {\n str_value += String(input_def.value[i]);\n if (!input_def.multiple) {\n break;\n }\n str_value += \"\\n\";\n }\n input_def.value = str_value;\n }\n }\n }\n // create input element\n return new _uiMisc2.default.Input({\n id: \"field-\" + input_def.id,\n type: input_def.type,\n area: input_def.area,\n readonly: input_def.readonly,\n placeholder: input_def.placeholder,\n datalist: input_def.datalist,\n onchange: input_def.onchange\n });\n },\n\n /** Slider field */\n _fieldSlider: function _fieldSlider(input_def) {\n return new _uiMisc2.default.Slider.View({\n id: \"field-\" + input_def.id,\n precise: input_def.type == \"float\",\n is_workflow: input_def.is_workflow,\n min: input_def.min,\n max: input_def.max,\n onchange: input_def.onchange\n });\n },\n\n /** Hidden field */\n _fieldHidden: function _fieldHidden(input_def) {\n return new _uiMisc2.default.Hidden({\n id: \"field-\" + input_def.id,\n info: input_def.info\n });\n },\n\n /** Boolean field */\n _fieldBoolean: function _fieldBoolean(input_def) {\n return new _uiMisc2.default.RadioButton.View({\n id: \"field-\" + input_def.id,\n data: [{ label: \"Yes\", value: \"true\" }, { label: \"No\", value: \"false\" }],\n onchange: input_def.onchange\n });\n },\n\n /** Color picker field */\n _fieldColor: function _fieldColor(input_def) {\n return new _uiColorPicker2.default({\n id: \"field-\" + input_def.id,\n onchange: input_def.onchange\n });\n },\n\n /** Library dataset field */\n _fieldLibrary: function _fieldLibrary(input_def) {\n return new _uiSelectLibrary2.default.View({\n id: \"field-\" + input_def.id,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** FTP file field */\n _fieldFtp: function _fieldFtp(input_def) {\n return new _uiSelectFtp2.default.View({\n id: \"field-\" + input_def.id,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** GenomeSpace file select field\n */\n _fieldGenomeSpace: function _fieldGenomeSpace(input_def) {\n var self = this;\n return new _uiSelectGenomespace2.default.View({\n id: \"field-\" + input_def.id,\n onchange: function onchange() {\n self.app.trigger(\"change\");\n }\n });\n },\n\n /** Upload file field */\n _fieldUpload: function _fieldUpload(input_def) {\n return new _uiMisc2.default.Upload({\n id: \"field-\" + input_def.id,\n onchange: input_def.onchange\n });\n }\n}); /**\n This class creates input elements. New input parameter types should be added to the types dictionary.\n */\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ }),\n/* 123 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiSelectDefault = __webpack_require__(62);\n\nvar _uiSelectDefault2 = _interopRequireDefault(_uiSelectDefault);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/** Batch mode variations */\nvar Batch = { DISABLED: \"disabled\", ENABLED: \"enabled\", LINKED: \"linked\" };\n\n/** List of available content selectors options */\nvar Configurations = {\n data: [{\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }, {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.LINKED\n }, {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.LINKED\n }],\n data_multiple: [{\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n }, {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collections\",\n multiple: true,\n batch: Batch.DISABLED\n }],\n data_collection: [{\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }],\n workflow_data: [{\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }],\n workflow_data_multiple: [{\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n }],\n workflow_data_collection: [{\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }],\n module_data: [{\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }, {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.ENABLED\n }],\n module_data_collection: [{\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }, {\n src: \"hdca\",\n icon: \"fa-folder\",\n tooltip: \"Multiple collections\",\n multiple: true,\n batch: Batch.ENABLED\n }]\n};\n\n/** View for hda and hdca content selector ui elements */\nvar View = Backbone.View.extend({\n initialize: function initialize(options) {\n var self = this;\n this.model = options && options.model || new Backbone.Model({\n src_labels: { hda: \"dataset\", hdca: \"dataset collection\" },\n pagelimit: 100,\n statustimer: 1000\n }).set(options);\n this.setElement($(\"
\").addClass(\"ui-select-content\"));\n this.button_product = new _uiMisc2.default.RadioButton.View({\n value: \"false\",\n data: [{\n icon: \"fa fa-chain\",\n value: \"false\",\n tooltip: \"Linked inputs will be run in matched order with other datasets e.g. use this for matching forward and reverse reads.\"\n }, {\n icon: \"fa fa-chain-broken\",\n value: \"true\",\n tooltip: \"Unlinked dataset inputs will be run against *all* other inputs.\"\n }]\n });\n var $batch_div = $(\"
\").addClass(\"ui-form-info\").append($(\"\").addClass(\"fa fa-sitemap\")).append($(\"\").html(\"This is a batch mode input field. Separate jobs will be triggered for each dataset selection.\"));\n this.$batch = {\n linked: $batch_div.clone(),\n enabled: $batch_div.clone().append($(\"
\").append($(\"
\").addClass(\"ui-form-title\").html(\"Batch options:\")).append(this.button_product.$el)).append($(\"
\").css(\"clear\", \"both\"))\n };\n\n // add drag-drop event handlers\n this.$el.on(\"dragenter\", function (e) {\n this.lastenter = e.target;\n self.$el.addClass(\"ui-dragover\");\n }).on(\"dragover\", function (e) {\n e.preventDefault();\n }).on(\"dragleave\", function (e) {\n this.lastenter === e.target && self.$el.removeClass(\"ui-dragover\");\n }).on(\"drop\", function (e) {\n self._handleDrop(e);\n });\n\n // track current history elements\n this.history = {};\n\n // add listeners\n this.listenTo(this.model, \"change:data\", this._changeData, this);\n this.listenTo(this.model, \"change:wait\", this._changeWait, this);\n this.listenTo(this.model, \"change:current\", this._changeCurrent, this);\n this.listenTo(this.model, \"change:value\", this._changeValue, this);\n this.listenTo(this.model, \"change:type change:optional change:multiple change:extensions\", this._changeType, this);\n this.render();\n\n // add change event\n this.on(\"change\", function () {\n options.onchange && options.onchange(self.value());\n });\n },\n\n render: function render() {\n this._changeType();\n this._changeValue();\n this._changeWait();\n },\n\n /** Indicate that select fields are being updated */\n wait: function wait() {\n this.model.set(\"wait\", true);\n },\n\n /** Indicate that the options update has been completed */\n unwait: function unwait() {\n this.model.set(\"wait\", false);\n },\n\n /** Update data representing selectable options */\n update: function update(options) {\n this.model.set(\"data\", options);\n },\n\n /** Return the currently selected dataset values */\n value: function value(new_value) {\n new_value !== undefined && this.model.set(\"value\", new_value);\n var current = this.model.get(\"current\");\n if (this.config[current]) {\n var id_list = this.fields[current].value();\n if (id_list !== null) {\n id_list = $.isArray(id_list) ? id_list : [id_list];\n if (id_list.length > 0) {\n var result = this._batch({ values: [] });\n for (var i in id_list) {\n var details = this.history[id_list[i] + \"_\" + this.config[current].src];\n if (details) {\n result.values.push(details);\n } else {\n Galaxy.emit.debug(\"ui-select-content::value()\", \"Requested details not found for '\" + id_list[i] + \"'.\");\n return null;\n }\n }\n result.values.sort(function (a, b) {\n return a.hid - b.hid;\n });\n return result;\n }\n }\n } else {\n Galaxy.emit.debug(\"ui-select-content::value()\", \"Invalid value/source '\" + new_value + \"'.\");\n }\n return null;\n },\n\n /** Change of current select field */\n _changeCurrent: function _changeCurrent() {\n var self = this;\n _.each(this.fields, function (field, i) {\n if (self.model.get(\"current\") == i) {\n field.$el.show();\n _.each(self.$batch, function ($batchfield, batchmode) {\n $batchfield[self.config[i].batch == batchmode ? \"show\" : \"hide\"]();\n });\n self.button_type.value(i);\n } else {\n field.$el.hide();\n }\n });\n },\n\n /** Change of type */\n _changeType: function _changeType() {\n var self = this;\n\n // identify selector type identifier i.e. [ flavor ]_[ type ]_[ multiple ]\n var config_id = (this.model.get(\"flavor\") ? this.model.get(\"flavor\") + \"_\" : \"\") + String(this.model.get(\"type\")) + (this.model.get(\"multiple\") ? \"_multiple\" : \"\");\n if (Configurations[config_id]) {\n this.config = Configurations[config_id];\n } else {\n this.config = Configurations[\"data\"];\n Galaxy.emit.debug(\"ui-select-content::_changeType()\", \"Invalid configuration/type id '\" + config_id + \"'.\");\n }\n\n // prepare extension component of error message\n var data = self.model.get(\"data\");\n var extensions = _utils2.default.textify(this.model.get(\"extensions\"));\n var src_labels = this.model.get(\"src_labels\");\n\n // build views\n this.fields = [];\n this.button_data = [];\n _.each(this.config, function (c, i) {\n self.button_data.push({\n value: i,\n icon: c.icon,\n tooltip: c.tooltip\n });\n self.fields.push(new _uiSelectDefault2.default.View({\n optional: self.model.get(\"optional\"),\n multiple: c.multiple,\n searchable: !c.multiple || data && data[c.src] && data[c.src].length > self.model.get(\"pagelimit\"),\n individual: true,\n error_text: \"No \" + (extensions ? extensions + \" \" : \"\") + (src_labels[c.src] || \"content\") + \" available.\",\n onchange: function onchange() {\n self.trigger(\"change\");\n }\n }));\n });\n this.button_type = new _uiMisc2.default.RadioButton.View({\n value: this.model.get(\"current\"),\n data: this.button_data,\n onchange: function onchange(value) {\n self.model.set(\"current\", value);\n self.trigger(\"change\");\n }\n });\n\n // append views\n this.$el.empty();\n var button_width = 0;\n if (this.fields.length > 1) {\n this.$el.append(this.button_type.$el);\n button_width = Math.max(0, this.fields.length * 36) + \"px\";\n }\n _.each(this.fields, function (field) {\n self.$el.append(field.$el.css({ \"margin-left\": button_width }));\n });\n _.each(this.$batch, function ($batchfield, batchmode) {\n self.$el.append($batchfield.css({ \"margin-left\": button_width }));\n });\n this.model.set(\"current\", 0);\n this._changeCurrent();\n this._changeData();\n },\n\n /** Change of wait flag */\n _changeWait: function _changeWait() {\n var self = this;\n _.each(this.fields, function (field) {\n field[self.model.get(\"wait\") ? \"wait\" : \"unwait\"]();\n });\n },\n\n /** Change of available options */\n _changeData: function _changeData() {\n var options = this.model.get(\"data\");\n var self = this;\n var select_options = {};\n _.each(options, function (items, src) {\n select_options[src] = [];\n _.each(items, function (item) {\n select_options[src].push({\n hid: item.hid,\n keep: item.keep,\n label: item.hid + \": \" + item.name,\n value: item.id,\n tags: item.tags\n });\n self.history[item.id + \"_\" + src] = item;\n });\n });\n _.each(this.config, function (c, i) {\n select_options[c.src] && self.fields[i].add(select_options[c.src], function (a, b) {\n return b.hid - a.hid;\n });\n });\n },\n\n /** Change of incoming value */\n _changeValue: function _changeValue() {\n var new_value = this.model.get(\"value\");\n if (new_value && new_value.values && new_value.values.length > 0) {\n // create list with content ids\n var list = [];\n _.each(new_value.values, function (value) {\n list.push(value.id);\n });\n // sniff first suitable field type from config list\n var src = new_value.values[0].src;\n var multiple = new_value.values.length > 1;\n for (var i = 0; i < this.config.length; i++) {\n var field = this.fields[i];\n var c = this.config[i];\n if (c.src == src && [multiple, true].indexOf(c.multiple) !== -1) {\n this.model.set(\"current\", i);\n field.value(list);\n break;\n }\n }\n } else {\n _.each(this.fields, function (field) {\n field.value(null);\n });\n }\n },\n\n /** Handles drop events e.g. from history panel */\n _handleDrop: function _handleDrop(ev) {\n try {\n var data = this.model.get(\"data\");\n var current = this.model.get(\"current\");\n var config = this.config[current];\n var field = this.fields[current];\n var drop_data = JSON.parse(ev.originalEvent.dataTransfer.getData(\"text\"))[0];\n var new_id = drop_data.id;\n var new_src = drop_data.history_content_type == \"dataset\" ? \"hda\" : \"hdca\";\n var new_value = { id: new_id, src: new_src };\n if (data && _.findWhere(data[new_src], new_value)) {\n if (config.src == new_src) {\n var current_value = field.value();\n if (current_value && config.multiple) {\n if (current_value.indexOf(new_id) == -1) {\n current_value.push(new_id);\n }\n } else {\n current_value = new_id;\n }\n field.value(current_value);\n } else {\n this.model.set(\"value\", { values: [new_value] });\n this.model.trigger(\"change:value\");\n }\n this.trigger(\"change\");\n this._handleDropStatus(\"success\");\n } else {\n this._handleDropStatus(\"danger\");\n }\n } catch (e) {\n this._handleDropStatus(\"danger\");\n }\n ev.preventDefault();\n },\n\n /** Highlight drag result */\n _handleDropStatus: function _handleDropStatus(status) {\n var self = this;\n this.$el.removeClass(\"ui-dragover\").addClass(\"ui-dragover-\" + status);\n setTimeout(function () {\n self.$el.removeClass(\"ui-dragover-\" + status);\n }, this.model.get(\"statustimer\"));\n },\n\n /** Assists in identifying the batch mode */\n _batch: function _batch(result) {\n result[\"batch\"] = false;\n var current = this.model.get(\"current\");\n var config = this.config[current];\n if (config.src == \"hdca\" && !config.multiple) {\n var hdca = this.history[this.fields[current].value() + \"_hdca\"];\n if (hdca && hdca.map_over_type) {\n result[\"batch\"] = true;\n }\n }\n if (config.batch == Batch.LINKED || config.batch == Batch.ENABLED) {\n result[\"batch\"] = true;\n if (config.batch == Batch.ENABLED && this.button_product.value() === \"true\") {\n result[\"product\"] = true;\n }\n }\n return result;\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0), __webpack_require__(1)))\n\n/***/ }),\n/* 124 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _uiTable = __webpack_require__(68);\n\nvar _uiTable2 = _interopRequireDefault(_uiTable);\n\nvar _uiList = __webpack_require__(69);\n\nvar _uiList2 = _interopRequireDefault(_uiList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// collection of libraries\n// dependencies\nvar Libraries = Backbone.Collection.extend({\n url: Galaxy.root + \"api/libraries?deleted=false\"\n});\n\n// collection of dataset\nvar LibraryDatasets = Backbone.Collection.extend({\n initialize: function initialize() {\n var self = this;\n this.config = new Backbone.Model({ library_id: null });\n this.config.on(\"change\", function () {\n self.fetch({ reset: true });\n });\n },\n url: function url() {\n return Galaxy.root + \"api/libraries/\" + this.config.get(\"library_id\") + \"/contents\";\n }\n});\n\n// hda/hdca content selector ui element\nvar View = Backbone.View.extend({\n // initialize\n initialize: function initialize(options) {\n // link this\n var self = this;\n\n // collections\n this.libraries = new Libraries();\n this.datasets = new LibraryDatasets();\n\n // link app and options\n this.options = options;\n\n // select field for the library\n // TODO: Remove this once the library API supports searching for library datasets\n this.library_select = new _uiMisc2.default.Select.View({\n onchange: function onchange(value) {\n self.datasets.config.set(\"library_id\", value);\n }\n });\n\n // create ui-list view to keep track of selected data libraries\n this.dataset_list = new _uiList2.default.View({\n name: \"dataset\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function onchange() {\n self.trigger(\"change\");\n }\n });\n\n // add reset handler for fetched libraries\n this.libraries.on(\"reset\", function () {\n var data = [];\n self.libraries.each(function (model) {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n });\n self.library_select.update(data);\n });\n\n // add reset handler for fetched library datasets\n this.datasets.on(\"reset\", function () {\n var data = [];\n var library_current = self.library_select.text();\n if (library_current !== null) {\n self.datasets.each(function (model) {\n if (model.get(\"type\") === \"file\") {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n }\n });\n }\n self.dataset_list.update(data);\n });\n\n // add change event. fires on trigger\n this.on(\"change\", function () {\n options.onchange && options.onchange(self.value());\n });\n\n // create elements\n this.setElement(this._template());\n this.$(\".library-select\").append(this.library_select.$el);\n this.$el.append(this.dataset_list.$el);\n\n // initial fetch of libraries\n this.libraries.fetch({\n reset: true,\n success: function success() {\n self.library_select.trigger(\"change\");\n if (self.options.value !== undefined) {\n self.value(self.options.value);\n }\n }\n });\n },\n\n /** Return/Set currently selected library datasets */\n value: function value(val) {\n return this.dataset_list.value(val);\n },\n\n /** Template */\n _template: function _template() {\n return '
' + '
' + 'Select Library' + '' + \"
\" + \"
\";\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 125 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiList = __webpack_require__(69);\n\nvar _uiList2 = _interopRequireDefault(_uiList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * FTP file selector\n */\n// dependencies\nvar View = Backbone.View.extend({\n // initialize\n initialize: function initialize(options) {\n // link this\n var self = this;\n\n // create ui-list view to keep track of selected ftp files\n this.ftpfile_list = new _uiList2.default.View({\n name: \"file\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function onchange() {\n options.onchange && options.onchange(self.value());\n }\n });\n\n // create elements\n this.setElement(this.ftpfile_list.$el);\n\n // initial fetch of ftps\n _utils2.default.get({\n url: Galaxy.root + \"api/remote_files\",\n success: function success(response) {\n var data = [];\n for (var i in response) {\n data.push({\n value: response[i][\"path\"],\n label: response[i][\"path\"]\n });\n }\n self.ftpfile_list.update(data);\n }\n });\n },\n\n /** Return/Set currently selected ftp datasets */\n value: function value(val) {\n return this.ftpfile_list.value(val);\n }\n});\n\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 126 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nvar _uiMisc = __webpack_require__(6);\n\nvar _uiMisc2 = _interopRequireDefault(_uiMisc);\n\nvar _toolGenomespace = __webpack_require__(127);\n\nvar _toolGenomespace2 = _interopRequireDefault(_toolGenomespace);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * GenomeSpace file selector\n */\nvar View = Backbone.View.extend({\n // initialize\n initialize: function initialize(options) {\n // link this\n var self = this;\n\n // create insert new list element button\n this.browse_button = new _uiMisc2.default.ButtonIcon({\n title: \"Browse\",\n icon: \"fa fa-sign-in\",\n tooltip: \"Browse GenomeSpace\",\n onclick: function onclick() {\n self.browseGenomeSpace();\n }\n });\n\n // create genomespace filepath textbox\n this.filename_textbox = new _uiMisc2.default.Input();\n\n // create genomespace token textbox\n this.token_textbox = new _uiMisc2.default.Input({\n type: \"password\"\n });\n\n // create elements\n this.setElement(this._template(options));\n this.$(\".ui-gs-browse-button\").append(this.browse_button.$el);\n this.$(\".ui-gs-filename-textbox\").append(this.filename_textbox.$el);\n this.$(\".ui-gs-token-textbox\").append(this.token_textbox.$el);\n },\n\n /** Browse GenomeSpace */\n browseGenomeSpace: function browseGenomeSpace(options) {\n var self = this;\n _toolGenomespace2.default.openFileBrowser({\n successCallback: function successCallback(data) {\n self.value(data.destination + \"^\" + data.token);\n }\n });\n },\n\n /** Main Template */\n _template: function _template(options) {\n return '
' + '
' + '' + '' + \"
\" + '
' + '
Token
' + '' + \"
\" + \"
\";\n },\n\n /** Return/Set currently selected genomespace filename/token */\n value: function value(new_value) {\n // check if new_value is defined\n if (new_value !== undefined) {\n this._setValue(new_value);\n } else {\n return this._getValue();\n }\n },\n\n // get value\n _getValue: function _getValue() {\n return this.filename_textbox.value() + \"^\" + this.token_textbox.value();\n },\n\n // set value\n _setValue: function _setValue(new_value) {\n if (new_value) {\n values = new_value.split(\"^\");\n this.filename_textbox.value(values[0]);\n this.token_textbox.value(values[1]);\n }\n }\n}); // dependencies\nexports.default = {\n View: View\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 127 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n// Provides support for interacting with the GenomeSpace File Browser popup dialogue\n\n// tool form templates\nexports.default = {\n openFileBrowser: function openFileBrowser(options) {\n var GS_UI_URL = window.Galaxy.config.genomespace_ui_url;\n var GS_UPLOAD_URL = GS_UI_URL + \"upload/loadUrlToGenomespace.html?getLocation=true\";\n\n var newWin = window.open(GS_UPLOAD_URL, \"GenomeSpace File Browser\", \"height=360px,width=600px\");\n\n successCalBack = options[\"successCallback\"];\n window.addEventListener(\"message\", function (e) {\n successCalBack(e.data);\n }, false);\n\n newWin.focus();\n\n if (options[\"errorCallback\"] != null) newWin.setCallbackOnGSUploadError = config[\"errorCallback\"];\n }\n};\n\n/***/ }),\n/* 128 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _utils = __webpack_require__(3);\n\nvar _utils2 = _interopRequireDefault(_utils);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = Backbone.View.extend({\n colors: {\n standard: [\"c00000\", \"ff0000\", \"ffc000\", \"ffff00\", \"92d050\", \"00b050\", \"00b0f0\", \"0070c0\", \"002060\", \"7030a0\"],\n base: [\"ffffff\", \"000000\", \"eeece1\", \"1f497d\", \"4f81bd\", \"c0504d\", \"9bbb59\", \"8064a2\", \"4bacc6\", \"f79646\"],\n theme: [[\"f2f2f2\", \"7f7f7f\", \"ddd9c3\", \"c6d9f0\", \"dbe5f1\", \"f2dcdb\", \"ebf1dd\", \"e5e0ec\", \"dbeef3\", \"fdeada\"], [\"d8d8d8\", \"595959\", \"c4bd97\", \"8db3e2\", \"b8cce4\", \"e5b9b7\", \"d7e3bc\", \"ccc1d9\", \"b7dde8\", \"fbd5b5\"], [\"bfbfbf\", \"3f3f3f\", \"938953\", \"548dd4\", \"95b3d7\", \"d99694\", \"c3d69b\", \"b2a2c7\", \"92cddc\", \"fac08f\"], [\"a5a5a5\", \"262626\", \"494429\", \"17365d\", \"366092\", \"953734\", \"76923c\", \"5f497a\", \"31859b\", \"e36c09\"], [\"7f7f7e\", \"0c0c0c\", \"1d1b10\", \"0f243e\", \"244061\", \"632423\", \"4f6128\", \"3f3151\", \"205867\", \"974806\"]]\n },\n\n initialize: function initialize(options) {\n this.options = _utils2.default.merge(options, {});\n this.setElement(this._template());\n this.$panel = this.$(\".ui-color-picker-panel\");\n this.$view = this.$(\".ui-color-picker-view\");\n this.$value = this.$(\".ui-color-picker-value\");\n this.$header = this.$(\".ui-color-picker-header\");\n this._build();\n this.visible = false;\n this.value(this.options.value);\n this.$boxes = this.$(\".ui-color-picker-box\");\n var self = this;\n this.$boxes.on(\"click\", function () {\n self.value($(this).css(\"background-color\"));\n self.$header.trigger(\"click\");\n });\n this.$header.on(\"click\", function () {\n self.visible = !self.visible;\n if (self.visible) {\n self.$view.fadeIn(\"fast\");\n } else {\n self.$view.fadeOut(\"fast\");\n }\n });\n },\n\n /** Get/set value */\n value: function value(new_val) {\n if (new_val !== undefined && new_val !== null) {\n this.$value.css(\"background-color\", new_val);\n this.$(\".ui-color-picker-box\").empty();\n this.$(this._getValue()).html(this._templateCheck());\n this.options.onchange && this.options.onchange(new_val);\n }\n return this._getValue();\n },\n\n /** Get value from dom */\n _getValue: function _getValue() {\n var rgb = this.$value.css(\"background-color\");\n rgb = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (rgb) {\n var hex = function hex(x) {\n return (\"0\" + parseInt(x).toString(16)).slice(-2);\n };\n\n return \"#\" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);\n } else {\n return null;\n }\n },\n\n /** Build color panel */\n _build: function _build() {\n this._content({ colors: this.colors.base });\n for (var i in this.colors.theme) {\n var line_def = {};\n if (i == 0) {\n line_def[\"bottom\"] = true;\n } else if (i != this.colors.theme.length - 1) {\n line_def[\"top\"] = true;\n line_def[\"bottom\"] = true;\n } else {\n line_def[\"top\"] = true;\n }\n line_def[\"colors\"] = this.colors.theme[i];\n this._content(line_def);\n }\n this._content({ colors: this.colors.standard });\n },\n\n /** Create content */\n _content: function _content(options) {\n var colors = options.colors;\n var $content = $(this._templateContent());\n var $line = $content.find(\".line\");\n this.$panel.append($content);\n for (var i in colors) {\n var $box = $(this._templateBox(colors[i]));\n if (options.top) {\n $box.css(\"border-top\", \"none\");\n $box.css(\"border-top-left-radius\", \"0px\");\n $box.css(\"border-top-right-radius\", \"0px\");\n }\n if (options.bottom) {\n $box.css(\"border-bottom\", \"none\");\n $box.css(\"border-bottom-left-radius\", \"0px\");\n $box.css(\"border-bottom-right-radius\", \"0px\");\n }\n $line.append($box);\n }\n return $content;\n },\n\n /** Check icon */\n _templateCheck: function _templateCheck() {\n return '
';\n },\n\n /** Content template */\n _templateContent: function _templateContent() {\n return '
' + '
' + \"
\";\n },\n\n /** Box template */\n _templateBox: function _templateBox(color) {\n return \"
\";\n },\n\n /** Main template */\n _template: function _template() {\n return '
' + '
' + '
' + '
Select a color
' + \"
\" + '
' + '
' + \"
\";\n \"
\";\n }\n}); /** Renders the color picker used e.g. in the tool form **/\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(0)))\n\n/***/ }),\n/* 129 */\n/***/ (function(module, exports) {\n\n/**\n * Parser.js\n * Copyright 2012-13 Mayank Lahiri\n * mlahiri@gmail.com\n * Released under the BSD License.\n *\n * A forgiving Bibtex parser that can:\n * \n * (1) operate in streaming or block mode, extracting entries as dictionaries. \n * (2) convert Latex special characters to UTF-8.\n * (3) best-effort parse malformed entries.\n * (4) run in a CommonJS environment or a browser, without any dependencies.\n * (5) be advanced-compiled by Google Closure Compiler.\n * \n * Handwritten as a labor of love, not auto-generated from a grammar. \n *\n * Modes of usage:\n *\n * (1) Synchronous, string\n *\n * var entries = BibtexParser(text);\n * console.log(entries);\n *\n * (2) Asynchronous, stream\n *\n * var entryCallback = function(entry) { console.log(entry); }\n * var parser = new BibtexParser(entryCallback);\n * parser.parse(chunk1);\n * parser.parse(chunk2);\n * ...\n * \n * @param {text|function(Object)} arg Either a Bibtex string or callback \n * function for processing parsed entries.\n * @constructor\n */\nfunction BibtexParser(arg0) {\n // Determine how this function is to be used\n if (typeof arg0 == 'string') {\n // Passed a string, synchronous call without 'new'\n var tempStorage = {};\n var entries = [];\n function accumulator(entry) {\n entries.push(entry);\n }\n var parser = BibtexParser.call(tempStorage, accumulator);\n parser.parse(arg0);\n return {\n 'entries': entries,\n 'errors': parser.getErrors()\n }\n }\n if (typeof arg0 != 'function') {\n throw 'Invalid parser construction.';\n }\n\n /** @enum {number} */\n this.STATES_ = {\n ENTRY_OR_JUNK: 0,\n OBJECT_TYPE: 1,\n ENTRY_KEY: 2, \n KV_KEY: 3, \n EQUALS: 4,\n KV_VALUE: 5 \n }\n /** @private */ this.DATA_ = {};\n /** @private */ this.CALLBACK_ = arg0;\n /** @private */ this.CHAR_ = 0;\n /** @private */ this.LINE_ = 1;\n /** @private */ this.CHAR_IN_LINE_ = 0;\n /** @private */ this.SKIPWS_ = true;\n /** @private */ this.SKIPCOMMENT_ = true;\n /** @private */ this.PARSETMP_ = {};\n /** @private */ this.SKIPTILLEOL_ = false;\n /** @private */ this.VALBRACES_ = null;\n /** @private */ this.BRACETYPE_ = null;\n /** @private */ this.BRACECOUNT_ = 0;\n /** @private */ this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n /** @private */ this.ERRORS_ = [];\n /** @private */ this.ENTRY_TYPES_ = {\n 'inproceedings' : 1,\n 'proceedings' : 2,\n 'article' : 3,\n 'techreport' : 4,\n 'misc' : 5,\n 'mastersthesis' : 6,\n 'book' : 7,\n 'phdthesis' : 8,\n 'incollection' : 9,\n 'unpublished' : 10,\n 'inbook' : 11,\n 'manual' : 12,\n 'periodical' : 13,\n 'booklet' : 14,\n 'masterthesis' : 15,\n 'conference' : 16\n }\n /** @private */ this.MACROS_ = {\n 'jan' : 'January',\n 'feb' : 'February',\n 'mar' : 'March',\n 'apr' : 'April',\n 'may' : 'May',\n 'jun' : 'June',\n 'jul' : 'July',\n 'aug' : 'August',\n 'sep' : 'September',\n 'oct' : 'October',\n 'nov' : 'November',\n 'dec' : 'December',\n 'Jan' : 'January',\n 'Feb' : 'February',\n 'Mar' : 'March',\n 'Apr' : 'April',\n 'May' : 'May',\n 'Jun' : 'June',\n 'Jul' : 'July',\n 'Aug' : 'August',\n 'Sep' : 'September',\n 'Oct' : 'October',\n 'Nov' : 'November',\n 'Dec' : 'December'\n }\n\n /**\n * Gets an array of all errors encountered during parsing.\n * Array entries are of the format:\n * [ line number, character in line, character in stream, error text ]\n *\n * @returns Array\n * @public\n */\n this.getErrors = function() {\n return this.ERRORS_;\n }\n\n /**\n * Processes a chunk of data\n * @public\n */\n this.parse = function(chunk) {\n for (var i = 0; i < chunk.length; i++)\n this.processCharacter_(chunk[i]);\n }\n\n /**\n * Logs error at current stream position.\n *\n * @private\n */\n this.error_ = function(text) {\n this.ERRORS_.push([ this.LINE_, \n this.CHAR_IN_LINE_,\n this.CHAR_,\n text ])\n }\n\n /**\n * Called after an entire entry has been parsed from the stream.\n * Performs post-processing and invokes the entry callback pointed to by\n * this.CALLBACK_. Parsed (but unprocessed) entry data is in this.DATA_.\n */\n this.processEntry_ = function() {\n var data = this.DATA_;\n if (data.Fields) \n for (var f in data.Fields) {\n var raw = data.Fields[f];\n\n // Convert Latex/Bibtex special characters to UTF-8 equivalents\n for (var i = 0; i < this.CHARCONV_.length; i++) {\n var re = this.CHARCONV_[i][0];\n var rep = this.CHARCONV_[i][1];\n raw = raw.replace(re, rep);\n }\n\n // Basic substitutions\n raw = raw.replace(/[\\n\\r\\t]/g, ' ')\n .replace(/\\s\\s+/g, ' ')\n .replace(/^\\s+|\\s+$/g, '')\n\n // Remove braces and backslashes\n var len = raw.length;\n var processed = '';\n for (var i = 0; i < len; i++) {\n var c = raw[i];\n var skip = false;\n if (c == '\\\\' && i < len-1) \n c = raw[++i];\n else {\n if (c == '{' || c == '}')\n skip = true;\n }\n if (!skip)\n processed += c;\n }\n data.Fields[f] = processed\n }\n\n if (data.ObjectType == 'string') {\n for (var f in data.Fields) { \n this.MACROS_[f] = data.Fields[f];\n }\n } else {\n // Parsed a new Bibtex entry\n this.CALLBACK_(data);\n }\n }\n\n\n /**\n * Processes next character in the stream, invoking the callback after \n * each entry has been found and processed.\n * \n * @private\n * @param {string} c Next character in input stream\n */\n this.processCharacter_ = function(c) {\n // Housekeeping\n this.CHAR_++;\n this.CHAR_IN_LINE_++;\n if (c == '\\n') {\n this.LINE_++;\n this.CHAR_IN_LINE_ = 1;\n }\n\n // Convenience states for skipping whitespace when needed\n if (this.SKIPTILLEOL_) {\n if (c == '\\n')\n this.SKIPTILLEOL_ = false;\n return;\n }\n if (this.SKIPCOMMENT_ && c == '%') {\n this.SKIPTILLEOL_ = true;\n return;\n }\n if (this.SKIPWS_ && /\\s/.test(c))\n return;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n this.SKIPTILLEOL_ = false;\n\n // Main state machine\n var AnotherIteration = true;\n while (AnotherIteration) {\n //console.log(this.LINE_, this.CHAR_IN_LINE_, this.STATE_, c)\n AnotherIteration = false;\n switch(this.STATE_) {\n // -- Scan for an object marker ('@')\n // -- Reset temporary data structure in case previous entry was garbled\n case this.STATES_.ENTRY_OR_JUNK:\n if (c == '@') {\n // SUCCESS: Parsed a valid start-of-object marker.\n // NEXT_STATE: OBJECT_TYPE\n this.STATE_ = this.STATES_.OBJECT_TYPE;\n this.DATA_ = {\n ObjectType : ''\n };\n }\n this.BRACETYPE_ = null;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n\n // Start at first non-whitespace character after start-of-object '@'\n // -- Accept [A-Za-z], break on non-matching character\n // -- Populate this.DATA_.EntryType and this.DATA_.ObjectType\n case this.STATES_.OBJECT_TYPE:\n if (/[A-Za-z]/.test(c)) {\n this.DATA_.ObjectType += c.toLowerCase();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // Break from state and validate object type\n var ot = this.DATA_.ObjectType;\n if (ot == 'comment') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot == 'string') {\n this.DATA_.ObjectType = ot;\n this.DATA_.Fields = {};\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.STATE_ = this.STATES_.KV_KEY;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.PARSETMP_ = {\n Key: ''\n }\n } else {\n if (ot == 'preamble') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot in this.ENTRY_TYPES_) {\n // SUCCESS: Parsed a valid object type.\n // NEXT_STATE: ENTRY_KEY\n this.DATA_.ObjectType = 'entry';\n this.DATA_.EntryType = ot;\n this.DATA_.EntryKey = '';\n this.STATE_ = this.STATES_.ENTRY_KEY;\n AnotherIteration = true;\n } else {\n // ERROR: Unrecognized object type.\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Unrecognized object type: \"' +\n this.DATA_.ObjectType + '\"')\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n }\n }\n }\n }\n }\n break;\n\n // Start at first non-alphabetic character after an entry type\n // -- Populate this.DATA_.EntryKey\n case this.STATES_.ENTRY_KEY:\n if ((c === '{' || c === '(') && this.BRACETYPE_ == null) {\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n }\n if (/[,%\\s]/.test(c)) {\n if (this.DATA_.EntryKey.length < 1) { \n // Skip comments and whitespace before entry key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n if (this.BRACETYPE_ == null) {\n // ERROR: No opening brace for object\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('No opening brace for object.');\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n // SUCCESS: Parsed an entry key\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n AnotherIteration = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.PARSETMP_.Key= '';\n this.DATA_.Fields = {};\n }\n }\n } else {\n this.DATA_.EntryKey += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n }\n break;\n\n // Start at first non-whitespace/comment character after entry key.\n // -- Populate this.PARSETMP_.Key\n case this.STATES_.KV_KEY:\n // Test for end of entry\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // SUCCESS: Parsed an entry, possible incomplete\n // NEXT_STATE: ENTRY_OR_JUNK\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (/[\\-A-Za-z:]/.test(c)) {\n // Add to key\n this.PARSETMP_.Key += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // Either end of key or we haven't encountered start of key\n if (this.PARSETMP_.Key.length < 1) {\n // Keep going till we see a key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // SUCCESS: Found full key in K/V pair\n // NEXT_STATE: EQUALS\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.EQUALS;\n AnotherIteration = true;\n }\n }\n break;\n\n // Start at first non-alphabetic character after K/V pair key.\n case this.STATES_.EQUALS:\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // ERROR: K/V pair with key but no value\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Key-value pair has key \"' +\n this.PARSETMP_.Key + '\", but no value.');\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (c == '=') {\n // SUCCESS: found an equal signs separating key and value\n // NEXT_STATE: KV_VALUE\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_VALUE;\n this.PARSETMP_.Value = '';\n this.VALBRACES_ = { '\"' : [], '{' : [] };\n }\n break;\n\n // Start at first non-whitespace/comment character after '=' \n // -- Populate this.PARSETMP_.Value\n case this.STATES_.KV_VALUE:\n var delim = this.VALBRACES_;\n var val = this.PARSETMP_.Value;\n var doneParsingValue = false;\n\n // Test for special characters\n if (c == '\"' || c == '{' || c == '}' || c == ',') {\n if (c == ',') {\n // This comma can mean:\n // (1) just another comma literal\n // (2) end of a macro reference\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of a macro reference\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n doneParsingValue = true;\n }\n }\n if (c == '\"') {\n // This quote can mean:\n // (1) opening delimiter\n // (2) closing delimiter\n // (3) literal, if we have a '{' on the stack\n if (0 === delim['\"'].length + delim['{'].length) {\n // opening delimiter\n delim['\"'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n break;\n }\n if (delim['\"'].length == 1 && delim['{'].length == 0 &&\n (val.length==0 || val[val.length-1] != '\\\\')) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // literal, add to value\n }\n }\n if (c == '{') {\n // This brace can mean:\n // (1) opening delimiter\n // (2) stacked verbatim delimiter\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n delim['{'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // literal, add to value\n }\n }\n if (c == '}') {\n // This brace can mean:\n // (1) closing delimiter\n // (2) closing stacked verbatim delimiter\n // (3) end of object definition if value was a macro\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of object definition, after macro\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n AnotherIteration = true;\n doneParsingValue = true;\n } else {\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n if (delim['{'].length > 0) {\n // pop stack for stacked verbatim delimiter\n delim['{'].splice(delim['{'].length-1, 1)\n if (0 == delim['{'].length + delim['\"'].length) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // end verbatim block\n }\n }\n } else {\n // literal, add to value\n }\n }\n }\n }\n\n // If here, then we are either done parsing the value or \n // have a literal that should be added to the value.\n if (doneParsingValue) {\n // SUCCESS: value parsed\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.DATA_.Fields[this.PARSETMP_.Key] = this.PARSETMP_.Value;\n this.PARSETMP_ = { Key: '' };\n this.VALBRACES_ = null;\n } else {\n this.PARSETMP_.Value += c;\n }\n break;\n } // end switch (this.STATE_)\n } // end while(AnotherIteration)\n } // end function processCharacter \n\n /** @private */ this.CHARCONV_ = [\n [ /\\\\space /g, '\\u0020' ],\n [ /\\\\textdollar /g, '\\u0024' ],\n [ /\\\\textquotesingle /g, '\\u0027' ],\n [ /\\\\ast /g, '\\u002A' ],\n [ /\\\\textbackslash /g, '\\u005C' ],\n [ /\\\\\\^\\{\\}/g, '\\u005E' ],\n [ /\\\\textasciigrave /g, '\\u0060' ],\n [ /\\\\lbrace /g, '\\u007B' ],\n [ /\\\\vert /g, '\\u007C' ],\n [ /\\\\rbrace /g, '\\u007D' ],\n [ /\\\\textasciitilde /g, '\\u007E' ],\n [ /\\\\textexclamdown /g, '\\u00A1' ],\n [ /\\\\textcent /g, '\\u00A2' ],\n [ /\\\\textsterling /g, '\\u00A3' ],\n [ /\\\\textcurrency /g, '\\u00A4' ],\n [ /\\\\textyen /g, '\\u00A5' ],\n [ /\\\\textbrokenbar /g, '\\u00A6' ],\n [ /\\\\textsection /g, '\\u00A7' ],\n [ /\\\\textasciidieresis /g, '\\u00A8' ],\n [ /\\\\textcopyright /g, '\\u00A9' ],\n [ /\\\\textordfeminine /g, '\\u00AA' ],\n [ /\\\\guillemotleft /g, '\\u00AB' ],\n [ /\\\\lnot /g, '\\u00AC' ],\n [ /\\\\textregistered /g, '\\u00AE' ],\n [ /\\\\textasciimacron /g, '\\u00AF' ],\n [ /\\\\textdegree /g, '\\u00B0' ],\n [ /\\\\pm /g, '\\u00B1' ],\n [ /\\\\textasciiacute /g, '\\u00B4' ],\n [ /\\\\mathrm\\{\\\\mu\\}/g, '\\u00B5' ],\n [ /\\\\textparagraph /g, '\\u00B6' ],\n [ /\\\\cdot /g, '\\u00B7' ],\n [ /\\\\c\\{\\}/g, '\\u00B8' ],\n [ /\\\\textordmasculine /g, '\\u00BA' ],\n [ /\\\\guillemotright /g, '\\u00BB' ],\n [ /\\\\textonequarter /g, '\\u00BC' ],\n [ /\\\\textonehalf /g, '\\u00BD' ],\n [ /\\\\textthreequarters /g, '\\u00BE' ],\n [ /\\\\textquestiondown /g, '\\u00BF' ],\n [ /\\\\`\\{A\\}/g, '\\u00C0' ],\n [ /\\\\'\\{A\\}/g, '\\u00C1' ],\n [ /\\\\\\^\\{A\\}/g, '\\u00C2' ],\n [ /\\\\~\\{A\\}/g, '\\u00C3' ],\n [ /\\\\\"\\{A\\}/g, '\\u00C4' ],\n [ /\\\\AA /g, '\\u00C5' ],\n [ /\\\\AE /g, '\\u00C6' ],\n [ /\\\\c\\{C\\}/g, '\\u00C7' ],\n [ /\\\\`\\{E\\}/g, '\\u00C8' ],\n [ /\\\\'\\{E\\}/g, '\\u00C9' ],\n [ /\\\\\\^\\{E\\}/g, '\\u00CA' ],\n [ /\\\\\"\\{E\\}/g, '\\u00CB' ],\n [ /\\\\`\\{I\\}/g, '\\u00CC' ],\n [ /\\\\'\\{I\\}/g, '\\u00CD' ],\n [ /\\\\\\^\\{I\\}/g, '\\u00CE' ],\n [ /\\\\\"\\{I\\}/g, '\\u00CF' ],\n [ /\\\\DH /g, '\\u00D0' ],\n [ /\\\\~\\{N\\}/g, '\\u00D1' ],\n [ /\\\\`\\{O\\}/g, '\\u00D2' ],\n [ /\\\\'\\{O\\}/g, '\\u00D3' ],\n [ /\\\\\\^\\{O\\}/g, '\\u00D4' ],\n [ /\\\\~\\{O\\}/g, '\\u00D5' ],\n [ /\\\\\"\\{O\\}/g, '\\u00D6' ],\n [ /\\\\texttimes /g, '\\u00D7' ],\n [ /\\\\O /g, '\\u00D8' ],\n [ /\\\\`\\{U\\}/g, '\\u00D9' ],\n [ /\\\\'\\{U\\}/g, '\\u00DA' ],\n [ /\\\\\\^\\{U\\}/g, '\\u00DB' ],\n [ /\\\\\"\\{U\\}/g, '\\u00DC' ],\n [ /\\\\'\\{Y\\}/g, '\\u00DD' ],\n [ /\\\\TH /g, '\\u00DE' ],\n [ /\\\\ss /g, '\\u00DF' ],\n [ /\\\\`\\{a\\}/g, '\\u00E0' ],\n [ /\\\\'\\{a\\}/g, '\\u00E1' ],\n [ /\\\\\\^\\{a\\}/g, '\\u00E2' ],\n [ /\\\\~\\{a\\}/g, '\\u00E3' ],\n [ /\\\\\"\\{a\\}/g, '\\u00E4' ],\n [ /\\\\aa /g, '\\u00E5' ],\n [ /\\\\ae /g, '\\u00E6' ],\n [ /\\\\c\\{c\\}/g, '\\u00E7' ],\n [ /\\\\`\\{e\\}/g, '\\u00E8' ],\n [ /\\\\'\\{e\\}/g, '\\u00E9' ],\n [ /\\\\\\^\\{e\\}/g, '\\u00EA' ],\n [ /\\\\\"\\{e\\}/g, '\\u00EB' ],\n [ /\\\\`\\{\\\\i\\}/g, '\\u00EC' ],\n [ /\\\\'\\{\\\\i\\}/g, '\\u00ED' ],\n [ /\\\\\\^\\{\\\\i\\}/g, '\\u00EE' ],\n [ /\\\\\"\\{\\\\i\\}/g, '\\u00EF' ],\n [ /\\\\dh /g, '\\u00F0' ],\n [ /\\\\~\\{n\\}/g, '\\u00F1' ],\n [ /\\\\`\\{o\\}/g, '\\u00F2' ],\n [ /\\\\'\\{o\\}/g, '\\u00F3' ],\n [ /\\\\\\^\\{o\\}/g, '\\u00F4' ],\n [ /\\\\~\\{o\\}/g, '\\u00F5' ],\n [ /\\\\\"\\{o\\}/g, '\\u00F6' ],\n [ /\\\\div /g, '\\u00F7' ],\n [ /\\\\o /g, '\\u00F8' ],\n [ /\\\\`\\{u\\}/g, '\\u00F9' ],\n [ /\\\\'\\{u\\}/g, '\\u00FA' ],\n [ /\\\\\\^\\{u\\}/g, '\\u00FB' ],\n [ /\\\\\"\\{u\\}/g, '\\u00FC' ],\n [ /\\\\'\\{y\\}/g, '\\u00FD' ],\n [ /\\\\th /g, '\\u00FE' ],\n [ /\\\\\"\\{y\\}/g, '\\u00FF' ],\n [ /\\\\=\\{A\\}/g, '\\u0100' ],\n [ /\\\\=\\{a\\}/g, '\\u0101' ],\n [ /\\\\u\\{A\\}/g, '\\u0102' ],\n [ /\\\\u\\{a\\}/g, '\\u0103' ],\n [ /\\\\k\\{A\\}/g, '\\u0104' ],\n [ /\\\\k\\{a\\}/g, '\\u0105' ],\n [ /\\\\'\\{C\\}/g, '\\u0106' ],\n [ /\\\\'\\{c\\}/g, '\\u0107' ],\n [ /\\\\\\^\\{C\\}/g, '\\u0108' ],\n [ /\\\\\\^\\{c\\}/g, '\\u0109' ],\n [ /\\\\.\\{C\\}/g, '\\u010A' ],\n [ /\\\\.\\{c\\}/g, '\\u010B' ],\n [ /\\\\v\\{C\\}/g, '\\u010C' ],\n [ /\\\\v\\{c\\}/g, '\\u010D' ],\n [ /\\\\v\\{D\\}/g, '\\u010E' ],\n [ /\\\\v\\{d\\}/g, '\\u010F' ],\n [ /\\\\DJ /g, '\\u0110' ],\n [ /\\\\dj /g, '\\u0111' ],\n [ /\\\\=\\{E\\}/g, '\\u0112' ],\n [ /\\\\=\\{e\\}/g, '\\u0113' ],\n [ /\\\\u\\{E\\}/g, '\\u0114' ],\n [ /\\\\u\\{e\\}/g, '\\u0115' ],\n [ /\\\\.\\{E\\}/g, '\\u0116' ],\n [ /\\\\.\\{e\\}/g, '\\u0117' ],\n [ /\\\\k\\{E\\}/g, '\\u0118' ],\n [ /\\\\k\\{e\\}/g, '\\u0119' ],\n [ /\\\\v\\{E\\}/g, '\\u011A' ],\n [ /\\\\v\\{e\\}/g, '\\u011B' ],\n [ /\\\\\\^\\{G\\}/g, '\\u011C' ],\n [ /\\\\\\^\\{g\\}/g, '\\u011D' ],\n [ /\\\\u\\{G\\}/g, '\\u011E' ],\n [ /\\\\u\\{g\\}/g, '\\u011F' ],\n [ /\\\\.\\{G\\}/g, '\\u0120' ],\n [ /\\\\.\\{g\\}/g, '\\u0121' ],\n [ /\\\\c\\{G\\}/g, '\\u0122' ],\n [ /\\\\c\\{g\\}/g, '\\u0123' ],\n [ /\\\\\\^\\{H\\}/g, '\\u0124' ],\n [ /\\\\\\^\\{h\\}/g, '\\u0125' ],\n [ /\\\\Elzxh /g, '\\u0127' ],\n [ /\\\\~\\{I\\}/g, '\\u0128' ],\n [ /\\\\~\\{\\\\i\\}/g, '\\u0129' ],\n [ /\\\\=\\{I\\}/g, '\\u012A' ],\n [ /\\\\=\\{\\\\i\\}/g, '\\u012B' ],\n [ /\\\\u\\{I\\}/g, '\\u012C' ],\n [ /\\\\u\\{\\\\i\\}/g, '\\u012D' ],\n [ /\\\\k\\{I\\}/g, '\\u012E' ],\n [ /\\\\k\\{i\\}/g, '\\u012F' ],\n [ /\\\\.\\{I\\}/g, '\\u0130' ],\n [ /\\\\i /g, '\\u0131' ],\n [ /\\\\\\^\\{J\\}/g, '\\u0134' ],\n [ /\\\\\\^\\{\\\\j\\}/g, '\\u0135' ],\n [ /\\\\c\\{K\\}/g, '\\u0136' ],\n [ /\\\\c\\{k\\}/g, '\\u0137' ],\n [ /\\\\'\\{L\\}/g, '\\u0139' ],\n [ /\\\\'\\{l\\}/g, '\\u013A' ],\n [ /\\\\c\\{L\\}/g, '\\u013B' ],\n [ /\\\\c\\{l\\}/g, '\\u013C' ],\n [ /\\\\v\\{L\\}/g, '\\u013D' ],\n [ /\\\\v\\{l\\}/g, '\\u013E' ],\n [ /\\\\L /g, '\\u0141' ],\n [ /\\\\l /g, '\\u0142' ],\n [ /\\\\'\\{N\\}/g, '\\u0143' ],\n [ /\\\\'\\{n\\}/g, '\\u0144' ],\n [ /\\\\c\\{N\\}/g, '\\u0145' ],\n [ /\\\\c\\{n\\}/g, '\\u0146' ],\n [ /\\\\v\\{N\\}/g, '\\u0147' ],\n [ /\\\\v\\{n\\}/g, '\\u0148' ],\n [ /\\\\NG /g, '\\u014A' ],\n [ /\\\\ng /g, '\\u014B' ],\n [ /\\\\=\\{O\\}/g, '\\u014C' ],\n [ /\\\\=\\{o\\}/g, '\\u014D' ],\n [ /\\\\u\\{O\\}/g, '\\u014E' ],\n [ /\\\\u\\{o\\}/g, '\\u014F' ],\n [ /\\\\H\\{O\\}/g, '\\u0150' ],\n [ /\\\\H\\{o\\}/g, '\\u0151' ],\n [ /\\\\OE /g, '\\u0152' ],\n [ /\\\\oe /g, '\\u0153' ],\n [ /\\\\'\\{R\\}/g, '\\u0154' ],\n [ /\\\\'\\{r\\}/g, '\\u0155' ],\n [ /\\\\c\\{R\\}/g, '\\u0156' ],\n [ /\\\\c\\{r\\}/g, '\\u0157' ],\n [ /\\\\v\\{R\\}/g, '\\u0158' ],\n [ /\\\\v\\{r\\}/g, '\\u0159' ],\n [ /\\\\'\\{S\\}/g, '\\u015A' ],\n [ /\\\\'\\{s\\}/g, '\\u015B' ],\n [ /\\\\\\^\\{S\\}/g, '\\u015C' ],\n [ /\\\\\\^\\{s\\}/g, '\\u015D' ],\n [ /\\\\c\\{S\\}/g, '\\u015E' ],\n [ /\\\\c\\{s\\}/g, '\\u015F' ],\n [ /\\\\v\\{S\\}/g, '\\u0160' ],\n [ /\\\\v\\{s\\}/g, '\\u0161' ],\n [ /\\\\c\\{T\\}/g, '\\u0162' ],\n [ /\\\\c\\{t\\}/g, '\\u0163' ],\n [ /\\\\v\\{T\\}/g, '\\u0164' ],\n [ /\\\\v\\{t\\}/g, '\\u0165' ],\n [ /\\\\~\\{U\\}/g, '\\u0168' ],\n [ /\\\\~\\{u\\}/g, '\\u0169' ],\n [ /\\\\=\\{U\\}/g, '\\u016A' ],\n [ /\\\\=\\{u\\}/g, '\\u016B' ],\n [ /\\\\u\\{U\\}/g, '\\u016C' ],\n [ /\\\\u\\{u\\}/g, '\\u016D' ],\n [ /\\\\r\\{U\\}/g, '\\u016E' ],\n [ /\\\\r\\{u\\}/g, '\\u016F' ],\n [ /\\\\H\\{U\\}/g, '\\u0170' ],\n [ /\\\\H\\{u\\}/g, '\\u0171' ],\n [ /\\\\k\\{U\\}/g, '\\u0172' ],\n [ /\\\\k\\{u\\}/g, '\\u0173' ],\n [ /\\\\\\^\\{W\\}/g, '\\u0174' ],\n [ /\\\\\\^\\{w\\}/g, '\\u0175' ],\n [ /\\\\\\^\\{Y\\}/g, '\\u0176' ],\n [ /\\\\\\^\\{y\\}/g, '\\u0177' ],\n [ /\\\\\"\\{Y\\}/g, '\\u0178' ],\n [ /\\\\'\\{Z\\}/g, '\\u0179' ],\n [ /\\\\'\\{z\\}/g, '\\u017A' ],\n [ /\\\\.\\{Z\\}/g, '\\u017B' ],\n [ /\\\\.\\{z\\}/g, '\\u017C' ],\n [ /\\\\v\\{Z\\}/g, '\\u017D' ],\n [ /\\\\v\\{z\\}/g, '\\u017E' ],\n [ /\\\\texthvlig /g, '\\u0195' ],\n [ /\\\\textnrleg /g, '\\u019E' ],\n [ /\\\\eth /g, '\\u01AA' ],\n [ /\\\\textdoublepipe /g, '\\u01C2' ],\n [ /\\\\'\\{g\\}/g, '\\u01F5' ],\n [ /\\\\Elztrna /g, '\\u0250' ],\n [ /\\\\Elztrnsa /g, '\\u0252' ],\n [ /\\\\Elzopeno /g, '\\u0254' ],\n [ /\\\\Elzrtld /g, '\\u0256' ],\n [ /\\\\Elzschwa /g, '\\u0259' ],\n [ /\\\\varepsilon /g, '\\u025B' ],\n [ /\\\\Elzpgamma /g, '\\u0263' ],\n [ /\\\\Elzpbgam /g, '\\u0264' ],\n [ /\\\\Elztrnh /g, '\\u0265' ],\n [ /\\\\Elzbtdl /g, '\\u026C' ],\n [ /\\\\Elzrtll /g, '\\u026D' ],\n [ /\\\\Elztrnm /g, '\\u026F' ],\n [ /\\\\Elztrnmlr /g, '\\u0270' ],\n [ /\\\\Elzltlmr /g, '\\u0271' ],\n [ /\\\\Elzltln /g, '\\u0272' ],\n [ /\\\\Elzrtln /g, '\\u0273' ],\n [ /\\\\Elzclomeg /g, '\\u0277' ],\n [ /\\\\textphi /g, '\\u0278' ],\n [ /\\\\Elztrnr /g, '\\u0279' ],\n [ /\\\\Elztrnrl /g, '\\u027A' ],\n [ /\\\\Elzrttrnr /g, '\\u027B' ],\n [ /\\\\Elzrl /g, '\\u027C' ],\n [ /\\\\Elzrtlr /g, '\\u027D' ],\n [ /\\\\Elzfhr /g, '\\u027E' ],\n [ /\\\\Elzrtls /g, '\\u0282' ],\n [ /\\\\Elzesh /g, '\\u0283' ],\n [ /\\\\Elztrnt /g, '\\u0287' ],\n [ /\\\\Elzrtlt /g, '\\u0288' ],\n [ /\\\\Elzpupsil /g, '\\u028A' ],\n [ /\\\\Elzpscrv /g, '\\u028B' ],\n [ /\\\\Elzinvv /g, '\\u028C' ],\n [ /\\\\Elzinvw /g, '\\u028D' ],\n [ /\\\\Elztrny /g, '\\u028E' ],\n [ /\\\\Elzrtlz /g, '\\u0290' ],\n [ /\\\\Elzyogh /g, '\\u0292' ],\n [ /\\\\Elzglst /g, '\\u0294' ],\n [ /\\\\Elzreglst /g, '\\u0295' ],\n [ /\\\\Elzinglst /g, '\\u0296' ],\n [ /\\\\textturnk /g, '\\u029E' ],\n [ /\\\\Elzdyogh /g, '\\u02A4' ],\n [ /\\\\Elztesh /g, '\\u02A7' ],\n [ /\\\\textasciicaron /g, '\\u02C7' ],\n [ /\\\\Elzverts /g, '\\u02C8' ],\n [ /\\\\Elzverti /g, '\\u02CC' ],\n [ /\\\\Elzlmrk /g, '\\u02D0' ],\n [ /\\\\Elzhlmrk /g, '\\u02D1' ],\n [ /\\\\Elzsbrhr /g, '\\u02D2' ],\n [ /\\\\Elzsblhr /g, '\\u02D3' ],\n [ /\\\\Elzrais /g, '\\u02D4' ],\n [ /\\\\Elzlow /g, '\\u02D5' ],\n [ /\\\\textasciibreve /g, '\\u02D8' ],\n [ /\\\\textperiodcentered /g, '\\u02D9' ],\n [ /\\\\r\\{\\}/g, '\\u02DA' ],\n [ /\\\\k\\{\\}/g, '\\u02DB' ],\n [ /\\\\texttildelow /g, '\\u02DC' ],\n [ /\\\\H\\{\\}/g, '\\u02DD' ],\n [ /\\\\tone\\{55\\}/g, '\\u02E5' ],\n [ /\\\\tone\\{44\\}/g, '\\u02E6' ],\n [ /\\\\tone\\{33\\}/g, '\\u02E7' ],\n [ /\\\\tone\\{22\\}/g, '\\u02E8' ],\n [ /\\\\tone\\{11\\}/g, '\\u02E9' ],\n [ /\\\\cyrchar\\\\C/g, '\\u030F' ],\n [ /\\\\Elzpalh /g, '\\u0321' ],\n [ /\\\\Elzrh /g, '\\u0322' ],\n [ /\\\\Elzsbbrg /g, '\\u032A' ],\n [ /\\\\Elzxl /g, '\\u0335' ],\n [ /\\\\Elzbar /g, '\\u0336' ],\n [ /\\\\'\\{A\\}/g, '\\u0386' ],\n [ /\\\\'\\{E\\}/g, '\\u0388' ],\n [ /\\\\'\\{H\\}/g, '\\u0389' ],\n [ /\\\\'\\{\\}\\{I\\}/g, '\\u038A' ],\n [ /\\\\'\\{\\}O/g, '\\u038C' ],\n [ /\\\\mathrm\\{'Y\\}/g, '\\u038E' ],\n [ /\\\\mathrm\\{'\\\\Omega\\}/g, '\\u038F' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\iota\\}\\}/g, '\\u0390' ],\n [ /\\\\Alpha /g, '\\u0391' ],\n [ /\\\\Beta /g, '\\u0392' ],\n [ /\\\\Gamma /g, '\\u0393' ],\n [ /\\\\Delta /g, '\\u0394' ],\n [ /\\\\Epsilon /g, '\\u0395' ],\n [ /\\\\Zeta /g, '\\u0396' ],\n [ /\\\\Eta /g, '\\u0397' ],\n [ /\\\\Theta /g, '\\u0398' ],\n [ /\\\\Iota /g, '\\u0399' ],\n [ /\\\\Kappa /g, '\\u039A' ],\n [ /\\\\Lambda /g, '\\u039B' ],\n [ /\\\\Xi /g, '\\u039E' ],\n [ /\\\\Pi /g, '\\u03A0' ],\n [ /\\\\Rho /g, '\\u03A1' ],\n [ /\\\\Sigma /g, '\\u03A3' ],\n [ /\\\\Tau /g, '\\u03A4' ],\n [ /\\\\Upsilon /g, '\\u03A5' ],\n [ /\\\\Phi /g, '\\u03A6' ],\n [ /\\\\Chi /g, '\\u03A7' ],\n [ /\\\\Psi /g, '\\u03A8' ],\n [ /\\\\Omega /g, '\\u03A9' ],\n [ /\\\\mathrm\\{\\\\ddot\\{I\\}\\}/g, '\\u03AA' ],\n [ /\\\\mathrm\\{\\\\ddot\\{Y\\}\\}/g, '\\u03AB' ],\n [ /\\\\'\\{\\$\\\\alpha\\$\\}/g, '\\u03AC' ],\n [ /\\\\acute\\{\\\\epsilon\\}/g, '\\u03AD' ],\n [ /\\\\acute\\{\\\\eta\\}/g, '\\u03AE' ],\n [ /\\\\acute\\{\\\\iota\\}/g, '\\u03AF' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\upsilon\\}\\}/g, '\\u03B0' ],\n [ /\\\\alpha /g, '\\u03B1' ],\n [ /\\\\beta /g, '\\u03B2' ],\n [ /\\\\gamma /g, '\\u03B3' ],\n [ /\\\\delta /g, '\\u03B4' ],\n [ /\\\\epsilon /g, '\\u03B5' ],\n [ /\\\\zeta /g, '\\u03B6' ],\n [ /\\\\eta /g, '\\u03B7' ],\n [ /\\\\texttheta /g, '\\u03B8' ],\n [ /\\\\iota /g, '\\u03B9' ],\n [ /\\\\kappa /g, '\\u03BA' ],\n [ /\\\\lambda /g, '\\u03BB' ],\n [ /\\\\mu /g, '\\u03BC' ],\n [ /\\\\nu /g, '\\u03BD' ],\n [ /\\\\xi /g, '\\u03BE' ],\n [ /\\\\pi /g, '\\u03C0' ],\n [ /\\\\rho /g, '\\u03C1' ],\n [ /\\\\varsigma /g, '\\u03C2' ],\n [ /\\\\sigma /g, '\\u03C3' ],\n [ /\\\\tau /g, '\\u03C4' ],\n [ /\\\\upsilon /g, '\\u03C5' ],\n [ /\\\\varphi /g, '\\u03C6' ],\n [ /\\\\chi /g, '\\u03C7' ],\n [ /\\\\psi /g, '\\u03C8' ],\n [ /\\\\omega /g, '\\u03C9' ],\n [ /\\\\ddot\\{\\\\iota\\}/g, '\\u03CA' ],\n [ /\\\\ddot\\{\\\\upsilon\\}/g, '\\u03CB' ],\n [ /\\\\'\\{o\\}/g, '\\u03CC' ],\n [ /\\\\acute\\{\\\\upsilon\\}/g, '\\u03CD' ],\n [ /\\\\acute\\{\\\\omega\\}/g, '\\u03CE' ],\n [ /\\\\Pisymbol\\{ppi022\\}\\{87\\}/g, '\\u03D0' ],\n [ /\\\\textvartheta /g, '\\u03D1' ],\n [ /\\\\Upsilon /g, '\\u03D2' ],\n [ /\\\\phi /g, '\\u03D5' ],\n [ /\\\\varpi /g, '\\u03D6' ],\n [ /\\\\Stigma /g, '\\u03DA' ],\n [ /\\\\Digamma /g, '\\u03DC' ],\n [ /\\\\digamma /g, '\\u03DD' ],\n [ /\\\\Koppa /g, '\\u03DE' ],\n [ /\\\\Sampi /g, '\\u03E0' ],\n [ /\\\\varkappa /g, '\\u03F0' ],\n [ /\\\\varrho /g, '\\u03F1' ],\n [ /\\\\textTheta /g, '\\u03F4' ],\n [ /\\\\backepsilon /g, '\\u03F6' ],\n [ /\\\\cyrchar\\\\CYRYO /g, '\\u0401' ],\n [ /\\\\cyrchar\\\\CYRDJE /g, '\\u0402' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRG\\}/g, '\\u0403' ],\n [ /\\\\cyrchar\\\\CYRIE /g, '\\u0404' ],\n [ /\\\\cyrchar\\\\CYRDZE /g, '\\u0405' ],\n [ /\\\\cyrchar\\\\CYRII /g, '\\u0406' ],\n [ /\\\\cyrchar\\\\CYRYI /g, '\\u0407' ],\n [ /\\\\cyrchar\\\\CYRJE /g, '\\u0408' ],\n [ /\\\\cyrchar\\\\CYRLJE /g, '\\u0409' ],\n [ /\\\\cyrchar\\\\CYRNJE /g, '\\u040A' ],\n [ /\\\\cyrchar\\\\CYRTSHE /g, '\\u040B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRK\\}/g, '\\u040C' ],\n [ /\\\\cyrchar\\\\CYRUSHRT /g, '\\u040E' ],\n [ /\\\\cyrchar\\\\CYRDZHE /g, '\\u040F' ],\n [ /\\\\cyrchar\\\\CYRA /g, '\\u0410' ],\n [ /\\\\cyrchar\\\\CYRB /g, '\\u0411' ],\n [ /\\\\cyrchar\\\\CYRV /g, '\\u0412' ],\n [ /\\\\cyrchar\\\\CYRG /g, '\\u0413' ],\n [ /\\\\cyrchar\\\\CYRD /g, '\\u0414' ],\n [ /\\\\cyrchar\\\\CYRE /g, '\\u0415' ],\n [ /\\\\cyrchar\\\\CYRZH /g, '\\u0416' ],\n [ /\\\\cyrchar\\\\CYRZ /g, '\\u0417' ],\n [ /\\\\cyrchar\\\\CYRI /g, '\\u0418' ],\n [ /\\\\cyrchar\\\\CYRISHRT /g, '\\u0419' ],\n [ /\\\\cyrchar\\\\CYRK /g, '\\u041A' ],\n [ /\\\\cyrchar\\\\CYRL /g, '\\u041B' ],\n [ /\\\\cyrchar\\\\CYRM /g, '\\u041C' ],\n [ /\\\\cyrchar\\\\CYRN /g, '\\u041D' ],\n [ /\\\\cyrchar\\\\CYRO /g, '\\u041E' ],\n [ /\\\\cyrchar\\\\CYRP /g, '\\u041F' ],\n [ /\\\\cyrchar\\\\CYRR /g, '\\u0420' ],\n [ /\\\\cyrchar\\\\CYRS /g, '\\u0421' ],\n [ /\\\\cyrchar\\\\CYRT /g, '\\u0422' ],\n [ /\\\\cyrchar\\\\CYRU /g, '\\u0423' ],\n [ /\\\\cyrchar\\\\CYRF /g, '\\u0424' ],\n [ /\\\\cyrchar\\\\CYRH /g, '\\u0425' ],\n [ /\\\\cyrchar\\\\CYRC /g, '\\u0426' ],\n [ /\\\\cyrchar\\\\CYRCH /g, '\\u0427' ],\n [ /\\\\cyrchar\\\\CYRSH /g, '\\u0428' ],\n [ /\\\\cyrchar\\\\CYRSHCH /g, '\\u0429' ],\n [ /\\\\cyrchar\\\\CYRHRDSN /g, '\\u042A' ],\n [ /\\\\cyrchar\\\\CYRERY /g, '\\u042B' ],\n [ /\\\\cyrchar\\\\CYRSFTSN /g, '\\u042C' ],\n [ /\\\\cyrchar\\\\CYREREV /g, '\\u042D' ],\n [ /\\\\cyrchar\\\\CYRYU /g, '\\u042E' ],\n [ /\\\\cyrchar\\\\CYRYA /g, '\\u042F' ],\n [ /\\\\cyrchar\\\\cyra /g, '\\u0430' ],\n [ /\\\\cyrchar\\\\cyrb /g, '\\u0431' ],\n [ /\\\\cyrchar\\\\cyrv /g, '\\u0432' ],\n [ /\\\\cyrchar\\\\cyrg /g, '\\u0433' ],\n [ /\\\\cyrchar\\\\cyrd /g, '\\u0434' ],\n [ /\\\\cyrchar\\\\cyre /g, '\\u0435' ],\n [ /\\\\cyrchar\\\\cyrzh /g, '\\u0436' ],\n [ /\\\\cyrchar\\\\cyrz /g, '\\u0437' ],\n [ /\\\\cyrchar\\\\cyri /g, '\\u0438' ],\n [ /\\\\cyrchar\\\\cyrishrt /g, '\\u0439' ],\n [ /\\\\cyrchar\\\\cyrk /g, '\\u043A' ],\n [ /\\\\cyrchar\\\\cyrl /g, '\\u043B' ],\n [ /\\\\cyrchar\\\\cyrm /g, '\\u043C' ],\n [ /\\\\cyrchar\\\\cyrn /g, '\\u043D' ],\n [ /\\\\cyrchar\\\\cyro /g, '\\u043E' ],\n [ /\\\\cyrchar\\\\cyrp /g, '\\u043F' ],\n [ /\\\\cyrchar\\\\cyrr /g, '\\u0440' ],\n [ /\\\\cyrchar\\\\cyrs /g, '\\u0441' ],\n [ /\\\\cyrchar\\\\cyrt /g, '\\u0442' ],\n [ /\\\\cyrchar\\\\cyru /g, '\\u0443' ],\n [ /\\\\cyrchar\\\\cyrf /g, '\\u0444' ],\n [ /\\\\cyrchar\\\\cyrh /g, '\\u0445' ],\n [ /\\\\cyrchar\\\\cyrc /g, '\\u0446' ],\n [ /\\\\cyrchar\\\\cyrch /g, '\\u0447' ],\n [ /\\\\cyrchar\\\\cyrsh /g, '\\u0448' ],\n [ /\\\\cyrchar\\\\cyrshch /g, '\\u0449' ],\n [ /\\\\cyrchar\\\\cyrhrdsn /g, '\\u044A' ],\n [ /\\\\cyrchar\\\\cyrery /g, '\\u044B' ],\n [ /\\\\cyrchar\\\\cyrsftsn /g, '\\u044C' ],\n [ /\\\\cyrchar\\\\cyrerev /g, '\\u044D' ],\n [ /\\\\cyrchar\\\\cyryu /g, '\\u044E' ],\n [ /\\\\cyrchar\\\\cyrya /g, '\\u044F' ],\n [ /\\\\cyrchar\\\\cyryo /g, '\\u0451' ],\n [ /\\\\cyrchar\\\\cyrdje /g, '\\u0452' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrg\\}/g, '\\u0453' ],\n [ /\\\\cyrchar\\\\cyrie /g, '\\u0454' ],\n [ /\\\\cyrchar\\\\cyrdze /g, '\\u0455' ],\n [ /\\\\cyrchar\\\\cyrii /g, '\\u0456' ],\n [ /\\\\cyrchar\\\\cyryi /g, '\\u0457' ],\n [ /\\\\cyrchar\\\\cyrje /g, '\\u0458' ],\n [ /\\\\cyrchar\\\\cyrlje /g, '\\u0459' ],\n [ /\\\\cyrchar\\\\cyrnje /g, '\\u045A' ],\n [ /\\\\cyrchar\\\\cyrtshe /g, '\\u045B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrk\\}/g, '\\u045C' ],\n [ /\\\\cyrchar\\\\cyrushrt /g, '\\u045E' ],\n [ /\\\\cyrchar\\\\cyrdzhe /g, '\\u045F' ],\n [ /\\\\cyrchar\\\\CYROMEGA /g, '\\u0460' ],\n [ /\\\\cyrchar\\\\cyromega /g, '\\u0461' ],\n [ /\\\\cyrchar\\\\CYRYAT /g, '\\u0462' ],\n [ /\\\\cyrchar\\\\CYRIOTE /g, '\\u0464' ],\n [ /\\\\cyrchar\\\\cyriote /g, '\\u0465' ],\n [ /\\\\cyrchar\\\\CYRLYUS /g, '\\u0466' ],\n [ /\\\\cyrchar\\\\cyrlyus /g, '\\u0467' ],\n [ /\\\\cyrchar\\\\CYRIOTLYUS /g, '\\u0468' ],\n [ /\\\\cyrchar\\\\cyriotlyus /g, '\\u0469' ],\n [ /\\\\cyrchar\\\\CYRBYUS /g, '\\u046A' ],\n [ /\\\\cyrchar\\\\CYRIOTBYUS /g, '\\u046C' ],\n [ /\\\\cyrchar\\\\cyriotbyus /g, '\\u046D' ],\n [ /\\\\cyrchar\\\\CYRKSI /g, '\\u046E' ],\n [ /\\\\cyrchar\\\\cyrksi /g, '\\u046F' ],\n [ /\\\\cyrchar\\\\CYRPSI /g, '\\u0470' ],\n [ /\\\\cyrchar\\\\cyrpsi /g, '\\u0471' ],\n [ /\\\\cyrchar\\\\CYRFITA /g, '\\u0472' ],\n [ /\\\\cyrchar\\\\CYRIZH /g, '\\u0474' ],\n [ /\\\\cyrchar\\\\CYRUK /g, '\\u0478' ],\n [ /\\\\cyrchar\\\\cyruk /g, '\\u0479' ],\n [ /\\\\cyrchar\\\\CYROMEGARND /g, '\\u047A' ],\n [ /\\\\cyrchar\\\\cyromegarnd /g, '\\u047B' ],\n [ /\\\\cyrchar\\\\CYROMEGATITLO /g, '\\u047C' ],\n [ /\\\\cyrchar\\\\cyromegatitlo /g, '\\u047D' ],\n [ /\\\\cyrchar\\\\CYROT /g, '\\u047E' ],\n [ /\\\\cyrchar\\\\cyrot /g, '\\u047F' ],\n [ /\\\\cyrchar\\\\CYRKOPPA /g, '\\u0480' ],\n [ /\\\\cyrchar\\\\cyrkoppa /g, '\\u0481' ],\n [ /\\\\cyrchar\\\\cyrthousands /g, '\\u0482' ],\n [ /\\\\cyrchar\\\\cyrhundredthousands /g, '\\u0488' ],\n [ /\\\\cyrchar\\\\cyrmillions /g, '\\u0489' ],\n [ /\\\\cyrchar\\\\CYRSEMISFTSN /g, '\\u048C' ],\n [ /\\\\cyrchar\\\\cyrsemisftsn /g, '\\u048D' ],\n [ /\\\\cyrchar\\\\CYRRTICK /g, '\\u048E' ],\n [ /\\\\cyrchar\\\\cyrrtick /g, '\\u048F' ],\n [ /\\\\cyrchar\\\\CYRGUP /g, '\\u0490' ],\n [ /\\\\cyrchar\\\\cyrgup /g, '\\u0491' ],\n [ /\\\\cyrchar\\\\CYRGHCRS /g, '\\u0492' ],\n [ /\\\\cyrchar\\\\cyrghcrs /g, '\\u0493' ],\n [ /\\\\cyrchar\\\\CYRGHK /g, '\\u0494' ],\n [ /\\\\cyrchar\\\\cyrghk /g, '\\u0495' ],\n [ /\\\\cyrchar\\\\CYRZHDSC /g, '\\u0496' ],\n [ /\\\\cyrchar\\\\cyrzhdsc /g, '\\u0497' ],\n [ /\\\\cyrchar\\\\CYRZDSC /g, '\\u0498' ],\n [ /\\\\cyrchar\\\\cyrzdsc /g, '\\u0499' ],\n [ /\\\\cyrchar\\\\CYRKDSC /g, '\\u049A' ],\n [ /\\\\cyrchar\\\\cyrkdsc /g, '\\u049B' ],\n [ /\\\\cyrchar\\\\CYRKVCRS /g, '\\u049C' ],\n [ /\\\\cyrchar\\\\cyrkvcrs /g, '\\u049D' ],\n [ /\\\\cyrchar\\\\CYRKHCRS /g, '\\u049E' ],\n [ /\\\\cyrchar\\\\cyrkhcrs /g, '\\u049F' ],\n [ /\\\\cyrchar\\\\CYRKBEAK /g, '\\u04A0' ],\n [ /\\\\cyrchar\\\\cyrkbeak /g, '\\u04A1' ],\n [ /\\\\cyrchar\\\\CYRNDSC /g, '\\u04A2' ],\n [ /\\\\cyrchar\\\\cyrndsc /g, '\\u04A3' ],\n [ /\\\\cyrchar\\\\CYRNG /g, '\\u04A4' ],\n [ /\\\\cyrchar\\\\cyrng /g, '\\u04A5' ],\n [ /\\\\cyrchar\\\\CYRPHK /g, '\\u04A6' ],\n [ /\\\\cyrchar\\\\cyrphk /g, '\\u04A7' ],\n [ /\\\\cyrchar\\\\CYRABHHA /g, '\\u04A8' ],\n [ /\\\\cyrchar\\\\cyrabhha /g, '\\u04A9' ],\n [ /\\\\cyrchar\\\\CYRSDSC /g, '\\u04AA' ],\n [ /\\\\cyrchar\\\\cyrsdsc /g, '\\u04AB' ],\n [ /\\\\cyrchar\\\\CYRTDSC /g, '\\u04AC' ],\n [ /\\\\cyrchar\\\\cyrtdsc /g, '\\u04AD' ],\n [ /\\\\cyrchar\\\\CYRY /g, '\\u04AE' ],\n [ /\\\\cyrchar\\\\cyry /g, '\\u04AF' ],\n [ /\\\\cyrchar\\\\CYRYHCRS /g, '\\u04B0' ],\n [ /\\\\cyrchar\\\\cyryhcrs /g, '\\u04B1' ],\n [ /\\\\cyrchar\\\\CYRHDSC /g, '\\u04B2' ],\n [ /\\\\cyrchar\\\\cyrhdsc /g, '\\u04B3' ],\n [ /\\\\cyrchar\\\\CYRTETSE /g, '\\u04B4' ],\n [ /\\\\cyrchar\\\\cyrtetse /g, '\\u04B5' ],\n [ /\\\\cyrchar\\\\CYRCHRDSC /g, '\\u04B6' ],\n [ /\\\\cyrchar\\\\cyrchrdsc /g, '\\u04B7' ],\n [ /\\\\cyrchar\\\\CYRCHVCRS /g, '\\u04B8' ],\n [ /\\\\cyrchar\\\\cyrchvcrs /g, '\\u04B9' ],\n [ /\\\\cyrchar\\\\CYRSHHA /g, '\\u04BA' ],\n [ /\\\\cyrchar\\\\cyrshha /g, '\\u04BB' ],\n [ /\\\\cyrchar\\\\CYRABHCH /g, '\\u04BC' ],\n [ /\\\\cyrchar\\\\cyrabhch /g, '\\u04BD' ],\n [ /\\\\cyrchar\\\\CYRABHCHDSC /g, '\\u04BE' ],\n [ /\\\\cyrchar\\\\cyrabhchdsc /g, '\\u04BF' ],\n [ /\\\\cyrchar\\\\CYRpalochka /g, '\\u04C0' ],\n [ /\\\\cyrchar\\\\CYRKHK /g, '\\u04C3' ],\n [ /\\\\cyrchar\\\\cyrkhk /g, '\\u04C4' ],\n [ /\\\\cyrchar\\\\CYRNHK /g, '\\u04C7' ],\n [ /\\\\cyrchar\\\\cyrnhk /g, '\\u04C8' ],\n [ /\\\\cyrchar\\\\CYRCHLDSC /g, '\\u04CB' ],\n [ /\\\\cyrchar\\\\cyrchldsc /g, '\\u04CC' ],\n [ /\\\\cyrchar\\\\CYRAE /g, '\\u04D4' ],\n [ /\\\\cyrchar\\\\cyrae /g, '\\u04D5' ],\n [ /\\\\cyrchar\\\\CYRSCHWA /g, '\\u04D8' ],\n [ /\\\\cyrchar\\\\cyrschwa /g, '\\u04D9' ],\n [ /\\\\cyrchar\\\\CYRABHDZE /g, '\\u04E0' ],\n [ /\\\\cyrchar\\\\cyrabhdze /g, '\\u04E1' ],\n [ /\\\\cyrchar\\\\CYROTLD /g, '\\u04E8' ],\n [ /\\\\cyrchar\\\\cyrotld /g, '\\u04E9' ],\n [ /\\\\hspace\\{0.6em\\}/g, '\\u2002' ],\n [ /\\\\hspace\\{1em\\}/g, '\\u2003' ],\n [ /\\\\hspace\\{0.33em\\}/g, '\\u2004' ],\n [ /\\\\hspace\\{0.25em\\}/g, '\\u2005' ],\n [ /\\\\hspace\\{0.166em\\}/g, '\\u2006' ],\n [ /\\\\hphantom\\{0\\}/g, '\\u2007' ],\n [ /\\\\hphantom\\{,\\}/g, '\\u2008' ],\n [ /\\\\hspace\\{0.167em\\}/g, '\\u2009' ],\n [ /\\\\mkern1mu /g, '\\u200A' ],\n [ /\\\\textendash /g, '\\u2013' ],\n [ /\\\\textemdash /g, '\\u2014' ],\n [ /\\\\rule\\{1em\\}\\{1pt\\}/g, '\\u2015' ],\n [ /\\\\Vert /g, '\\u2016' ],\n [ /\\\\Elzreapos /g, '\\u201B' ],\n [ /\\\\textquotedblleft /g, '\\u201C' ],\n [ /\\\\textquotedblright /g, '\\u201D' ],\n [ /\\\\textdagger /g, '\\u2020' ],\n [ /\\\\textdaggerdbl /g, '\\u2021' ],\n [ /\\\\textbullet /g, '\\u2022' ],\n [ /\\\\ldots /g, '\\u2026' ],\n [ /\\\\textperthousand /g, '\\u2030' ],\n [ /\\\\textpertenthousand /g, '\\u2031' ],\n [ /\\\\backprime /g, '\\u2035' ],\n [ /\\\\guilsinglleft /g, '\\u2039' ],\n [ /\\\\guilsinglright /g, '\\u203A' ],\n [ /\\\\mkern4mu /g, '\\u205F' ],\n [ /\\\\nolinebreak /g, '\\u2060' ],\n [ /\\\\ensuremath\\{\\\\Elzpes\\}/g, '\\u20A7' ],\n [ /\\\\mbox\\{\\\\texteuro\\} /g, '\\u20AC' ],\n [ /\\\\dddot /g, '\\u20DB' ],\n [ /\\\\ddddot /g, '\\u20DC' ],\n [ /\\\\mathbb\\{C\\}/g, '\\u2102' ],\n [ /\\\\mathscr\\{g\\}/g, '\\u210A' ],\n [ /\\\\mathscr\\{H\\}/g, '\\u210B' ],\n [ /\\\\mathfrak\\{H\\}/g, '\\u210C' ],\n [ /\\\\mathbb\\{H\\}/g, '\\u210D' ],\n [ /\\\\hslash /g, '\\u210F' ],\n [ /\\\\mathscr\\{I\\}/g, '\\u2110' ],\n [ /\\\\mathfrak\\{I\\}/g, '\\u2111' ],\n [ /\\\\mathscr\\{L\\}/g, '\\u2112' ],\n [ /\\\\mathscr\\{l\\}/g, '\\u2113' ],\n [ /\\\\mathbb\\{N\\}/g, '\\u2115' ],\n [ /\\\\cyrchar\\\\textnumero /g, '\\u2116' ],\n [ /\\\\wp /g, '\\u2118' ],\n [ /\\\\mathbb\\{P\\}/g, '\\u2119' ],\n [ /\\\\mathbb\\{Q\\}/g, '\\u211A' ],\n [ /\\\\mathscr\\{R\\}/g, '\\u211B' ],\n [ /\\\\mathfrak\\{R\\}/g, '\\u211C' ],\n [ /\\\\mathbb\\{R\\}/g, '\\u211D' ],\n [ /\\\\Elzxrat /g, '\\u211E' ],\n [ /\\\\texttrademark /g, '\\u2122' ],\n [ /\\\\mathbb\\{Z\\}/g, '\\u2124' ],\n [ /\\\\Omega /g, '\\u2126' ],\n [ /\\\\mho /g, '\\u2127' ],\n [ /\\\\mathfrak\\{Z\\}/g, '\\u2128' ],\n [ /\\\\ElsevierGlyph\\{2129\\}/g, '\\u2129' ],\n [ /\\\\AA /g, '\\u212B' ],\n [ /\\\\mathscr\\{B\\}/g, '\\u212C' ],\n [ /\\\\mathfrak\\{C\\}/g, '\\u212D' ],\n [ /\\\\mathscr\\{e\\}/g, '\\u212F' ],\n [ /\\\\mathscr\\{E\\}/g, '\\u2130' ],\n [ /\\\\mathscr\\{F\\}/g, '\\u2131' ],\n [ /\\\\mathscr\\{M\\}/g, '\\u2133' ],\n [ /\\\\mathscr\\{o\\}/g, '\\u2134' ],\n [ /\\\\aleph /g, '\\u2135' ],\n [ /\\\\beth /g, '\\u2136' ],\n [ /\\\\gimel /g, '\\u2137' ],\n [ /\\\\daleth /g, '\\u2138' ],\n [ /\\\\textfrac\\{1\\}\\{3\\}/g, '\\u2153' ],\n [ /\\\\textfrac\\{2\\}\\{3\\}/g, '\\u2154' ],\n [ /\\\\textfrac\\{1\\}\\{5\\}/g, '\\u2155' ],\n [ /\\\\textfrac\\{2\\}\\{5\\}/g, '\\u2156' ],\n [ /\\\\textfrac\\{3\\}\\{5\\}/g, '\\u2157' ],\n [ /\\\\textfrac\\{4\\}\\{5\\}/g, '\\u2158' ],\n [ /\\\\textfrac\\{1\\}\\{6\\}/g, '\\u2159' ],\n [ /\\\\textfrac\\{5\\}\\{6\\}/g, '\\u215A' ],\n [ /\\\\textfrac\\{1\\}\\{8\\}/g, '\\u215B' ],\n [ /\\\\textfrac\\{3\\}\\{8\\}/g, '\\u215C' ],\n [ /\\\\textfrac\\{5\\}\\{8\\}/g, '\\u215D' ],\n [ /\\\\textfrac\\{7\\}\\{8\\}/g, '\\u215E' ],\n [ /\\\\leftarrow /g, '\\u2190' ],\n [ /\\\\uparrow /g, '\\u2191' ],\n [ /\\\\rightarrow /g, '\\u2192' ],\n [ /\\\\downarrow /g, '\\u2193' ],\n [ /\\\\leftrightarrow /g, '\\u2194' ],\n [ /\\\\updownarrow /g, '\\u2195' ],\n [ /\\\\nwarrow /g, '\\u2196' ],\n [ /\\\\nearrow /g, '\\u2197' ],\n [ /\\\\searrow /g, '\\u2198' ],\n [ /\\\\swarrow /g, '\\u2199' ],\n [ /\\\\nleftarrow /g, '\\u219A' ],\n [ /\\\\nrightarrow /g, '\\u219B' ],\n [ /\\\\arrowwaveright /g, '\\u219C' ],\n [ /\\\\arrowwaveright /g, '\\u219D' ],\n [ /\\\\twoheadleftarrow /g, '\\u219E' ],\n [ /\\\\twoheadrightarrow /g, '\\u21A0' ],\n [ /\\\\leftarrowtail /g, '\\u21A2' ],\n [ /\\\\rightarrowtail /g, '\\u21A3' ],\n [ /\\\\mapsto /g, '\\u21A6' ],\n [ /\\\\hookleftarrow /g, '\\u21A9' ],\n [ /\\\\hookrightarrow /g, '\\u21AA' ],\n [ /\\\\looparrowleft /g, '\\u21AB' ],\n [ /\\\\looparrowright /g, '\\u21AC' ],\n [ /\\\\leftrightsquigarrow /g, '\\u21AD' ],\n [ /\\\\nleftrightarrow /g, '\\u21AE' ],\n [ /\\\\Lsh /g, '\\u21B0' ],\n [ /\\\\Rsh /g, '\\u21B1' ],\n [ /\\\\ElsevierGlyph\\{21B3\\}/g, '\\u21B3' ],\n [ /\\\\curvearrowleft /g, '\\u21B6' ],\n [ /\\\\curvearrowright /g, '\\u21B7' ],\n [ /\\\\circlearrowleft /g, '\\u21BA' ],\n [ /\\\\circlearrowright /g, '\\u21BB' ],\n [ /\\\\leftharpoonup /g, '\\u21BC' ],\n [ /\\\\leftharpoondown /g, '\\u21BD' ],\n [ /\\\\upharpoonright /g, '\\u21BE' ],\n [ /\\\\upharpoonleft /g, '\\u21BF' ],\n [ /\\\\rightharpoonup /g, '\\u21C0' ],\n [ /\\\\rightharpoondown /g, '\\u21C1' ],\n [ /\\\\downharpoonright /g, '\\u21C2' ],\n [ /\\\\downharpoonleft /g, '\\u21C3' ],\n [ /\\\\rightleftarrows /g, '\\u21C4' ],\n [ /\\\\dblarrowupdown /g, '\\u21C5' ],\n [ /\\\\leftrightarrows /g, '\\u21C6' ],\n [ /\\\\leftleftarrows /g, '\\u21C7' ],\n [ /\\\\upuparrows /g, '\\u21C8' ],\n [ /\\\\rightrightarrows /g, '\\u21C9' ],\n [ /\\\\downdownarrows /g, '\\u21CA' ],\n [ /\\\\leftrightharpoons /g, '\\u21CB' ],\n [ /\\\\rightleftharpoons /g, '\\u21CC' ],\n [ /\\\\nLeftarrow /g, '\\u21CD' ],\n [ /\\\\nLeftrightarrow /g, '\\u21CE' ],\n [ /\\\\nRightarrow /g, '\\u21CF' ],\n [ /\\\\Leftarrow /g, '\\u21D0' ],\n [ /\\\\Uparrow /g, '\\u21D1' ],\n [ /\\\\Rightarrow /g, '\\u21D2' ],\n [ /\\\\Downarrow /g, '\\u21D3' ],\n [ /\\\\Leftrightarrow /g, '\\u21D4' ],\n [ /\\\\Updownarrow /g, '\\u21D5' ],\n [ /\\\\Lleftarrow /g, '\\u21DA' ],\n [ /\\\\Rrightarrow /g, '\\u21DB' ],\n [ /\\\\rightsquigarrow /g, '\\u21DD' ],\n [ /\\\\DownArrowUpArrow /g, '\\u21F5' ],\n [ /\\\\forall /g, '\\u2200' ],\n [ /\\\\complement /g, '\\u2201' ],\n [ /\\\\partial /g, '\\u2202' ],\n [ /\\\\exists /g, '\\u2203' ],\n [ /\\\\nexists /g, '\\u2204' ],\n [ /\\\\varnothing /g, '\\u2205' ],\n [ /\\\\nabla /g, '\\u2207' ],\n [ /\\\\in /g, '\\u2208' ],\n [ /\\\\not\\\\in /g, '\\u2209' ],\n [ /\\\\ni /g, '\\u220B' ],\n [ /\\\\not\\\\ni /g, '\\u220C' ],\n [ /\\\\prod /g, '\\u220F' ],\n [ /\\\\coprod /g, '\\u2210' ],\n [ /\\\\sum /g, '\\u2211' ],\n [ /\\\\mp /g, '\\u2213' ],\n [ /\\\\dotplus /g, '\\u2214' ],\n [ /\\\\setminus /g, '\\u2216' ],\n [ /\\\\circ /g, '\\u2218' ],\n [ /\\\\bullet /g, '\\u2219' ],\n [ /\\\\surd /g, '\\u221A' ],\n [ /\\\\propto /g, '\\u221D' ],\n [ /\\\\infty /g, '\\u221E' ],\n [ /\\\\rightangle /g, '\\u221F' ],\n [ /\\\\angle /g, '\\u2220' ],\n [ /\\\\measuredangle /g, '\\u2221' ],\n [ /\\\\sphericalangle /g, '\\u2222' ],\n [ /\\\\mid /g, '\\u2223' ],\n [ /\\\\nmid /g, '\\u2224' ],\n [ /\\\\parallel /g, '\\u2225' ],\n [ /\\\\nparallel /g, '\\u2226' ],\n [ /\\\\wedge /g, '\\u2227' ],\n [ /\\\\vee /g, '\\u2228' ],\n [ /\\\\cap /g, '\\u2229' ],\n [ /\\\\cup /g, '\\u222A' ],\n [ /\\\\int /g, '\\u222B' ],\n [ /\\\\int\\\\!\\\\int /g, '\\u222C' ],\n [ /\\\\int\\\\!\\\\int\\\\!\\\\int /g, '\\u222D' ],\n [ /\\\\oint /g, '\\u222E' ],\n [ /\\\\surfintegral /g, '\\u222F' ],\n [ /\\\\volintegral /g, '\\u2230' ],\n [ /\\\\clwintegral /g, '\\u2231' ],\n [ /\\\\ElsevierGlyph\\{2232\\}/g, '\\u2232' ],\n [ /\\\\ElsevierGlyph\\{2233\\}/g, '\\u2233' ],\n [ /\\\\therefore /g, '\\u2234' ],\n [ /\\\\because /g, '\\u2235' ],\n [ /\\\\Colon /g, '\\u2237' ],\n [ /\\\\ElsevierGlyph\\{2238\\}/g, '\\u2238' ],\n [ /\\\\mathbin\\{\\{:\\}\\\\!\\\\!\\{\\-\\}\\\\!\\\\!\\{:\\}\\}/g, '\\u223A' ],\n [ /\\\\homothetic /g, '\\u223B' ],\n [ /\\\\sim /g, '\\u223C' ],\n [ /\\\\backsim /g, '\\u223D' ],\n [ /\\\\lazysinv /g, '\\u223E' ],\n [ /\\\\wr /g, '\\u2240' ],\n [ /\\\\not\\\\sim /g, '\\u2241' ],\n [ /\\\\ElsevierGlyph\\{2242\\}/g, '\\u2242' ],\n [ /\\\\NotEqualTilde /g, '\\u2242-00338' ],\n [ /\\\\simeq /g, '\\u2243' ],\n [ /\\\\not\\\\simeq /g, '\\u2244' ],\n [ /\\\\cong /g, '\\u2245' ],\n [ /\\\\approxnotequal /g, '\\u2246' ],\n [ /\\\\not\\\\cong /g, '\\u2247' ],\n [ /\\\\approx /g, '\\u2248' ],\n [ /\\\\not\\\\approx /g, '\\u2249' ],\n [ /\\\\approxeq /g, '\\u224A' ],\n [ /\\\\tildetrpl /g, '\\u224B' ],\n [ /\\\\not\\\\apid /g, '\\u224B-00338' ],\n [ /\\\\allequal /g, '\\u224C' ],\n [ /\\\\asymp /g, '\\u224D' ],\n [ /\\\\Bumpeq /g, '\\u224E' ],\n [ /\\\\NotHumpDownHump /g, '\\u224E-00338' ],\n [ /\\\\bumpeq /g, '\\u224F' ],\n [ /\\\\NotHumpEqual /g, '\\u224F-00338' ],\n [ /\\\\doteq /g, '\\u2250' ],\n [ /\\\\not\\\\doteq/g, '\\u2250-00338' ],\n [ /\\\\doteqdot /g, '\\u2251' ],\n [ /\\\\fallingdotseq /g, '\\u2252' ],\n [ /\\\\risingdotseq /g, '\\u2253' ],\n [ /\\\\eqcirc /g, '\\u2256' ],\n [ /\\\\circeq /g, '\\u2257' ],\n [ /\\\\estimates /g, '\\u2259' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u225A' ],\n [ /\\\\starequal /g, '\\u225B' ],\n [ /\\\\triangleq /g, '\\u225C' ],\n [ /\\\\ElsevierGlyph\\{225F\\}/g, '\\u225F' ],\n [ /\\\\not =/g, '\\u2260' ],\n [ /\\\\equiv /g, '\\u2261' ],\n [ /\\\\not\\\\equiv /g, '\\u2262' ],\n [ /\\\\leq /g, '\\u2264' ],\n [ /\\\\geq /g, '\\u2265' ],\n [ /\\\\leqq /g, '\\u2266' ],\n [ /\\\\geqq /g, '\\u2267' ],\n [ /\\\\lneqq /g, '\\u2268' ],\n [ /\\\\lvertneqq /g, '\\u2268-0FE00' ],\n [ /\\\\gneqq /g, '\\u2269' ],\n [ /\\\\gvertneqq /g, '\\u2269-0FE00' ],\n [ /\\\\ll /g, '\\u226A' ],\n [ /\\\\NotLessLess /g, '\\u226A-00338' ],\n [ /\\\\gg /g, '\\u226B' ],\n [ /\\\\NotGreaterGreater /g, '\\u226B-00338' ],\n [ /\\\\between /g, '\\u226C' ],\n [ /\\\\not\\\\kern\\-0.3em\\\\times /g, '\\u226D' ],\n [ /\\\\not/g, '\\u226F' ],\n [ /\\\\not\\\\leq /g, '\\u2270' ],\n [ /\\\\not\\\\geq /g, '\\u2271' ],\n [ /\\\\lessequivlnt /g, '\\u2272' ],\n [ /\\\\greaterequivlnt /g, '\\u2273' ],\n [ /\\\\ElsevierGlyph\\{2274\\}/g, '\\u2274' ],\n [ /\\\\ElsevierGlyph\\{2275\\}/g, '\\u2275' ],\n [ /\\\\lessgtr /g, '\\u2276' ],\n [ /\\\\gtrless /g, '\\u2277' ],\n [ /\\\\notlessgreater /g, '\\u2278' ],\n [ /\\\\notgreaterless /g, '\\u2279' ],\n [ /\\\\prec /g, '\\u227A' ],\n [ /\\\\succ /g, '\\u227B' ],\n [ /\\\\preccurlyeq /g, '\\u227C' ],\n [ /\\\\succcurlyeq /g, '\\u227D' ],\n [ /\\\\precapprox /g, '\\u227E' ],\n [ /\\\\NotPrecedesTilde /g, '\\u227E-00338' ],\n [ /\\\\succapprox /g, '\\u227F' ],\n [ /\\\\NotSucceedsTilde /g, '\\u227F-00338' ],\n [ /\\\\not\\\\prec /g, '\\u2280' ],\n [ /\\\\not\\\\succ /g, '\\u2281' ],\n [ /\\\\subset /g, '\\u2282' ],\n [ /\\\\supset /g, '\\u2283' ],\n [ /\\\\not\\\\subset /g, '\\u2284' ],\n [ /\\\\not\\\\supset /g, '\\u2285' ],\n [ /\\\\subseteq /g, '\\u2286' ],\n [ /\\\\supseteq /g, '\\u2287' ],\n [ /\\\\not\\\\subseteq /g, '\\u2288' ],\n [ /\\\\not\\\\supseteq /g, '\\u2289' ],\n [ /\\\\subsetneq /g, '\\u228A' ],\n [ /\\\\varsubsetneqq /g, '\\u228A-0FE00' ],\n [ /\\\\supsetneq /g, '\\u228B' ],\n [ /\\\\varsupsetneq /g, '\\u228B-0FE00' ],\n [ /\\\\uplus /g, '\\u228E' ],\n [ /\\\\sqsubset /g, '\\u228F' ],\n [ /\\\\NotSquareSubset /g, '\\u228F-00338' ],\n [ /\\\\sqsupset /g, '\\u2290' ],\n [ /\\\\NotSquareSuperset /g, '\\u2290-00338' ],\n [ /\\\\sqsubseteq /g, '\\u2291' ],\n [ /\\\\sqsupseteq /g, '\\u2292' ],\n [ /\\\\sqcap /g, '\\u2293' ],\n [ /\\\\sqcup /g, '\\u2294' ],\n [ /\\\\oplus /g, '\\u2295' ],\n [ /\\\\ominus /g, '\\u2296' ],\n [ /\\\\otimes /g, '\\u2297' ],\n [ /\\\\oslash /g, '\\u2298' ],\n [ /\\\\odot /g, '\\u2299' ],\n [ /\\\\circledcirc /g, '\\u229A' ],\n [ /\\\\circledast /g, '\\u229B' ],\n [ /\\\\circleddash /g, '\\u229D' ],\n [ /\\\\boxplus /g, '\\u229E' ],\n [ /\\\\boxminus /g, '\\u229F' ],\n [ /\\\\boxtimes /g, '\\u22A0' ],\n [ /\\\\boxdot /g, '\\u22A1' ],\n [ /\\\\vdash /g, '\\u22A2' ],\n [ /\\\\dashv /g, '\\u22A3' ],\n [ /\\\\top /g, '\\u22A4' ],\n [ /\\\\perp /g, '\\u22A5' ],\n [ /\\\\truestate /g, '\\u22A7' ],\n [ /\\\\forcesextra /g, '\\u22A8' ],\n [ /\\\\Vdash /g, '\\u22A9' ],\n [ /\\\\Vvdash /g, '\\u22AA' ],\n [ /\\\\VDash /g, '\\u22AB' ],\n [ /\\\\nvdash /g, '\\u22AC' ],\n [ /\\\\nvDash /g, '\\u22AD' ],\n [ /\\\\nVdash /g, '\\u22AE' ],\n [ /\\\\nVDash /g, '\\u22AF' ],\n [ /\\\\vartriangleleft /g, '\\u22B2' ],\n [ /\\\\vartriangleright /g, '\\u22B3' ],\n [ /\\\\trianglelefteq /g, '\\u22B4' ],\n [ /\\\\trianglerighteq /g, '\\u22B5' ],\n [ /\\\\original /g, '\\u22B6' ],\n [ /\\\\image /g, '\\u22B7' ],\n [ /\\\\multimap /g, '\\u22B8' ],\n [ /\\\\hermitconjmatrix /g, '\\u22B9' ],\n [ /\\\\intercal /g, '\\u22BA' ],\n [ /\\\\veebar /g, '\\u22BB' ],\n [ /\\\\rightanglearc /g, '\\u22BE' ],\n [ /\\\\ElsevierGlyph\\{22C0\\}/g, '\\u22C0' ],\n [ /\\\\ElsevierGlyph\\{22C1\\}/g, '\\u22C1' ],\n [ /\\\\bigcap /g, '\\u22C2' ],\n [ /\\\\bigcup /g, '\\u22C3' ],\n [ /\\\\diamond /g, '\\u22C4' ],\n [ /\\\\cdot /g, '\\u22C5' ],\n [ /\\\\star /g, '\\u22C6' ],\n [ /\\\\divideontimes /g, '\\u22C7' ],\n [ /\\\\bowtie /g, '\\u22C8' ],\n [ /\\\\ltimes /g, '\\u22C9' ],\n [ /\\\\rtimes /g, '\\u22CA' ],\n [ /\\\\leftthreetimes /g, '\\u22CB' ],\n [ /\\\\rightthreetimes /g, '\\u22CC' ],\n [ /\\\\backsimeq /g, '\\u22CD' ],\n [ /\\\\curlyvee /g, '\\u22CE' ],\n [ /\\\\curlywedge /g, '\\u22CF' ],\n [ /\\\\Subset /g, '\\u22D0' ],\n [ /\\\\Supset /g, '\\u22D1' ],\n [ /\\\\Cap /g, '\\u22D2' ],\n [ /\\\\Cup /g, '\\u22D3' ],\n [ /\\\\pitchfork /g, '\\u22D4' ],\n [ /\\\\lessdot /g, '\\u22D6' ],\n [ /\\\\gtrdot /g, '\\u22D7' ],\n [ /\\\\verymuchless /g, '\\u22D8' ],\n [ /\\\\verymuchgreater /g, '\\u22D9' ],\n [ /\\\\lesseqgtr /g, '\\u22DA' ],\n [ /\\\\gtreqless /g, '\\u22DB' ],\n [ /\\\\curlyeqprec /g, '\\u22DE' ],\n [ /\\\\curlyeqsucc /g, '\\u22DF' ],\n [ /\\\\not\\\\sqsubseteq /g, '\\u22E2' ],\n [ /\\\\not\\\\sqsupseteq /g, '\\u22E3' ],\n [ /\\\\Elzsqspne /g, '\\u22E5' ],\n [ /\\\\lnsim /g, '\\u22E6' ],\n [ /\\\\gnsim /g, '\\u22E7' ],\n [ /\\\\precedesnotsimilar /g, '\\u22E8' ],\n [ /\\\\succnsim /g, '\\u22E9' ],\n [ /\\\\ntriangleleft /g, '\\u22EA' ],\n [ /\\\\ntriangleright /g, '\\u22EB' ],\n [ /\\\\ntrianglelefteq /g, '\\u22EC' ],\n [ /\\\\ntrianglerighteq /g, '\\u22ED' ],\n [ /\\\\vdots /g, '\\u22EE' ],\n [ /\\\\cdots /g, '\\u22EF' ],\n [ /\\\\upslopeellipsis /g, '\\u22F0' ],\n [ /\\\\downslopeellipsis /g, '\\u22F1' ],\n [ /\\\\barwedge /g, '\\u2305' ],\n [ /\\\\perspcorrespond /g, '\\u2306' ],\n [ /\\\\lceil /g, '\\u2308' ],\n [ /\\\\rceil /g, '\\u2309' ],\n [ /\\\\lfloor /g, '\\u230A' ],\n [ /\\\\rfloor /g, '\\u230B' ],\n [ /\\\\recorder /g, '\\u2315' ],\n [ /\\\\mathchar\"2208/g, '\\u2316' ],\n [ /\\\\ulcorner /g, '\\u231C' ],\n [ /\\\\urcorner /g, '\\u231D' ],\n [ /\\\\llcorner /g, '\\u231E' ],\n [ /\\\\lrcorner /g, '\\u231F' ],\n [ /\\\\frown /g, '\\u2322' ],\n [ /\\\\smile /g, '\\u2323' ],\n [ /\\\\langle /g, '\\u2329' ],\n [ /\\\\rangle /g, '\\u232A' ],\n [ /\\\\ElsevierGlyph\\{E838\\}/g, '\\u233D' ],\n [ /\\\\Elzdlcorn /g, '\\u23A3' ],\n [ /\\\\lmoustache /g, '\\u23B0' ],\n [ /\\\\rmoustache /g, '\\u23B1' ],\n [ /\\\\textvisiblespace /g, '\\u2423' ],\n [ /\\\\ding\\{172\\}/g, '\\u2460' ],\n [ /\\\\ding\\{173\\}/g, '\\u2461' ],\n [ /\\\\ding\\{174\\}/g, '\\u2462' ],\n [ /\\\\ding\\{175\\}/g, '\\u2463' ],\n [ /\\\\ding\\{176\\}/g, '\\u2464' ],\n [ /\\\\ding\\{177\\}/g, '\\u2465' ],\n [ /\\\\ding\\{178\\}/g, '\\u2466' ],\n [ /\\\\ding\\{179\\}/g, '\\u2467' ],\n [ /\\\\ding\\{180\\}/g, '\\u2468' ],\n [ /\\\\ding\\{181\\}/g, '\\u2469' ],\n [ /\\\\circledS /g, '\\u24C8' ],\n [ /\\\\Elzdshfnc /g, '\\u2506' ],\n [ /\\\\Elzsqfnw /g, '\\u2519' ],\n [ /\\\\diagup /g, '\\u2571' ],\n [ /\\\\ding\\{110\\}/g, '\\u25A0' ],\n [ /\\\\square /g, '\\u25A1' ],\n [ /\\\\blacksquare /g, '\\u25AA' ],\n [ /\\\\fbox\\{~~\\}/g, '\\u25AD' ],\n [ /\\\\Elzvrecto /g, '\\u25AF' ],\n [ /\\\\ElsevierGlyph\\{E381\\}/g, '\\u25B1' ],\n [ /\\\\ding\\{115\\}/g, '\\u25B2' ],\n [ /\\\\bigtriangleup /g, '\\u25B3' ],\n [ /\\\\blacktriangle /g, '\\u25B4' ],\n [ /\\\\vartriangle /g, '\\u25B5' ],\n [ /\\\\blacktriangleright /g, '\\u25B8' ],\n [ /\\\\triangleright /g, '\\u25B9' ],\n [ /\\\\ding\\{116\\}/g, '\\u25BC' ],\n [ /\\\\bigtriangledown /g, '\\u25BD' ],\n [ /\\\\blacktriangledown /g, '\\u25BE' ],\n [ /\\\\triangledown /g, '\\u25BF' ],\n [ /\\\\blacktriangleleft /g, '\\u25C2' ],\n [ /\\\\triangleleft /g, '\\u25C3' ],\n [ /\\\\ding\\{117\\}/g, '\\u25C6' ],\n [ /\\\\lozenge /g, '\\u25CA' ],\n [ /\\\\bigcirc /g, '\\u25CB' ],\n [ /\\\\ding\\{108\\}/g, '\\u25CF' ],\n [ /\\\\Elzcirfl /g, '\\u25D0' ],\n [ /\\\\Elzcirfr /g, '\\u25D1' ],\n [ /\\\\Elzcirfb /g, '\\u25D2' ],\n [ /\\\\ding\\{119\\}/g, '\\u25D7' ],\n [ /\\\\Elzrvbull /g, '\\u25D8' ],\n [ /\\\\Elzsqfl /g, '\\u25E7' ],\n [ /\\\\Elzsqfr /g, '\\u25E8' ],\n [ /\\\\Elzsqfse /g, '\\u25EA' ],\n [ /\\\\bigcirc /g, '\\u25EF' ],\n [ /\\\\ding\\{72\\}/g, '\\u2605' ],\n [ /\\\\ding\\{73\\}/g, '\\u2606' ],\n [ /\\\\ding\\{37\\}/g, '\\u260E' ],\n [ /\\\\ding\\{42\\}/g, '\\u261B' ],\n [ /\\\\ding\\{43\\}/g, '\\u261E' ],\n [ /\\\\rightmoon /g, '\\u263E' ],\n [ /\\\\mercury /g, '\\u263F' ],\n [ /\\\\venus /g, '\\u2640' ],\n [ /\\\\male /g, '\\u2642' ],\n [ /\\\\jupiter /g, '\\u2643' ],\n [ /\\\\saturn /g, '\\u2644' ],\n [ /\\\\uranus /g, '\\u2645' ],\n [ /\\\\neptune /g, '\\u2646' ],\n [ /\\\\pluto /g, '\\u2647' ],\n [ /\\\\aries /g, '\\u2648' ],\n [ /\\\\taurus /g, '\\u2649' ],\n [ /\\\\gemini /g, '\\u264A' ],\n [ /\\\\cancer /g, '\\u264B' ],\n [ /\\\\leo /g, '\\u264C' ],\n [ /\\\\virgo /g, '\\u264D' ],\n [ /\\\\libra /g, '\\u264E' ],\n [ /\\\\scorpio /g, '\\u264F' ],\n [ /\\\\sagittarius /g, '\\u2650' ],\n [ /\\\\capricornus /g, '\\u2651' ],\n [ /\\\\aquarius /g, '\\u2652' ],\n [ /\\\\pisces /g, '\\u2653' ],\n [ /\\\\ding\\{171\\}/g, '\\u2660' ],\n [ /\\\\diamond /g, '\\u2662' ],\n [ /\\\\ding\\{168\\}/g, '\\u2663' ],\n [ /\\\\ding\\{170\\}/g, '\\u2665' ],\n [ /\\\\ding\\{169\\}/g, '\\u2666' ],\n [ /\\\\quarternote /g, '\\u2669' ],\n [ /\\\\eighthnote /g, '\\u266A' ],\n [ /\\\\flat /g, '\\u266D' ],\n [ /\\\\natural /g, '\\u266E' ],\n [ /\\\\sharp /g, '\\u266F' ],\n [ /\\\\ding\\{33\\}/g, '\\u2701' ],\n [ /\\\\ding\\{34\\}/g, '\\u2702' ],\n [ /\\\\ding\\{35\\}/g, '\\u2703' ],\n [ /\\\\ding\\{36\\}/g, '\\u2704' ],\n [ /\\\\ding\\{38\\}/g, '\\u2706' ],\n [ /\\\\ding\\{39\\}/g, '\\u2707' ],\n [ /\\\\ding\\{40\\}/g, '\\u2708' ],\n [ /\\\\ding\\{41\\}/g, '\\u2709' ],\n [ /\\\\ding\\{44\\}/g, '\\u270C' ],\n [ /\\\\ding\\{45\\}/g, '\\u270D' ],\n [ /\\\\ding\\{46\\}/g, '\\u270E' ],\n [ /\\\\ding\\{47\\}/g, '\\u270F' ],\n [ /\\\\ding\\{48\\}/g, '\\u2710' ],\n [ /\\\\ding\\{49\\}/g, '\\u2711' ],\n [ /\\\\ding\\{50\\}/g, '\\u2712' ],\n [ /\\\\ding\\{51\\}/g, '\\u2713' ],\n [ /\\\\ding\\{52\\}/g, '\\u2714' ],\n [ /\\\\ding\\{53\\}/g, '\\u2715' ],\n [ /\\\\ding\\{54\\}/g, '\\u2716' ],\n [ /\\\\ding\\{55\\}/g, '\\u2717' ],\n [ /\\\\ding\\{56\\}/g, '\\u2718' ],\n [ /\\\\ding\\{57\\}/g, '\\u2719' ],\n [ /\\\\ding\\{58\\}/g, '\\u271A' ],\n [ /\\\\ding\\{59\\}/g, '\\u271B' ],\n [ /\\\\ding\\{60\\}/g, '\\u271C' ],\n [ /\\\\ding\\{61\\}/g, '\\u271D' ],\n [ /\\\\ding\\{62\\}/g, '\\u271E' ],\n [ /\\\\ding\\{63\\}/g, '\\u271F' ],\n [ /\\\\ding\\{64\\}/g, '\\u2720' ],\n [ /\\\\ding\\{65\\}/g, '\\u2721' ],\n [ /\\\\ding\\{66\\}/g, '\\u2722' ],\n [ /\\\\ding\\{67\\}/g, '\\u2723' ],\n [ /\\\\ding\\{68\\}/g, '\\u2724' ],\n [ /\\\\ding\\{69\\}/g, '\\u2725' ],\n [ /\\\\ding\\{70\\}/g, '\\u2726' ],\n [ /\\\\ding\\{71\\}/g, '\\u2727' ],\n [ /\\\\ding\\{73\\}/g, '\\u2729' ],\n [ /\\\\ding\\{74\\}/g, '\\u272A' ],\n [ /\\\\ding\\{75\\}/g, '\\u272B' ],\n [ /\\\\ding\\{76\\}/g, '\\u272C' ],\n [ /\\\\ding\\{77\\}/g, '\\u272D' ],\n [ /\\\\ding\\{78\\}/g, '\\u272E' ],\n [ /\\\\ding\\{79\\}/g, '\\u272F' ],\n [ /\\\\ding\\{80\\}/g, '\\u2730' ],\n [ /\\\\ding\\{81\\}/g, '\\u2731' ],\n [ /\\\\ding\\{82\\}/g, '\\u2732' ],\n [ /\\\\ding\\{83\\}/g, '\\u2733' ],\n [ /\\\\ding\\{84\\}/g, '\\u2734' ],\n [ /\\\\ding\\{85\\}/g, '\\u2735' ],\n [ /\\\\ding\\{86\\}/g, '\\u2736' ],\n [ /\\\\ding\\{87\\}/g, '\\u2737' ],\n [ /\\\\ding\\{88\\}/g, '\\u2738' ],\n [ /\\\\ding\\{89\\}/g, '\\u2739' ],\n [ /\\\\ding\\{90\\}/g, '\\u273A' ],\n [ /\\\\ding\\{91\\}/g, '\\u273B' ],\n [ /\\\\ding\\{92\\}/g, '\\u273C' ],\n [ /\\\\ding\\{93\\}/g, '\\u273D' ],\n [ /\\\\ding\\{94\\}/g, '\\u273E' ],\n [ /\\\\ding\\{95\\}/g, '\\u273F' ],\n [ /\\\\ding\\{96\\}/g, '\\u2740' ],\n [ /\\\\ding\\{97\\}/g, '\\u2741' ],\n [ /\\\\ding\\{98\\}/g, '\\u2742' ],\n [ /\\\\ding\\{99\\}/g, '\\u2743' ],\n [ /\\\\ding\\{100\\}/g, '\\u2744' ],\n [ /\\\\ding\\{101\\}/g, '\\u2745' ],\n [ /\\\\ding\\{102\\}/g, '\\u2746' ],\n [ /\\\\ding\\{103\\}/g, '\\u2747' ],\n [ /\\\\ding\\{104\\}/g, '\\u2748' ],\n [ /\\\\ding\\{105\\}/g, '\\u2749' ],\n [ /\\\\ding\\{106\\}/g, '\\u274A' ],\n [ /\\\\ding\\{107\\}/g, '\\u274B' ],\n [ /\\\\ding\\{109\\}/g, '\\u274D' ],\n [ /\\\\ding\\{111\\}/g, '\\u274F' ],\n [ /\\\\ding\\{112\\}/g, '\\u2750' ],\n [ /\\\\ding\\{113\\}/g, '\\u2751' ],\n [ /\\\\ding\\{114\\}/g, '\\u2752' ],\n [ /\\\\ding\\{118\\}/g, '\\u2756' ],\n [ /\\\\ding\\{120\\}/g, '\\u2758' ],\n [ /\\\\ding\\{121\\}/g, '\\u2759' ],\n [ /\\\\ding\\{122\\}/g, '\\u275A' ],\n [ /\\\\ding\\{123\\}/g, '\\u275B' ],\n [ /\\\\ding\\{124\\}/g, '\\u275C' ],\n [ /\\\\ding\\{125\\}/g, '\\u275D' ],\n [ /\\\\ding\\{126\\}/g, '\\u275E' ],\n [ /\\\\ding\\{161\\}/g, '\\u2761' ],\n [ /\\\\ding\\{162\\}/g, '\\u2762' ],\n [ /\\\\ding\\{163\\}/g, '\\u2763' ],\n [ /\\\\ding\\{164\\}/g, '\\u2764' ],\n [ /\\\\ding\\{165\\}/g, '\\u2765' ],\n [ /\\\\ding\\{166\\}/g, '\\u2766' ],\n [ /\\\\ding\\{167\\}/g, '\\u2767' ],\n [ /\\\\ding\\{182\\}/g, '\\u2776' ],\n [ /\\\\ding\\{183\\}/g, '\\u2777' ],\n [ /\\\\ding\\{184\\}/g, '\\u2778' ],\n [ /\\\\ding\\{185\\}/g, '\\u2779' ],\n [ /\\\\ding\\{186\\}/g, '\\u277A' ],\n [ /\\\\ding\\{187\\}/g, '\\u277B' ],\n [ /\\\\ding\\{188\\}/g, '\\u277C' ],\n [ /\\\\ding\\{189\\}/g, '\\u277D' ],\n [ /\\\\ding\\{190\\}/g, '\\u277E' ],\n [ /\\\\ding\\{191\\}/g, '\\u277F' ],\n [ /\\\\ding\\{192\\}/g, '\\u2780' ],\n [ /\\\\ding\\{193\\}/g, '\\u2781' ],\n [ /\\\\ding\\{194\\}/g, '\\u2782' ],\n [ /\\\\ding\\{195\\}/g, '\\u2783' ],\n [ /\\\\ding\\{196\\}/g, '\\u2784' ],\n [ /\\\\ding\\{197\\}/g, '\\u2785' ],\n [ /\\\\ding\\{198\\}/g, '\\u2786' ],\n [ /\\\\ding\\{199\\}/g, '\\u2787' ],\n [ /\\\\ding\\{200\\}/g, '\\u2788' ],\n [ /\\\\ding\\{201\\}/g, '\\u2789' ],\n [ /\\\\ding\\{202\\}/g, '\\u278A' ],\n [ /\\\\ding\\{203\\}/g, '\\u278B' ],\n [ /\\\\ding\\{204\\}/g, '\\u278C' ],\n [ /\\\\ding\\{205\\}/g, '\\u278D' ],\n [ /\\\\ding\\{206\\}/g, '\\u278E' ],\n [ /\\\\ding\\{207\\}/g, '\\u278F' ],\n [ /\\\\ding\\{208\\}/g, '\\u2790' ],\n [ /\\\\ding\\{209\\}/g, '\\u2791' ],\n [ /\\\\ding\\{210\\}/g, '\\u2792' ],\n [ /\\\\ding\\{211\\}/g, '\\u2793' ],\n [ /\\\\ding\\{212\\}/g, '\\u2794' ],\n [ /\\\\ding\\{216\\}/g, '\\u2798' ],\n [ /\\\\ding\\{217\\}/g, '\\u2799' ],\n [ /\\\\ding\\{218\\}/g, '\\u279A' ],\n [ /\\\\ding\\{219\\}/g, '\\u279B' ],\n [ /\\\\ding\\{220\\}/g, '\\u279C' ],\n [ /\\\\ding\\{221\\}/g, '\\u279D' ],\n [ /\\\\ding\\{222\\}/g, '\\u279E' ],\n [ /\\\\ding\\{223\\}/g, '\\u279F' ],\n [ /\\\\ding\\{224\\}/g, '\\u27A0' ],\n [ /\\\\ding\\{225\\}/g, '\\u27A1' ],\n [ /\\\\ding\\{226\\}/g, '\\u27A2' ],\n [ /\\\\ding\\{227\\}/g, '\\u27A3' ],\n [ /\\\\ding\\{228\\}/g, '\\u27A4' ],\n [ /\\\\ding\\{229\\}/g, '\\u27A5' ],\n [ /\\\\ding\\{230\\}/g, '\\u27A6' ],\n [ /\\\\ding\\{231\\}/g, '\\u27A7' ],\n [ /\\\\ding\\{232\\}/g, '\\u27A8' ],\n [ /\\\\ding\\{233\\}/g, '\\u27A9' ],\n [ /\\\\ding\\{234\\}/g, '\\u27AA' ],\n [ /\\\\ding\\{235\\}/g, '\\u27AB' ],\n [ /\\\\ding\\{236\\}/g, '\\u27AC' ],\n [ /\\\\ding\\{237\\}/g, '\\u27AD' ],\n [ /\\\\ding\\{238\\}/g, '\\u27AE' ],\n [ /\\\\ding\\{239\\}/g, '\\u27AF' ],\n [ /\\\\ding\\{241\\}/g, '\\u27B1' ],\n [ /\\\\ding\\{242\\}/g, '\\u27B2' ],\n [ /\\\\ding\\{243\\}/g, '\\u27B3' ],\n [ /\\\\ding\\{244\\}/g, '\\u27B4' ],\n [ /\\\\ding\\{245\\}/g, '\\u27B5' ],\n [ /\\\\ding\\{246\\}/g, '\\u27B6' ],\n [ /\\\\ding\\{247\\}/g, '\\u27B7' ],\n [ /\\\\ding\\{248\\}/g, '\\u27B8' ],\n [ /\\\\ding\\{249\\}/g, '\\u27B9' ],\n [ /\\\\ding\\{250\\}/g, '\\u27BA' ],\n [ /\\\\ding\\{251\\}/g, '\\u27BB' ],\n [ /\\\\ding\\{252\\}/g, '\\u27BC' ],\n [ /\\\\ding\\{253\\}/g, '\\u27BD' ],\n [ /\\\\ding\\{254\\}/g, '\\u27BE' ],\n [ /\\\\longleftarrow /g, '\\u27F5' ],\n [ /\\\\longrightarrow /g, '\\u27F6' ],\n [ /\\\\longleftrightarrow /g, '\\u27F7' ],\n [ /\\\\Longleftarrow /g, '\\u27F8' ],\n [ /\\\\Longrightarrow /g, '\\u27F9' ],\n [ /\\\\Longleftrightarrow /g, '\\u27FA' ],\n [ /\\\\longmapsto /g, '\\u27FC' ],\n [ /\\\\sim\\\\joinrel\\\\leadsto/g, '\\u27FF' ],\n [ /\\\\ElsevierGlyph\\{E212\\}/g, '\\u2905' ],\n [ /\\\\UpArrowBar /g, '\\u2912' ],\n [ /\\\\DownArrowBar /g, '\\u2913' ],\n [ /\\\\ElsevierGlyph\\{E20C\\}/g, '\\u2923' ],\n [ /\\\\ElsevierGlyph\\{E20D\\}/g, '\\u2924' ],\n [ /\\\\ElsevierGlyph\\{E20B\\}/g, '\\u2925' ],\n [ /\\\\ElsevierGlyph\\{E20A\\}/g, '\\u2926' ],\n [ /\\\\ElsevierGlyph\\{E211\\}/g, '\\u2927' ],\n [ /\\\\ElsevierGlyph\\{E20E\\}/g, '\\u2928' ],\n [ /\\\\ElsevierGlyph\\{E20F\\}/g, '\\u2929' ],\n [ /\\\\ElsevierGlyph\\{E210\\}/g, '\\u292A' ],\n [ /\\\\ElsevierGlyph\\{E21C\\}/g, '\\u2933' ],\n [ /\\\\ElsevierGlyph\\{E21D\\}/g, '\\u2933-00338' ],\n [ /\\\\ElsevierGlyph\\{E21A\\}/g, '\\u2936' ],\n [ /\\\\ElsevierGlyph\\{E219\\}/g, '\\u2937' ],\n [ /\\\\Elolarr /g, '\\u2940' ],\n [ /\\\\Elorarr /g, '\\u2941' ],\n [ /\\\\ElzRlarr /g, '\\u2942' ],\n [ /\\\\ElzrLarr /g, '\\u2944' ],\n [ /\\\\Elzrarrx /g, '\\u2947' ],\n [ /\\\\LeftRightVector /g, '\\u294E' ],\n [ /\\\\RightUpDownVector /g, '\\u294F' ],\n [ /\\\\DownLeftRightVector /g, '\\u2950' ],\n [ /\\\\LeftUpDownVector /g, '\\u2951' ],\n [ /\\\\LeftVectorBar /g, '\\u2952' ],\n [ /\\\\RightVectorBar /g, '\\u2953' ],\n [ /\\\\RightUpVectorBar /g, '\\u2954' ],\n [ /\\\\RightDownVectorBar /g, '\\u2955' ],\n [ /\\\\DownLeftVectorBar /g, '\\u2956' ],\n [ /\\\\DownRightVectorBar /g, '\\u2957' ],\n [ /\\\\LeftUpVectorBar /g, '\\u2958' ],\n [ /\\\\LeftDownVectorBar /g, '\\u2959' ],\n [ /\\\\LeftTeeVector /g, '\\u295A' ],\n [ /\\\\RightTeeVector /g, '\\u295B' ],\n [ /\\\\RightUpTeeVector /g, '\\u295C' ],\n [ /\\\\RightDownTeeVector /g, '\\u295D' ],\n [ /\\\\DownLeftTeeVector /g, '\\u295E' ],\n [ /\\\\DownRightTeeVector /g, '\\u295F' ],\n [ /\\\\LeftUpTeeVector /g, '\\u2960' ],\n [ /\\\\LeftDownTeeVector /g, '\\u2961' ],\n [ /\\\\UpEquilibrium /g, '\\u296E' ],\n [ /\\\\ReverseUpEquilibrium /g, '\\u296F' ],\n [ /\\\\RoundImplies /g, '\\u2970' ],\n [ /\\\\ElsevierGlyph\\{E214\\}/g, '\\u297C' ],\n [ /\\\\ElsevierGlyph\\{E215\\}/g, '\\u297D' ],\n [ /\\\\Elztfnc /g, '\\u2980' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u2985' ],\n [ /\\\\Elroang /g, '\\u2986' ],\n [ /\\\\ElsevierGlyph\\{E291\\}/g, '\\u2994' ],\n [ /\\\\Elzddfnc /g, '\\u2999' ],\n [ /\\\\Angle /g, '\\u299C' ],\n [ /\\\\Elzlpargt /g, '\\u29A0' ],\n [ /\\\\ElsevierGlyph\\{E260\\}/g, '\\u29B5' ],\n [ /\\\\ElsevierGlyph\\{E61B\\}/g, '\\u29B6' ],\n [ /\\\\ElzLap /g, '\\u29CA' ],\n [ /\\\\Elzdefas /g, '\\u29CB' ],\n [ /\\\\LeftTriangleBar /g, '\\u29CF' ],\n [ /\\\\NotLeftTriangleBar /g, '\\u29CF-00338' ],\n [ /\\\\RightTriangleBar /g, '\\u29D0' ],\n [ /\\\\NotRightTriangleBar /g, '\\u29D0-00338' ],\n [ /\\\\ElsevierGlyph\\{E372\\}/g, '\\u29DC' ],\n [ /\\\\blacklozenge /g, '\\u29EB' ],\n [ /\\\\RuleDelayed /g, '\\u29F4' ],\n [ /\\\\Elxuplus /g, '\\u2A04' ],\n [ /\\\\ElzThr /g, '\\u2A05' ],\n [ /\\\\Elxsqcup /g, '\\u2A06' ],\n [ /\\\\ElzInf /g, '\\u2A07' ],\n [ /\\\\ElzSup /g, '\\u2A08' ],\n [ /\\\\ElzCint /g, '\\u2A0D' ],\n [ /\\\\clockoint /g, '\\u2A0F' ],\n [ /\\\\ElsevierGlyph\\{E395\\}/g, '\\u2A10' ],\n [ /\\\\sqrint /g, '\\u2A16' ],\n [ /\\\\ElsevierGlyph\\{E25A\\}/g, '\\u2A25' ],\n [ /\\\\ElsevierGlyph\\{E25B\\}/g, '\\u2A2A' ],\n [ /\\\\ElsevierGlyph\\{E25C\\}/g, '\\u2A2D' ],\n [ /\\\\ElsevierGlyph\\{E25D\\}/g, '\\u2A2E' ],\n [ /\\\\ElzTimes /g, '\\u2A2F' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A34' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A35' ],\n [ /\\\\ElsevierGlyph\\{E259\\}/g, '\\u2A3C' ],\n [ /\\\\amalg /g, '\\u2A3F' ],\n [ /\\\\ElzAnd /g, '\\u2A53' ],\n [ /\\\\ElzOr /g, '\\u2A54' ],\n [ /\\\\ElsevierGlyph\\{E36E\\}/g, '\\u2A55' ],\n [ /\\\\ElOr /g, '\\u2A56' ],\n [ /\\\\perspcorrespond /g, '\\u2A5E' ],\n [ /\\\\Elzminhat /g, '\\u2A5F' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u2A63' ],\n [ /\\\\stackrel\\{*\\}\\{=\\}/g, '\\u2A6E' ],\n [ /\\\\Equal /g, '\\u2A75' ],\n [ /\\\\leqslant /g, '\\u2A7D' ],\n [ /\\\\nleqslant /g, '\\u2A7D-00338' ],\n [ /\\\\geqslant /g, '\\u2A7E' ],\n [ /\\\\ngeqslant /g, '\\u2A7E-00338' ],\n [ /\\\\lessapprox /g, '\\u2A85' ],\n [ /\\\\gtrapprox /g, '\\u2A86' ],\n [ /\\\\lneq /g, '\\u2A87' ],\n [ /\\\\gneq /g, '\\u2A88' ],\n [ /\\\\lnapprox /g, '\\u2A89' ],\n [ /\\\\gnapprox /g, '\\u2A8A' ],\n [ /\\\\lesseqqgtr /g, '\\u2A8B' ],\n [ /\\\\gtreqqless /g, '\\u2A8C' ],\n [ /\\\\eqslantless /g, '\\u2A95' ],\n [ /\\\\eqslantgtr /g, '\\u2A96' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{117\\}/g, '\\u2A9D' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{105\\}/g, '\\u2A9E' ],\n [ /\\\\NestedLessLess /g, '\\u2AA1' ],\n [ /\\\\NotNestedLessLess /g, '\\u2AA1-00338' ],\n [ /\\\\NestedGreaterGreater /g, '\\u2AA2' ],\n [ /\\\\NotNestedGreaterGreater /g, '\\u2AA2-00338' ],\n [ /\\\\preceq /g, '\\u2AAF' ],\n [ /\\\\not\\\\preceq /g, '\\u2AAF-00338' ],\n [ /\\\\succeq /g, '\\u2AB0' ],\n [ /\\\\not\\\\succeq /g, '\\u2AB0-00338' ],\n [ /\\\\precneqq /g, '\\u2AB5' ],\n [ /\\\\succneqq /g, '\\u2AB6' ],\n [ /\\\\precapprox /g, '\\u2AB7' ],\n [ /\\\\succapprox /g, '\\u2AB8' ],\n [ /\\\\precnapprox /g, '\\u2AB9' ],\n [ /\\\\succnapprox /g, '\\u2ABA' ],\n [ /\\\\subseteqq /g, '\\u2AC5' ],\n [ /\\\\nsubseteqq /g, '\\u2AC5-00338' ],\n [ /\\\\supseteqq /g, '\\u2AC6' ],\n [ /\\\\nsupseteqq/g, '\\u2AC6-00338' ],\n [ /\\\\subsetneqq /g, '\\u2ACB' ],\n [ /\\\\supsetneqq /g, '\\u2ACC' ],\n [ /\\\\ElsevierGlyph\\{E30D\\}/g, '\\u2AEB' ],\n [ /\\\\Elztdcol /g, '\\u2AF6' ],\n [ /\\\\ElsevierGlyph\\{300A\\}/g, '\\u300A' ],\n [ /\\\\ElsevierGlyph\\{300B\\}/g, '\\u300B' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u3018' ],\n [ /\\\\ElsevierGlyph\\{3019\\}/g, '\\u3019' ],\n [ /\\\\openbracketleft /g, '\\u301A' ],\n [ /\\\\openbracketright /g, '\\u301B' ]\n ]\n\n return this;\n} // end function BibtexParser\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = BibtexParser;\n}\n\n\n/***/ }),\n/* 130 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseMvc = __webpack_require__(5);\n\nvar _baseMvc2 = _interopRequireDefault(_baseMvc);\n\nvar _citationModel = __webpack_require__(71);\n\nvar _citationModel2 = _interopRequireDefault(_citationModel);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar CitationView = Backbone.View.extend({\n tagName: \"div\",\n className: \"citations\",\n render: function render() {\n this.$el.append(\"

\" + this.formattedReference() + \"

\");\n return this;\n },\n formattedReference: function formattedReference() {\n var model = this.model;\n var entryType = model.entryType();\n var fields = model.fields();\n\n var ref = \"\";\n // Code inspired by...\n // https://github.com/vkaravir/bib-publication-list/blob/master/src/bib-publication-list.js\n var authorsAndYear = this._asSentence((fields.author ? fields.author : \"\") + (fields.year ? \" (\" + fields.year + \")\" : \"\")) + \" \";\n var title = fields.title || \"\";\n var pages = fields.pages ? \"pp. \" + fields.pages : \"\";\n var address = fields.address;\n if (entryType == \"article\") {\n var volume = (fields.volume ? fields.volume : \"\") + (fields.number ? \" (\" + fields.number + \")\" : \"\") + (pages ? \", \" + pages : \"\");\n ref = authorsAndYear + this._asSentence(title) + (fields.journal ? \"In \" + fields.journal + \", \" : \"\") + this._asSentence(volume) + this._asSentence(fields.address) + \"\";\n } else if (entryType == \"inproceedings\" || entryType == \"proceedings\") {\n ref = authorsAndYear + this._asSentence(title) + (fields.booktitle ? \"In \" + fields.booktitle + \", \" : \"\") + (pages ? pages : \"\") + (address ? \", \" + address : \"\") + \".\";\n } else if (entryType == \"mastersthesis\" || entryType == \"phdthesis\") {\n ref = authorsAndYear + this._asSentence(title) + (fields.howpublished ? fields.howpublished + \". \" : \"\") + (fields.note ? fields.note + \".\" : \"\");\n } else if (entryType == \"techreport\") {\n ref = authorsAndYear + this._asSentence(title) + this._asSentence(fields.institution) + this._asSentence(fields.number) + this._asSentence(fields.type);\n } else if (entryType == \"book\" || entryType == \"inbook\" || entryType == \"incollection\") {\n ref = authorsAndYear + \" \" + this._formatBookInfo(fields);\n } else {\n ref = authorsAndYear + \" \" + this._asSentence(title) + this._asSentence(fields.howpublished) + this._asSentence(fields.note);\n }\n var doiUrl = \"\";\n if (fields.doi) {\n doiUrl = \"http://dx.doi.org/\" + fields.doi;\n ref += \"[doi:\" + fields.doi + \"]\";\n }\n var url = fields.url || doiUrl;\n if (url) {\n ref += \"[Link]\";\n }\n return ref;\n },\n _formatBookInfo: function _formatBookInfo(fields) {\n var info = \"\";\n if (fields.chapter) {\n info += fields.chapter + \" in \";\n }\n if (fields.title) {\n info += \"\" + fields.title + \"\";\n }\n if (fields.editor) {\n info += \", Edited by \" + fields.editor + \", \";\n }\n if (fields.publisher) {\n info += \", \" + fields.publisher;\n }\n if (fields.pages) {\n info += \", pp. \" + fields.pages;\n }\n if (fields.series) {\n info += \", \" + fields.series + \"\";\n }\n if (fields.volume) {\n info += \", Vol.\" + fields.volume;\n }\n if (fields.issn) {\n info += \", ISBN: \" + fields.issn;\n }\n return info + \".\";\n },\n _asSentence: function _asSentence(str) {\n return str && str.trim() ? str + \". \" : \"\";\n }\n});\n\nvar CitationListView = Backbone.View.extend({\n el: \"#citations\",\n /**\n * Set up view.\n */\n initialize: function initialize() {\n this.listenTo(this.collection, \"add\", this.renderCitation);\n },\n\n events: {\n \"click .citations-to-bibtex\": \"showBibtex\",\n \"click .citations-to-formatted\": \"showFormatted\"\n },\n\n renderCitation: function renderCitation(citation) {\n var citationView = new CitationView({ model: citation });\n this.$(\".citations-formatted\").append(citationView.render().el);\n var rawTextarea = this.$(\".citations-bibtex-text\");\n rawTextarea.val(rawTextarea.val() + \"\\n\\r\" + citation.attributes.content);\n },\n\n render: function render() {\n this.$el.html(this.citationsElement());\n this.collection.each(function (item) {\n this.renderCitation(item);\n }, this);\n this.showFormatted();\n },\n\n showBibtex: function showBibtex() {\n this.$(\".citations-to-formatted\").show();\n this.$(\".citations-to-bibtex\").hide();\n this.$(\".citations-bibtex\").show();\n this.$(\".citations-formatted\").hide();\n this.$(\".citations-bibtex-text\").select();\n },\n\n showFormatted: function showFormatted() {\n this.$(\".citations-to-formatted\").hide();\n this.$(\".citations-to-bibtex\").show();\n this.$(\".citations-bibtex\").hide();\n this.$(\".citations-formatted\").show();\n },\n\n partialWarningElement: function partialWarningElement() {\n if (this.collection.partial) {\n return ['
', \"Warning: This is a experimental feature. Most Galaxy tools will not annotate\", \" citations explicitly at this time. When writing up your analysis, please manually\", \" review your histories and find all references\", \" that should be cited in order to completely describe your work. Also, please remember to\", ' cite Galaxy.', \"
\"].join(\"\");\n } else {\n return \"\";\n }\n },\n\n citationsElement: function citationsElement() {\n return ['
', '
', (0, _localization2.default)(\"Citations\"), ' ', ' ', \"
\", '
', this.partialWarningElement(), '', \"
\", '
', '', \"
\", \"
\"].join(\"\");\n }\n});\n\n//==============================================================================\nexports.default = {\n CitationView: CitationView,\n CitationListView: CitationListView\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n/* 131 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _visualization = __webpack_require__(19);\n\nvar _visualization2 = _interopRequireDefault(_visualization);\n\nvar _bigwig = __webpack_require__(132);\n\nvar bigwig = _interopRequireWildcard(_bigwig);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Data manager for BBI datasets/files, including BigWig and BigBed.\n */\nvar BBIDataManager = _visualization2.default.GenomeDataManager.extend({\n /**\n * Load data from server and manage data entries. Adds a Deferred to manager\n * for region; when data becomes available, replaces Deferred with data.\n * Returns the Deferred that resolves when data is available.\n */\n load_data: function load_data(region, mode, resolution, extra_params) {\n var deferred = $.Deferred();\n this.set_data(region, deferred);\n\n var url = Galaxy.root + \"datasets/\" + this.get(\"dataset\").id + \"/display\";\n\n var self = this;\n var promise = new $.Deferred();\n $.when(bigwig.makeBwg(url)).then(function (bb, err) {\n $.when(bb.readWigData(region.get(\"chrom\"), region.get(\"start\"), region.get(\"end\"))).then(function (data) {\n // Transform data into \"bigwig\" format for LinePainter. \"bigwig\" format is an array of 2-element arrays\n // where each element is [position, score]; unlike real bigwig format, no gaps are allowed.\n var result = [];\n\n var prev = { max: Number.MIN_VALUE };\n data.forEach(function (d) {\n // If there is a gap between prev and d, fill it with an interval with score 0.\n // This is necessary for LinePainter to draw correctly.\n if (prev.max !== d.min - 1) {\n // +1 to start after previous region.\n result.push([prev.max + 1, 0]);\n // -2 = -1 for converting from 1-based to 0-based coordinates,\n // -1 for ending before current region.\n result.push([d.min - 2, 0]);\n }\n\n // Add data point for entry start. -1 to convert from wiggle\n // 1-based coordinates to 0-based browser coordinates.\n result.push([d.min - 1, d.score]);\n\n // Add data point for entry end:\n result.push([d.max, d.score]);\n\n prev = d;\n });\n\n var entry = {\n data: result,\n region: region,\n dataset_type: \"bigwig\"\n };\n\n self.set_data(region, entry);\n deferred.resolve(entry);\n });\n });\n\n return deferred;\n }\n});\n\nexports.default = {\n BBIDataManager: BBIDataManager\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 132 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function($) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//\n// Author: Jeremy Goecks\n//\n// Modified from:\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// bigwig.js: indexed binary WIG (and BED) files\n//\n\n// Requirements:\n// * jquery and ajax-native plugin for reading binary data, jquery for promises\n// * spans for working working with genomic intervals\n// * jszlib for decompression.\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(133), __webpack_require__(134), __webpack_require__(135)], __WEBPACK_AMD_DEFINE_RESULT__ = function(spans, jszlib) {\n \"use strict\";\n\n // -- Copied from das.js --\n\n function DASFeature() {\n }\n\n function DASGroup(id) {\n if (id)\n this.id = id;\n }\n\n // -- End copy --\n\n // -- Copied from bin.js --\n\n function readInt(ba, offset) {\n return (ba[offset + 3] << 24) | (ba[offset + 2] << 16) | (ba[offset + 1] << 8) | (ba[offset]);\n }\n\n // -- End copy --\n\n // Some globals.\n var Range = spans.Range;\n var union = spans.union;\n var intersection = spans.intersection;\n\n var jszlib_inflate_buffer = jszlib.inflateBuffer;\n var arrayCopy = jszlib.arrayCopy;\n\n var BIG_WIG_MAGIC = 0x888FFC26;\n var BIG_WIG_MAGIC_BE = 0x26FC8F88;\n var BIG_BED_MAGIC = 0x8789F2EB;\n var BIG_BED_MAGIC_BE = 0xEBF28987;\n\n\n var BIG_WIG_TYPE_GRAPH = 1;\n var BIG_WIG_TYPE_VSTEP = 2;\n var BIG_WIG_TYPE_FSTEP = 3;\n\n var M1 = 256;\n var M2 = 256*256;\n var M3 = 256*256*256;\n var M4 = 256*256*256*256;\n\n var BED_COLOR_REGEXP = new RegExp(\"^[0-9]+,[0-9]+,[0-9]+\");\n\n /**\n * Read binary data from a URL using HTTP Range header. Requires jQuery and ajax-native plugin.\n */\n function read(url, start, size) {\n // Taken from bin.js:\n // This may be necessary for Safari:\n // if ((isSafari || this.opts.salt) && url.indexOf('?') < 0) {\n // url = url + '?salt=' + b64_sha1('' + Date.now() + ',' + (++seed));\n // }\n\n var chunkSizeLimit = Math.pow(10, 6); // 1 MB\n if(size > chunkSizeLimit) {\n // TODO: raise error.\n }\n\n // Read data from remote file.\n return $.ajax({\n type: 'GET',\n dataType: 'native',\n url: url,\n // Potential timeout on first request to catch mixed-content errors on Chromium.\n timeout: 5000,\n beforeSend: function(xhrObj) {\n // (size - 1) because range is inclusive.\n xhrObj.setRequestHeader(\"Range\", \"bytes=\" + start + \"-\" + (start + (size - 1)));\n },\n xhrFields: {\n responseType: 'arraybuffer'\n }\n });\n }\n\n function bwg_readOffset(ba, o) {\n var offset = ba[o] + ba[o+1]*M1 + ba[o+2]*M2 + ba[o+3]*M3 + ba[o+4]*M4;\n return offset;\n }\n\n function BigWig() {\n }\n\n /**\n * Read the chromosome B+ tree header.\n */\n BigWig.prototype.readChromTree = function() {\n var thisB = this;\n this.chromsToIDs = {};\n this.idsToChroms = {};\n this.maxID = 0;\n\n var udo = this.unzoomedDataOffset;\n var eb = (udo - this.chromTreeOffset) & 3;\n udo = udo + 4 - eb;\n\n // Read and parse the chrom tree, return the promise so that subsequent actions can be taken.\n return $.when(read(this.url, this.chromTreeOffset, udo - this.chromTreeOffset)).then(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n var bptReadNode = function(offset) {\n var nodeType = ba[offset];\n var cnt = sa[(offset/2) + 1];\n offset += 4;\n for (var n = 0; n < cnt; ++n) {\n if (nodeType === 0) {\n offset += keySize;\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n childOffset -= thisB.chromTreeOffset;\n bptReadNode(childOffset);\n } else {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode !== 0) {\n key += String.fromCharCode(charCode);\n }\n }\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var chromSize = (ba[offset + 7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n offset += 8;\n\n thisB.chromsToIDs[key] = chromId;\n if (key.indexOf('chr') === 0) {\n thisB.chromsToIDs[key.substr(3)] = chromId;\n }\n thisB.idsToChroms[chromId] = key;\n thisB.maxID = Math.max(thisB.maxID, chromId);\n }\n }\n };\n bptReadNode(rootNodeOffset);\n });\n }\n\n function BigWigView(bwg, cirTreeOffset, cirTreeLength, isSummary) {\n this.bwg = bwg;\n this.cirTreeOffset = cirTreeOffset;\n this.cirTreeLength = cirTreeLength;\n this.isSummary = isSummary;\n }\n\n\n\n BigWigView.prototype.readWigData = function(chrName, min, max) {\n var chr = this.bwg.chromsToIDs[chrName],\n rval;\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n rval = [];\n } else {\n rval = this.readWigDataById(chr, min, max);\n }\n\n return rval;\n };\n\n BigWigView.prototype.readWigDataById = function(chr, min, max) {\n var thisB = this,\n promise = $.Deferred();\n\n // Read the R-tree index header and then read data again.\n if (!this.cirHeader) {\n $.when(read(thisB.bwg.url, this.cirTreeOffset, 48)).then(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n $.when(thisB.readWigDataById(chr, min, max)).then(function(result) {\n promise.resolve(result);\n });\n });\n return promise;\n }\n\n var blocksToFetch = [];\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var filter = function(chromId, fmin, fmax, toks) {\n return ((chr < 0 || chromId == chr) && fmin <= max && fmax >= min);\n };\n\n var cirFobRecur = function(offset, level) {\n if (thisB.bwg.instrument)\n console.log('level=' + level + '; offset=' + offset + '; time=' + (Date.now()|0));\n\n outstanding += offset.length;\n\n if (offset.length == 1 && offset[0] - thisB.cirTreeOffset == 48 && thisB.cachedCirRoot) {\n cirFobRecur2(thisB.cachedCirRoot, 0, level);\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n return;\n }\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n };\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n $.when(read(thisB.bwg.url, fr.min(), fr.max() - fr.min())).then(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n\n if (offset[i] - thisB.cirTreeOffset == 48 && offset[i] - fr.min() === 0)\n thisB.cachedCirRoot = resultBuffer;\n\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n }\n }\n });\n };\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf !== 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if (((chr < 0 || startChrom < chr) || (startChrom == chr && startBase <= max)) &&\n ((chr < 0 || endChrom > chr) || (endChrom == chr && endBase >= min)))\n {\n blocksToFetch.push({offset: blockOffset, size: blockSize});\n }\n offset += 32;\n }\n } else {\n var recurOffsets = [];\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n if ((chr < 0 || startChrom < chr || (startChrom == chr && startBase <= max)) &&\n (chr < 0 || endChrom > chr || (endChrom == chr && endBase >= min)))\n {\n recurOffsets.push(blockOffset);\n }\n offset += 24;\n }\n if (recurOffsets.length > 0) {\n cirFobRecur(recurOffsets, level + 1);\n }\n }\n };\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n return promise;\n };\n\n /**\n * Fetch data for a set of blocks. Returns a promise that resolves to fetched data.\n */\n BigWigView.prototype.fetchFeatures = function(filter, blocksToFetch) {\n var thisB = this,\n promise = $.Deferred();\n\n blocksToFetch.sort(function(b0, b1) {\n return (b0.offset|0) - (b1.offset|0);\n });\n\n if (blocksToFetch.length === 0) {\n return [];\n } else {\n var features = [];\n var createFeature = function(chr, fmin, fmax, opts) {\n if (!opts) {\n opts = {};\n }\n\n var f = new DASFeature();\n f._chromId = chr;\n f.segment = thisB.bwg.idsToChroms[chr];\n f.min = fmin;\n f.max = fmax;\n f.type = thisB.bwg.type;\n\n for (var k in opts) {\n f[k] = opts[k];\n }\n\n features.push(f);\n };\n\n // Recursive function to read blocks of data.\n var tramp = function() {\n if (blocksToFetch.length === 0) {\n var afterBWG = Date.now();\n // dlog('BWG fetch took ' + (afterBWG - beforeBWG) + 'ms');\n return promise.resolve(features);\n }\n else {\n var block = blocksToFetch[0];\n if (block.data) {\n thisB.parseFeatures(block.data, createFeature, filter);\n blocksToFetch.splice(0, 1);\n tramp();\n }\n else {\n var fetchStart = block.offset;\n var fetchSize = block.size;\n var bi = 1;\n while (bi < blocksToFetch.length && blocksToFetch[bi].offset == (fetchStart + fetchSize)) {\n fetchSize += blocksToFetch[bi].size;\n ++bi;\n }\n\n $.when(read(thisB.bwg.url, fetchStart, fetchSize)).then(function(result) {\n var offset = 0;\n var bi = 0;\n while (offset < fetchSize) {\n var fb = blocksToFetch[bi];\n\n var data;\n if (thisB.bwg.uncompressBufSize > 0) {\n data = jszlib_inflate_buffer(result, offset + 2, fb.size - 2);\n } else {\n var tmp = new Uint8Array(fb.size); // FIXME is this really the best we can do?\n arrayCopy(new Uint8Array(result, offset, fb.size), 0, tmp, 0, fb.size);\n data = tmp.buffer;\n }\n fb.data = data;\n\n offset += fb.size;\n ++bi;\n }\n tramp();\n });\n }\n }\n };\n tramp();\n }\n\n return promise;\n };\n\n BigWigView.prototype.parseFeatures = function(data, createFeature, filter) {\n var ba = new Uint8Array(data);\n\n if (this.isSummary) {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var itemCount = data.byteLength/32;\n for (var i = 0; i < itemCount; ++i) {\n var chromId = la[(i*8)];\n var start = la[(i*8)+1];\n var end = la[(i*8)+2];\n var validCnt = la[(i*8)+3];\n var minVal = fa[(i*8)+4];\n var maxVal = fa[(i*8)+5];\n var sumData = fa[(i*8)+6];\n var sumSqData = fa[(i*8)+7];\n\n if (filter(chromId, start + 1, end)) {\n var summaryOpts = {type: 'bigwig', score: sumData/validCnt, maxScore: maxVal};\n if (this.bwg.type == 'bigbed') {\n summaryOpts.type = 'density';\n }\n createFeature(chromId, start + 1, end, summaryOpts);\n }\n }\n }\n else if (this.bwg.type == 'bigwig') {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var chromId = la[0];\n var blockStart = la[1];\n var blockEnd = la[2];\n var itemStep = la[3];\n var itemSpan = la[4];\n var blockType = ba[20];\n var itemCount = sa[11];\n\n if (blockType == BIG_WIG_TYPE_FSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var score = fa[i + 6];\n var fmin = blockStart + (i*itemStep) + 1, fmax = blockStart + (i*itemStep) + itemSpan;\n if (filter(chromId, fmin, fmax))\n createFeature(chromId, fmin, fmax, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_VSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*2) + 6] + 1;\n var end = start + itemSpan - 1;\n var score = fa[(i*2) + 7];\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_GRAPH) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*3) + 6] + 1;\n var end = la[(i*3) + 7];\n var score = fa[(i*3) + 8];\n if (start > end) {\n start = end;\n }\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else {\n console.log('Currently not handling bwgType=' + blockType);\n }\n } else if (this.bwg.type == 'bigbed') {\n var offset = 0;\n var dfc = this.bwg.definedFieldCount;\n var schema = this.bwg.schema;\n\n while (offset < ba.length) {\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var start = (ba[offset+7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n var end = (ba[offset+11]<<24) | (ba[offset+10]<<16) | (ba[offset+9]<<8) | (ba[offset+8]);\n offset += 12;\n var rest = '';\n while (true) {\n var ch = ba[offset++];\n if (ch != 0) {\n rest += String.fromCharCode(ch);\n } else {\n break;\n }\n }\n\n var featureOpts = {};\n\n var bedColumns;\n if (rest.length > 0) {\n bedColumns = rest.split('\\t');\n } else {\n bedColumns = [];\n }\n if (bedColumns.length > 0 && dfc > 3) {\n featureOpts.label = bedColumns[0];\n }\n if (bedColumns.length > 1 && dfc > 4) {\n var score = parseInt(bedColumns[1]);\n if (!isNaN(score))\n featureOpts.score = score;\n }\n if (bedColumns.length > 2 && dfc > 5) {\n featureOpts.orientation = bedColumns[2];\n }\n if (bedColumns.length > 5 && dfc > 8) {\n var color = bedColumns[5];\n if (BED_COLOR_REGEXP.test(color)) {\n featureOpts.itemRgb = 'rgb(' + color + ')';\n }\n }\n\n if (bedColumns.length > dfc-3 && schema) {\n for (var col = dfc - 3; col < bedColumns.length; ++col) {\n featureOpts[schema.fields[col+3].name] = bedColumns[col];\n }\n }\n\n if (filter(chromId, start + 1, end, bedColumns)) {\n if (dfc < 12) {\n createFeature(chromId, start + 1, end, featureOpts);\n } else {\n // TODO: add block starts, sizes, thick start, thick end to feature.\n var thickStart = bedColumns[3]|0;\n var thickEnd = bedColumns[4]|0;\n var blockCount = bedColumns[6]|0;\n var blockSizes = bedColumns[7].split(',');\n var blockStarts = bedColumns[8].split(',');\n\n if (featureOpts.exonFrames) {\n var exonFrames = featureOpts.exonFrames.split(',');\n featureOpts.exonFrames = undefined;\n }\n\n featureOpts.type = 'transcript'\n var grp = new DASGroup();\n for (var k in featureOpts) {\n grp[k] = featureOpts[k];\n }\n grp.id = bedColumns[0];\n grp.segment = this.bwg.idsToChroms[chromId];\n grp.min = start + 1;\n grp.max = end;\n grp.notes = [];\n featureOpts.groups = [grp];\n\n // Moving towards using bigGenePred model, but will\n // still support old Dalliance-style BED12+gene-name for the\n // foreseeable future.\n if (bedColumns.length > 9) {\n var geneId = featureOpts.geneName || bedColumns[9];\n var geneName = geneId;\n if (bedColumns.length > 10) {\n geneName = bedColumns[10];\n }\n if (featureOpts.geneName2)\n geneName = featureOpts.geneName2;\n\n var gg = $.extend({}, grp);\n gg.id = geneId;\n gg.label = geneName;\n gg.type = 'gene';\n featureOpts.groups.push(gg);\n }\n\n var spanList = [];\n for (var b = 0; b < blockCount; ++b) {\n var bmin = (blockStarts[b]|0) + start;\n var bmax = bmin + (blockSizes[b]|0);\n var span = new Range(bmin, bmax);\n spanList.push(span);\n }\n var spans = union(spanList);\n\n var tsList = spans.ranges();\n for (var s = 0; s < tsList.length; ++s) {\n var ts = tsList[s];\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n\n if (thickEnd > thickStart) {\n var codingRegion = (featureOpts.orientation == '+') ?\n new Range(thickStart, thickEnd + 3) :\n new Range(thickStart - 3, thickEnd);\n // +/- 3 to account for stop codon\n\n var tl = intersection(spans, codingRegion);\n if (tl) {\n featureOpts.type = 'translation';\n var tlList = tl.ranges();\n var readingFrame = 0;\n\n var tlOffset = 0;\n while (tlList[0].min() > tsList[tlOffset].max())\n tlOffset++;\n\n for (var s = 0; s < tlList.length; ++s) {\n // Record reading frame for every exon\n var index = s;\n if (featureOpts.orientation == '-')\n index = tlList.length - s - 1;\n var ts = tlList[index];\n featureOpts.readframe = readingFrame;\n if (exonFrames) {\n var brf = parseInt(exonFrames[index + tlOffset]);\n if (typeof(brf) === 'number' && brf >= 0 && brf <= 2) {\n featureOpts.readframe = brf;\n featureOpts.readframeExplicit = true;\n }\n }\n var length = ts.max() - ts.min();\n readingFrame = (readingFrame + length) % 3;\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n }\n }\n }\n }\n }\n } else {\n throw Error(\"Don't know what to do with \" + this.bwg.type);\n }\n }\n\n //\n // nasty cut/paste, should roll back in!\n //\n\n BigWigView.prototype.getFirstAdjacent = function(chrName, pos, dir, callback) {\n var chr = this.bwg.chromsToIDs[chrName];\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n return callback([]);\n } else {\n this.getFirstAdjacentById(chr, pos, dir, callback);\n }\n }\n\n BigWigView.prototype.getFirstAdjacentById = function(chr, pos, dir, callback) {\n var thisB = this;\n if (!this.cirHeader) {\n this.bwg.data.slice(this.cirTreeOffset, 48).fetch(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n thisB.getFirstAdjacentById(chr, pos, dir, callback);\n });\n return;\n }\n\n var blockToFetch = null;\n var bestBlockChr = -1;\n var bestBlockOffset = -1;\n\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var cirFobRecur = function(offset, level) {\n outstanding += offset.length;\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n }\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n thisB.bwg.data.slice(fr.min(), fr.max() - fr.min()).fetch(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n --outstanding;\n if (outstanding == 0) {\n if (!blockToFetch) {\n if (dir > 0 && (chr != 0 || pos > 0)) {\n return thisB.getFirstAdjacentById(0, 0, dir, callback);\n } else if (dir < 0 && (chr != thisB.bwg.maxID || pos < 1000000000)) {\n return thisB.getFirstAdjacentById(thisB.bwg.maxID, 1000000000, dir, callback);\n }\n return callback([]);\n }\n\n thisB.fetchFeatures(function(chrx, fmin, fmax, toks) {\n return (dir < 0 && (chrx < chr || fmax < pos)) || (dir > 0 && (chrx > chr || fmin > pos));\n }, [blockToFetch], function(features) {\n var bestFeature = null;\n var bestChr = -1;\n var bestPos = -1;\n for (var fi = 0; fi < features.length; ++fi) {\n var f = features[fi];\n var chrx = f._chromId, fmin = f.min, fmax = f.max;\n if (bestFeature == null || ((dir < 0) && (chrx > bestChr || fmax > bestPos)) || ((dir > 0) && (chrx < bestChr || fmin < bestPos))) {\n bestFeature = f;\n bestPos = (dir < 0) ? fmax : fmin;\n bestChr = chrx;\n }\n }\n\n if (bestFeature != null)\n return callback([bestFeature]);\n else\n return callback([]);\n });\n }\n }\n }\n });\n }\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf != 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)))))\n {\n // console.log('Got an interesting block: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n if (/_random/.exec(thisB.bwg.idsToChroms[startChrom])) {\n // dlog('skipping random: ' + thisB.bwg.idsToChroms[startChrom]);\n } else if (blockToFetch == null || ((dir < 0) && (endChrom > bestBlockChr || (endChrom == bestBlockChr && endBase > bestBlockOffset)) ||\n (dir > 0) && (startChrom < bestBlockChr || (startChrom == bestBlockChr && startBase < bestBlockOffset))))\n {\n // dlog('best is: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n blockToFetch = {offset: blockOffset, size: blockSize};\n bestBlockOffset = (dir < 0) ? endBase : startBase;\n bestBlockChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 32;\n }\n } else {\n var bestRecur = -1;\n var bestPos = -1;\n var bestChr = -1;\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = (la[lo + 4]<<32) | (la[lo + 5]);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)) &&\n (endChrom >= chr))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)) &&\n (startChrom <= chr))))\n {\n if (bestRecur < 0 || endBase > bestPos) {\n bestRecur = blockOffset;\n bestPos = (dir < 0) ? endBase : startBase;\n bestChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 24;\n }\n if (bestRecur >= 0) {\n cirFobRecur([bestRecur], level + 1);\n }\n }\n };\n\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n }\n\n /**\n * Automatically choose a zoom level and return data from that level.\n */\n BigWig.prototype.readWigData = function(chrName, min, max) {\n // Maximum number of data points to return when reading a bigwig. This is used\n // to choose the appropriate level. One data point ~= 25-65 bytes.\n // FIXME: For targeted sequencing, data points returned is going to be much lower,\n // so this will need to be tuned appropriately.\n var MAX_DATA_POINTS = 25000;\n\n var range = max - min,\n view;\n // If no zooming needed or available (common in bigbed), use unzoomed view.\n if (range <= MAX_DATA_POINTS || this.zoomLevels.length === 0) {\n view = this.getUnzoomedView();\n }\n else {\n // Find reasonable zoom level. Reduction is the # of bases represented\n // by each data point at that level.\n for (var i = 0; i < this.zoomLevels.length; i++) {\n if (range/this.zoomLevels[i].reduction < MAX_DATA_POINTS) {\n view = this.getZoomedView(i);\n break;\n }\n }\n }\n\n return view.readWigData(chrName, min, max);\n }\n\n BigWig.prototype.getUnzoomedView = function() {\n if (!this.unzoomedView) {\n var cirLen = 4000;\n var nzl = this.zoomLevels[0];\n if (nzl) {\n cirLen = this.zoomLevels[0].dataOffset - this.unzoomedIndexOffset;\n }\n this.unzoomedView = new BigWigView(this, this.unzoomedIndexOffset, cirLen, false);\n }\n return this.unzoomedView;\n }\n\n BigWig.prototype.getZoomedView = function(z) {\n var zh = this.zoomLevels[z];\n if (!zh.view) {\n zh.view = new BigWigView(this, zh.indexOffset, /* this.zoomLevels[z + 1].dataOffset - zh.indexOffset */ 4000, true);\n }\n return zh.view;\n }\n\n /**\n * Create a BigWig object using a URL to a bigwig/bigbed file. Returns a promise\n * that resolves to the object when it's available.\n */\n function makeBwg(url) {\n var promise = $.Deferred(),\n bwg = new BigWig();\n bwg.url = url;\n\n // Read and parse bigwig header, including chrom tree.\n $.when(read(bwg.url, 0, 512)).then(function(result) {\n if (!result) {\n return promise.resolve(null, \"Couldn't fetch file\");\n }\n\n var header = result;\n var ba = new Uint8Array(header);\n var sa = new Int16Array(header);\n var la = new Int32Array(header);\n var magic = ba[0] + (M1 * ba[1]) + (M2 * ba[2]) + (M3 * ba[3]);\n if (magic == BIG_WIG_MAGIC) {\n bwg.type = 'bigwig';\n } else if (magic == BIG_BED_MAGIC) {\n bwg.type = 'bigbed';\n } else if (magic == BIG_WIG_MAGIC_BE || magic == BIG_BED_MAGIC_BE) {\n return promise.resolve(null, \"Currently don't support big-endian BBI files\");\n\n } else {\n return promise.resolve(null, \"Not a supported format, magic=0x\" + magic.toString(16));\n\n }\n\n bwg.version = sa[2]; // 4\n bwg.numZoomLevels = sa[3]; // 6\n bwg.chromTreeOffset = bwg_readOffset(ba, 8);\n bwg.unzoomedDataOffset = bwg_readOffset(ba, 16);\n bwg.unzoomedIndexOffset = bwg_readOffset(ba, 24);\n bwg.fieldCount = sa[16]; // 32\n bwg.definedFieldCount = sa[17]; // 34\n bwg.asOffset = bwg_readOffset(ba, 36);\n bwg.totalSummaryOffset = bwg_readOffset(ba, 44);\n bwg.uncompressBufSize = la[13]; // 52\n bwg.extHeaderOffset = bwg_readOffset(ba, 56);\n\n bwg.zoomLevels = [];\n for (var zl = 0; zl < bwg.numZoomLevels; ++zl) {\n var zlReduction = la[zl*6 + 16]\n var zlData = bwg_readOffset(ba, zl*24 + 72);\n var zlIndex = bwg_readOffset(ba, zl*24 + 80);\n bwg.zoomLevels.push({reduction: zlReduction, dataOffset: zlData, indexOffset: zlIndex});\n }\n\n $.when(bwg.readChromTree()).then(function() {\n bwg.getAutoSQL(function(as) {\n bwg.schema = as;\n return promise.resolve(bwg);\n });\n });\n });\n\n return promise;\n }\n\n\n BigWig.prototype._tsFetch = function(zoom, chr, min, max, callback) {\n var bwg = this;\n if (zoom >= this.zoomLevels.length - 1) {\n if (!this.topLevelReductionCache) {\n this.getZoomedView(this.zoomLevels.length - 1).readWigDataById(-1, 0, 300000000, function(feats) {\n bwg.topLevelReductionCache = feats;\n return bwg._tsFetch(zoom, chr, min, max, callback);\n });\n } else {\n var f = [];\n var c = this.topLevelReductionCache;\n for (var fi = 0; fi < c.length; ++fi) {\n if (c[fi]._chromId == chr) {\n f.push(c[fi]);\n }\n }\n return callback(f);\n }\n } else {\n var view;\n if (zoom < 0) {\n view = this.getUnzoomedView();\n } else {\n view = this.getZoomedView(zoom);\n }\n return view.readWigDataById(chr, min, max, callback);\n }\n }\n\n BigWig.prototype.thresholdSearch = function(chrName, referencePoint, dir, threshold, callback) {\n dir = (dir<0) ? -1 : 1;\n var bwg = this;\n var initialChr = this.chromsToIDs[chrName];\n var candidates = [{chrOrd: 0, chr: initialChr, zoom: bwg.zoomLevels.length - 4, min: 0, max: 300000000, fromRef: true}]\n for (var i = 1; i <= this.maxID + 1; ++i) {\n var chrId = (initialChr + (dir*i)) % (this.maxID + 1);\n if (chrId < 0)\n chrId += (this.maxID + 1);\n candidates.push({chrOrd: i, chr: chrId, zoom: bwg.zoomLevels.length - 1, min: 0, max: 300000000})\n }\n\n function fbThresholdSearchRecur() {\n if (candidates.length == 0) {\n return callback(null);\n }\n candidates.sort(function(c1, c2) {\n var d = c1.zoom - c2.zoom;\n if (d != 0)\n return d;\n\n d = c1.chrOrd - c2.chrOrd;\n if (d != 0)\n return d;\n else\n return c1.min - c2.min * dir;\n });\n\n var candidate = candidates.splice(0, 1)[0];\n bwg._tsFetch(candidate.zoom, candidate.chr, candidate.min, candidate.max, function(feats) {\n var rp = dir > 0 ? 0 : 300000000;\n if (candidate.fromRef)\n rp = referencePoint;\n\n for (var fi = 0; fi < feats.length; ++fi) {\n var f = feats[fi];\n var score;\n if (f.maxScore != undefined)\n score = f.maxScore;\n else\n score = f.score;\n\n if (dir > 0) {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.min > rp)\n return callback(f);\n } else if (f.max > rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n } else {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.max < rp)\n return callback(f);\n } else if (f.min < rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n }\n }\n fbThresholdSearchRecur();\n });\n }\n\n fbThresholdSearchRecur();\n }\n\n BigWig.prototype.getAutoSQL = function(callback) {\n var thisB = this;\n if (!this.asOffset)\n return callback(null);\n\n $.when(read(this.url, this.asOffset, 2048)).then(function(result) {\n var ba = new Uint8Array(result);\n var s = '';\n for (var i = 0; i < ba.length; ++i) {\n if (ba[i] == 0)\n break;\n s += String.fromCharCode(ba[i]);\n }\n\n /*\n * Quick'n'dirty attempt to parse autoSql format.\n * See: http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/059/5949/5949l2.html\n */\n\n var header_re = /(\\w+)\\s+(\\w+)\\s+(\"([^\"]+)\")?\\s+\\(\\s*/;\n var field_re = /([\\w\\[\\]]+)\\s+(\\w+)\\s*;\\s*(\"([^\"]+)\")?\\s*/g;\n\n var headerMatch = header_re.exec(s);\n if (headerMatch) {\n var as = {\n declType: headerMatch[1],\n name: headerMatch[2],\n comment: headerMatch[4],\n\n fields: []\n };\n\n s = s.substring(headerMatch[0]);\n for (var m = field_re.exec(s); m != null; m = field_re.exec(s)) {\n as.fields.push({type: m[1],\n name: m[2],\n comment: m[4]});\n }\n\n return callback(as);\n }\n });\n };\n\n BigWig.prototype.getExtraIndices = function(callback) {\n var thisB = this;\n if (this.version < 4 || this.extHeaderOffset == 0 || this.type != 'bigbed') {\n return callback(null);\n } else {\n this.data.slice(this.extHeaderOffset, 64).fetch(function(result) {\n if (!result) {\n return callback(null, \"Couldn't fetch extension header\");\n }\n\n var ba = new Uint8Array(result);\n var sa = new Int16Array(result);\n var la = new Int32Array(result);\n\n var extHeaderSize = sa[0];\n var extraIndexCount = sa[1];\n var extraIndexListOffset = bwg_readOffset(ba, 4);\n\n if (extraIndexCount == 0) {\n return callback(null);\n }\n\n // FIXME 20byte records only make sense for single-field indices.\n // Right now, these seem to be the only things around, but the format\n // is actually more general.\n thisB.data.slice(extraIndexListOffset, extraIndexCount * 20).fetch(function(eil) {\n if (!eil) {\n return callback(null, \"Couldn't fetch index info\");\n }\n\n var ba = new Uint8Array(eil);\n var sa = new Int16Array(eil);\n var la = new Int32Array(eil);\n\n var indices = [];\n for (var ii = 0; ii < extraIndexCount; ++ii) {\n var eiType = sa[ii*10];\n var eiFieldCount = sa[ii*10 + 1];\n var eiOffset = bwg_readOffset(ba, ii*20 + 4);\n var eiField = sa[ii*10 + 8]\n var index = new BBIExtraIndex(thisB, eiType, eiFieldCount, eiOffset, eiField);\n indices.push(index);\n }\n callback(indices);\n });\n });\n }\n }\n\n function BBIExtraIndex(bbi, type, fieldCount, offset, field) {\n this.bbi = bbi;\n this.type = type;\n this.fieldCount = fieldCount;\n this.offset = offset;\n this.field = field;\n }\n\n BBIExtraIndex.prototype.lookup = function(name, callback) {\n var thisB = this;\n\n this.bbi.data.slice(this.offset, 32).fetch(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n function bptReadNode(nodeOffset) {\n thisB.bbi.data.slice(nodeOffset, 4 + (blockSize * (keySize + valSize))).fetch(function(node) {\n var ba = new Uint8Array(node);\n var sa = new Uint16Array(node);\n var la = new Uint32Array(node);\n\n var nodeType = ba[0];\n var cnt = sa[1];\n\n var offset = 4;\n if (nodeType == 0) {\n var lastChildOffset = null;\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n\n if (name.localeCompare(key) < 0 && lastChildOffset) {\n bptReadNode(lastChildOffset);\n return;\n }\n lastChildOffset = childOffset;\n }\n bptReadNode(lastChildOffset);\n } else {\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n // Specific for EI case.\n if (key == name) {\n var start = bwg_readOffset(ba, offset);\n var length = readInt(ba, offset + 8);\n\n return thisB.bbi.getUnzoomedView().fetchFeatures(\n function(chr, min, max, toks) {\n if (toks && toks.length > thisB.field - 3)\n return toks[thisB.field - 3] == name;\n },\n [{offset: start, size: length}],\n callback);\n }\n offset += valSize;\n }\n return callback([]);\n }\n });\n }\n\n bptReadNode(thisB.offset + rootNodeOffset);\n });\n }\n\n return {\n makeBwg: makeBwg\n };\n}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 133 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// spans.js: JavaScript Intset/Location port.\n//\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\n\"use strict\";\n\n\nfunction Range(min, max)\n{\n if (typeof(min) != 'number' || typeof(max) != 'number')\n throw 'Bad range ' + min + ',' + max;\n this._min = min;\n this._max = max;\n}\n\nRange.prototype.min = function() {\n return this._min;\n}\n\nRange.prototype.max = function() {\n return this._max;\n}\n\nRange.prototype.contains = function(pos) {\n return pos >= this._min && pos <= this._max;\n}\n\nRange.prototype.isContiguous = function() {\n return true;\n}\n\nRange.prototype.ranges = function() {\n return [this];\n}\n\nRange.prototype._pushRanges = function(ranges) {\n ranges.push(this);\n}\n\nRange.prototype.toString = function() {\n return '[' + this._min + '-' + this._max + ']';\n}\n\nfunction _Compound(ranges) {\n // given: a set of unsorted possibly overlapping ranges\n // sort the input ranges\n var sorted = ranges.sort(_rangeOrder);\n // merge overlaps between adjacent ranges\n var merged = [];\n var current = sorted.shift();\n sorted.forEach(function(range) {\n if (range._min <= current._max) {\n if (range._max > current._max) {\n current._max = range._max;\n }\n }\n else {\n merged.push(current);\n current = range;\n }\n });\n merged.push(current);\n this._ranges = merged;\n}\n\n_Compound.prototype.min = function() {\n return this._ranges[0].min();\n}\n\n_Compound.prototype.max = function() {\n return this._ranges[this._ranges.length - 1].max();\n}\n\n// returns the index of the first range that is not less than pos\n_Compound.prototype.lower_bound = function(pos) {\n // first check if pos is out of range\n var r = this.ranges();\n if (pos > this.max()) return r.length;\n if (pos < this.min()) return 0;\n // do a binary search\n var a=0, b=r.length - 1;\n while (a <= b) {\n var m = Math.floor((a+b)/2);\n if (pos > r[m]._max) {\n a = m+1;\n }\n else if (pos < r[m]._min) {\n b = m-1;\n }\n else {\n return m;\n }\n }\n return a;\n}\n\n_Compound.prototype.contains = function(pos) {\n var lb = this.lower_bound(pos);\n if (lb < this._ranges.length && this._ranges[lb].contains(pos)) {\n return true;\n }\n return false;\n}\n\n_Compound.prototype.insertRange = function(range) {\n var lb = this.lower_bound(range._min);\n if (lb === this._ranges.length) { // range follows this\n this._ranges.push(range);\n return;\n }\n\n var r = this.ranges();\n if (range._max < r[lb]._min) { // range preceeds lb\n this._ranges.splice(lb,0,range);\n return;\n }\n\n // range overlaps lb (at least)\n if (r[lb]._min < range._min) range._min = r[lb]._min;\n var ub = lb+1;\n while (ub < r.length && r[ub]._min <= range._max) {\n ub++;\n }\n ub--;\n // ub is the upper bound of the new range\n if (r[ub]._max > range._max) range._max = r[ub]._max;\n\n // splice range into this._ranges\n this._ranges.splice(lb,ub-lb+1,range);\n return;\n}\n\n_Compound.prototype.isContiguous = function() {\n return this._ranges.length > 1;\n}\n\n_Compound.prototype.ranges = function() {\n return this._ranges;\n}\n\n_Compound.prototype._pushRanges = function(ranges) {\n for (var ri = 0; ri < this._ranges.length; ++ri)\n ranges.push(this._ranges[ri]);\n}\n\n_Compound.prototype.toString = function() {\n var s = '';\n for (var r = 0; r < this._ranges.length; ++r) {\n if (r>0) {\n s = s + ',';\n }\n s = s + this._ranges[r].toString();\n }\n return s;\n}\n\nfunction union(s0, s1) {\n if (! (s0 instanceof _Compound)) {\n if (! (s0 instanceof Array))\n s0 = [s0];\n s0 = new _Compound(s0);\n }\n\n if (s1)\n s0.insertRange(s1);\n\n return s0;\n}\n\nfunction intersection(s0, s1) {\n var r0 = s0.ranges();\n var r1 = s1.ranges();\n var l0 = r0.length, l1 = r1.length;\n var i0 = 0, i1 = 0;\n var or = [];\n\n while (i0 < l0 && i1 < l1) {\n var s0 = r0[i0], s1 = r1[i1];\n var lapMin = Math.max(s0.min(), s1.min());\n var lapMax = Math.min(s0.max(), s1.max());\n if (lapMax >= lapMin) {\n or.push(new Range(lapMin, lapMax));\n }\n if (s0.max() > s1.max()) {\n ++i1;\n } else {\n ++i0;\n }\n }\n\n if (or.length == 0) {\n return null; // FIXME\n } else if (or.length == 1) {\n return or[0];\n } else {\n return new _Compound(or);\n }\n}\n\nfunction coverage(s) {\n var tot = 0;\n var rl = s.ranges();\n for (var ri = 0; ri < rl.length; ++ri) {\n var r = rl[ri];\n tot += (r.max() - r.min() + 1);\n }\n return tot;\n}\n\n\n\nfunction rangeOrder(a, b)\n{\n if (a.min() < b.min()) {\n return -1;\n } else if (a.min() > b.min()) {\n return 1;\n } else if (a.max() < b.max()) {\n return -1;\n } else if (b.max() > a.max()) {\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction _rangeOrder(a, b)\n{\n if (a._min < b._min) {\n return -1;\n } else if (a._min > b._min) {\n return 1;\n } else if (a._max < b._max) {\n return -1;\n } else if (b._max > a._max) {\n return 1;\n } else {\n return 0;\n }\n}\n\nreturn {\n Range: Range,\n union: union,\n intersection: intersection,\n coverage: coverage,\n rangeOver: rangeOrder,\n _rangeOrder: _rangeOrder\n};\n}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }),\n/* 134 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Javascript ZLib\n// By Thomas Down 2010-2011\n//\n// Based very heavily on portions of jzlib (by ymnk@jcraft.com), who in\n// turn credits Jean-loup Gailly and Mark Adler for the original zlib code.\n//\n// inflate.js: ZLib inflate code\n//\n\n//\n// Shared constants\n//\n\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {\n\nvar MAX_WBITS=15; // 32K LZ77 window\nvar DEF_WBITS=MAX_WBITS;\nvar MAX_MEM_LEVEL=9;\nvar MANY=1440;\nvar BMAX = 15;\n\n// preset dictionary flag in zlib header\nvar PRESET_DICT=0x20;\n\nvar Z_NO_FLUSH=0;\nvar Z_PARTIAL_FLUSH=1;\nvar Z_SYNC_FLUSH=2;\nvar Z_FULL_FLUSH=3;\nvar Z_FINISH=4;\n\nvar Z_DEFLATED=8;\n\nvar Z_OK=0;\nvar Z_STREAM_END=1;\nvar Z_NEED_DICT=2;\nvar Z_ERRNO=-1;\nvar Z_STREAM_ERROR=-2;\nvar Z_DATA_ERROR=-3;\nvar Z_MEM_ERROR=-4;\nvar Z_BUF_ERROR=-5;\nvar Z_VERSION_ERROR=-6;\n\nvar METHOD=0; // waiting for method byte\nvar FLAG=1; // waiting for flag byte\nvar DICT4=2; // four dictionary check bytes to go\nvar DICT3=3; // three dictionary check bytes to go\nvar DICT2=4; // two dictionary check bytes to go\nvar DICT1=5; // one dictionary check byte to go\nvar DICT0=6; // waiting for inflateSetDictionary\nvar BLOCKS=7; // decompressing blocks\nvar CHECK4=8; // four check bytes to go\nvar CHECK3=9; // three check bytes to go\nvar CHECK2=10; // two check bytes to go\nvar CHECK1=11; // one check byte to go\nvar DONE=12; // finished check, done\nvar BAD=13; // got an error--stay here\n\nvar inflate_mask = [0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff];\n\nvar IB_TYPE=0; // get type bits (3, including end bit)\nvar IB_LENS=1; // get lengths for stored\nvar IB_STORED=2;// processing stored block\nvar IB_TABLE=3; // get table lengths\nvar IB_BTREE=4; // get bit lengths tree for a dynamic block\nvar IB_DTREE=5; // get length, distance trees for a dynamic block\nvar IB_CODES=6; // processing fixed or dynamic block\nvar IB_DRY=7; // output remaining window bytes\nvar IB_DONE=8; // finished last block, done\nvar IB_BAD=9; // ot a data error--stuck here\n\nvar fixed_bl = 9;\nvar fixed_bd = 5;\n\nvar fixed_tl = [\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,192,\n 80,7,10, 0,8,96, 0,8,32, 0,9,160,\n 0,8,0, 0,8,128, 0,8,64, 0,9,224,\n 80,7,6, 0,8,88, 0,8,24, 0,9,144,\n 83,7,59, 0,8,120, 0,8,56, 0,9,208,\n 81,7,17, 0,8,104, 0,8,40, 0,9,176,\n 0,8,8, 0,8,136, 0,8,72, 0,9,240,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,200,\n 81,7,13, 0,8,100, 0,8,36, 0,9,168,\n 0,8,4, 0,8,132, 0,8,68, 0,9,232,\n 80,7,8, 0,8,92, 0,8,28, 0,9,152,\n 84,7,83, 0,8,124, 0,8,60, 0,9,216,\n 82,7,23, 0,8,108, 0,8,44, 0,9,184,\n 0,8,12, 0,8,140, 0,8,76, 0,9,248,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,196,\n 81,7,11, 0,8,98, 0,8,34, 0,9,164,\n 0,8,2, 0,8,130, 0,8,66, 0,9,228,\n 80,7,7, 0,8,90, 0,8,26, 0,9,148,\n 84,7,67, 0,8,122, 0,8,58, 0,9,212,\n 82,7,19, 0,8,106, 0,8,42, 0,9,180,\n 0,8,10, 0,8,138, 0,8,74, 0,9,244,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,204,\n 81,7,15, 0,8,102, 0,8,38, 0,9,172,\n 0,8,6, 0,8,134, 0,8,70, 0,9,236,\n 80,7,9, 0,8,94, 0,8,30, 0,9,156,\n 84,7,99, 0,8,126, 0,8,62, 0,9,220,\n 82,7,27, 0,8,110, 0,8,46, 0,9,188,\n 0,8,14, 0,8,142, 0,8,78, 0,9,252,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,194,\n 80,7,10, 0,8,97, 0,8,33, 0,9,162,\n 0,8,1, 0,8,129, 0,8,65, 0,9,226,\n 80,7,6, 0,8,89, 0,8,25, 0,9,146,\n 83,7,59, 0,8,121, 0,8,57, 0,9,210,\n 81,7,17, 0,8,105, 0,8,41, 0,9,178,\n 0,8,9, 0,8,137, 0,8,73, 0,9,242,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,202,\n 81,7,13, 0,8,101, 0,8,37, 0,9,170,\n 0,8,5, 0,8,133, 0,8,69, 0,9,234,\n 80,7,8, 0,8,93, 0,8,29, 0,9,154,\n 84,7,83, 0,8,125, 0,8,61, 0,9,218,\n 82,7,23, 0,8,109, 0,8,45, 0,9,186,\n 0,8,13, 0,8,141, 0,8,77, 0,9,250,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,198,\n 81,7,11, 0,8,99, 0,8,35, 0,9,166,\n 0,8,3, 0,8,131, 0,8,67, 0,9,230,\n 80,7,7, 0,8,91, 0,8,27, 0,9,150,\n 84,7,67, 0,8,123, 0,8,59, 0,9,214,\n 82,7,19, 0,8,107, 0,8,43, 0,9,182,\n 0,8,11, 0,8,139, 0,8,75, 0,9,246,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,206,\n 81,7,15, 0,8,103, 0,8,39, 0,9,174,\n 0,8,7, 0,8,135, 0,8,71, 0,9,238,\n 80,7,9, 0,8,95, 0,8,31, 0,9,158,\n 84,7,99, 0,8,127, 0,8,63, 0,9,222,\n 82,7,27, 0,8,111, 0,8,47, 0,9,190,\n 0,8,15, 0,8,143, 0,8,79, 0,9,254,\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,193,\n\n 80,7,10, 0,8,96, 0,8,32, 0,9,161,\n 0,8,0, 0,8,128, 0,8,64, 0,9,225,\n 80,7,6, 0,8,88, 0,8,24, 0,9,145,\n 83,7,59, 0,8,120, 0,8,56, 0,9,209,\n 81,7,17, 0,8,104, 0,8,40, 0,9,177,\n 0,8,8, 0,8,136, 0,8,72, 0,9,241,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,201,\n 81,7,13, 0,8,100, 0,8,36, 0,9,169,\n 0,8,4, 0,8,132, 0,8,68, 0,9,233,\n 80,7,8, 0,8,92, 0,8,28, 0,9,153,\n 84,7,83, 0,8,124, 0,8,60, 0,9,217,\n 82,7,23, 0,8,108, 0,8,44, 0,9,185,\n 0,8,12, 0,8,140, 0,8,76, 0,9,249,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,197,\n 81,7,11, 0,8,98, 0,8,34, 0,9,165,\n 0,8,2, 0,8,130, 0,8,66, 0,9,229,\n 80,7,7, 0,8,90, 0,8,26, 0,9,149,\n 84,7,67, 0,8,122, 0,8,58, 0,9,213,\n 82,7,19, 0,8,106, 0,8,42, 0,9,181,\n 0,8,10, 0,8,138, 0,8,74, 0,9,245,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,205,\n 81,7,15, 0,8,102, 0,8,38, 0,9,173,\n 0,8,6, 0,8,134, 0,8,70, 0,9,237,\n 80,7,9, 0,8,94, 0,8,30, 0,9,157,\n 84,7,99, 0,8,126, 0,8,62, 0,9,221,\n 82,7,27, 0,8,110, 0,8,46, 0,9,189,\n 0,8,14, 0,8,142, 0,8,78, 0,9,253,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,195,\n 80,7,10, 0,8,97, 0,8,33, 0,9,163,\n 0,8,1, 0,8,129, 0,8,65, 0,9,227,\n 80,7,6, 0,8,89, 0,8,25, 0,9,147,\n 83,7,59, 0,8,121, 0,8,57, 0,9,211,\n 81,7,17, 0,8,105, 0,8,41, 0,9,179,\n 0,8,9, 0,8,137, 0,8,73, 0,9,243,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,203,\n 81,7,13, 0,8,101, 0,8,37, 0,9,171,\n 0,8,5, 0,8,133, 0,8,69, 0,9,235,\n 80,7,8, 0,8,93, 0,8,29, 0,9,155,\n 84,7,83, 0,8,125, 0,8,61, 0,9,219,\n 82,7,23, 0,8,109, 0,8,45, 0,9,187,\n 0,8,13, 0,8,141, 0,8,77, 0,9,251,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,199,\n 81,7,11, 0,8,99, 0,8,35, 0,9,167,\n 0,8,3, 0,8,131, 0,8,67, 0,9,231,\n 80,7,7, 0,8,91, 0,8,27, 0,9,151,\n 84,7,67, 0,8,123, 0,8,59, 0,9,215,\n 82,7,19, 0,8,107, 0,8,43, 0,9,183,\n 0,8,11, 0,8,139, 0,8,75, 0,9,247,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,207,\n 81,7,15, 0,8,103, 0,8,39, 0,9,175,\n 0,8,7, 0,8,135, 0,8,71, 0,9,239,\n 80,7,9, 0,8,95, 0,8,31, 0,9,159,\n 84,7,99, 0,8,127, 0,8,63, 0,9,223,\n 82,7,27, 0,8,111, 0,8,47, 0,9,191,\n 0,8,15, 0,8,143, 0,8,79, 0,9,255\n];\nvar fixed_td = [\n 80,5,1, 87,5,257, 83,5,17, 91,5,4097,\n 81,5,5, 89,5,1025, 85,5,65, 93,5,16385,\n 80,5,3, 88,5,513, 84,5,33, 92,5,8193,\n 82,5,9, 90,5,2049, 86,5,129, 192,5,24577,\n 80,5,2, 87,5,385, 83,5,25, 91,5,6145,\n 81,5,7, 89,5,1537, 85,5,97, 93,5,24577,\n 80,5,4, 88,5,769, 84,5,49, 92,5,12289,\n 82,5,13, 90,5,3073, 86,5,193, 192,5,24577\n];\n\n // Tables for deflate from PKZIP's appnote.txt.\n var cplens = [ // Copy lengths for literal codes 257..285\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n ];\n\n // see note #13 above about 258\n var cplext = [ // Extra bits for literal codes 257..285\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid\n ];\n\n var cpdist = [ // Copy offsets for distance codes 0..29\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577\n ];\n\n var cpdext = [ // Extra bits for distance codes\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13];\n\n//\n// ZStream.java\n//\n\nfunction ZStream() {\n}\n\n\nZStream.prototype.inflateInit = function(w, nowrap) {\n if (!w) {\n\tw = DEF_WBITS;\n }\n if (nowrap) {\n\tnowrap = false;\n }\n this.istate = new Inflate();\n return this.istate.inflateInit(this, nowrap?-w:w);\n}\n\nZStream.prototype.inflate = function(f) {\n if(this.istate==null) return Z_STREAM_ERROR;\n return this.istate.inflate(this, f);\n}\n\nZStream.prototype.inflateEnd = function(){\n if(this.istate==null) return Z_STREAM_ERROR;\n var ret=istate.inflateEnd(this);\n this.istate = null;\n return ret;\n}\nZStream.prototype.inflateSync = function(){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSync(this);\n}\nZStream.prototype.inflateSetDictionary = function(dictionary, dictLength){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSetDictionary(this, dictionary, dictLength);\n}\n\n/*\n\n public int deflateInit(int level){\n return deflateInit(level, MAX_WBITS);\n }\n public int deflateInit(int level, boolean nowrap){\n return deflateInit(level, MAX_WBITS, nowrap);\n }\n public int deflateInit(int level, int bits){\n return deflateInit(level, bits, false);\n }\n public int deflateInit(int level, int bits, boolean nowrap){\n dstate=new Deflate();\n return dstate.deflateInit(this, level, nowrap?-bits:bits);\n }\n public int deflate(int flush){\n if(dstate==null){\n return Z_STREAM_ERROR;\n }\n return dstate.deflate(this, flush);\n }\n public int deflateEnd(){\n if(dstate==null) return Z_STREAM_ERROR;\n int ret=dstate.deflateEnd();\n dstate=null;\n return ret;\n }\n public int deflateParams(int level, int strategy){\n if(dstate==null) return Z_STREAM_ERROR;\n return dstate.deflateParams(this, level, strategy);\n }\n public int deflateSetDictionary (byte[] dictionary, int dictLength){\n if(dstate == null)\n return Z_STREAM_ERROR;\n return dstate.deflateSetDictionary(this, dictionary, dictLength);\n }\n\n*/\n\n/*\n // Flush as much pending output as possible. All deflate() output goes\n // through this function so some applications may wish to modify it\n // to avoid allocating a large strm->next_out buffer and copying into it.\n // (See also read_buf()).\n void flush_pending(){\n int len=dstate.pending;\n\n if(len>avail_out) len=avail_out;\n if(len==0) return;\n\n if(dstate.pending_buf.length<=dstate.pending_out ||\n next_out.length<=next_out_index ||\n dstate.pending_buf.length<(dstate.pending_out+len) ||\n next_out.length<(next_out_index+len)){\n System.out.println(dstate.pending_buf.length+\", \"+dstate.pending_out+\n\t\t\t \", \"+next_out.length+\", \"+next_out_index+\", \"+len);\n System.out.println(\"avail_out=\"+avail_out);\n }\n\n System.arraycopy(dstate.pending_buf, dstate.pending_out,\n\t\t next_out, next_out_index, len);\n\n next_out_index+=len;\n dstate.pending_out+=len;\n total_out+=len;\n avail_out-=len;\n dstate.pending-=len;\n if(dstate.pending==0){\n dstate.pending_out=0;\n }\n }\n\n // Read a new buffer from the current input stream, update the adler32\n // and total number of bytes read. All deflate() input goes through\n // this function so some applications may wish to modify it to avoid\n // allocating a large strm->next_in buffer and copying from it.\n // (See also flush_pending()).\n int read_buf(byte[] buf, int start, int size) {\n int len=avail_in;\n\n if(len>size) len=size;\n if(len==0) return 0;\n\n avail_in-=len;\n\n if(dstate.noheader==0) {\n adler=_adler.adler32(adler, next_in, next_in_index, len);\n }\n System.arraycopy(next_in, next_in_index, buf, start, len);\n next_in_index += len;\n total_in += len;\n return len;\n }\n\n public void free(){\n next_in=null;\n next_out=null;\n msg=null;\n _adler=null;\n }\n}\n*/\n\n\n//\n// Inflate.java\n//\n\nfunction Inflate() {\n this.was = [0];\n}\n\nInflate.prototype.inflateReset = function(z) {\n if(z == null || z.istate == null) return Z_STREAM_ERROR;\n\n z.total_in = z.total_out = 0;\n z.msg = null;\n z.istate.mode = z.istate.nowrap!=0 ? BLOCKS : METHOD;\n z.istate.blocks.reset(z, null);\n return Z_OK;\n}\n\nInflate.prototype.inflateEnd = function(z){\n if(this.blocks != null)\n this.blocks.free(z);\n this.blocks=null;\n return Z_OK;\n}\n\nInflate.prototype.inflateInit = function(z, w){\n z.msg = null;\n this.blocks = null;\n\n // handle undocumented nowrap option (no zlib header or check)\n nowrap = 0;\n if(w < 0){\n w = - w;\n nowrap = 1;\n }\n\n // set window size\n if(w<8 ||w>15){\n this.inflateEnd(z);\n return Z_STREAM_ERROR;\n }\n this.wbits=w;\n\n z.istate.blocks=new InfBlocks(z,\n\t\t\t\t z.istate.nowrap!=0 ? null : this,\n\t\t\t\t 1<>4)+8>z.istate.wbits){\n z.istate.mode = BAD;\n z.msg=\"invalid window size\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n z.istate.mode=FLAG;\n case FLAG:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n b = (z.next_in[z.next_in_index++])&0xff;\n\n if((((z.istate.method << 8)+b) % 31)!=0){\n z.istate.mode = BAD;\n z.msg = \"incorrect header check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n if((b&PRESET_DICT)==0){\n z.istate.mode = BLOCKS;\n break;\n }\n z.istate.mode = DICT4;\n case DICT4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=DICT3;\n case DICT3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode=DICT2;\n case DICT2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode=DICT1;\n case DICT1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need += (z.next_in[z.next_in_index++]&0xff);\n z.adler = z.istate.need;\n z.istate.mode = DICT0;\n return Z_NEED_DICT;\n case DICT0:\n z.istate.mode = BAD;\n z.msg = \"need dictionary\";\n z.istate.marker = 0; // can try inflateSync\n return Z_STREAM_ERROR;\n case BLOCKS:\n\n r = z.istate.blocks.proc(z, r);\n if(r == Z_DATA_ERROR){\n z.istate.mode = BAD;\n z.istate.marker = 0; // can try inflateSync\n break;\n }\n if(r == Z_OK){\n r = f;\n }\n if(r != Z_STREAM_END){\n return r;\n }\n r = f;\n z.istate.blocks.reset(z, z.istate.was);\n if(z.istate.nowrap!=0){\n z.istate.mode=DONE;\n break;\n }\n z.istate.mode=CHECK4;\n case CHECK4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=CHECK3;\n case CHECK3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode = CHECK2;\n case CHECK2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode = CHECK1;\n case CHECK1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=(z.next_in[z.next_in_index++]&0xff);\n\n if(((z.istate.was[0])) != ((z.istate.need))){\n z.istate.mode = BAD;\n z.msg = \"incorrect data check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n z.istate.mode = DONE;\n case DONE:\n return Z_STREAM_END;\n case BAD:\n return Z_DATA_ERROR;\n default:\n return Z_STREAM_ERROR;\n }\n }\n }\n\n\nInflate.prototype.inflateSetDictionary = function(z, dictionary, dictLength) {\n var index=0;\n var length = dictLength;\n if(z==null || z.istate == null|| z.istate.mode != DICT0)\n return Z_STREAM_ERROR;\n\n if(z._adler.adler32(1, dictionary, 0, dictLength)!=z.adler){\n return Z_DATA_ERROR;\n }\n\n z.adler = z._adler.adler32(0, null, 0, 0);\n\n if(length >= (1<>> 1){\n case 0: // stored\n {b>>>=(3);k-=(3);}\n t = k & 7; // go to byte boundary\n\n {b>>>=(t);k-=(t);}\n this.mode = IB_LENS; // get length of stored block\n break;\n case 1: // fixed\n {\n var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n var tl=[];\n\t var td=[];\n\n\t inflate_trees_fixed(bl, bd, tl, td, z);\n this.codes.init(bl[0], bd[0], tl[0], 0, td[0], 0, z);\n }\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_CODES;\n break;\n case 2: // dynamic\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_TABLE;\n break;\n case 3: // illegal\n\n {b>>>=(3);k-=(3);}\n this.mode = BAD;\n z.msg = \"invalid block type\";\n r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tbreak;\n case IB_LENS:\n\twhile(k<(32)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>> 16) & 0xffff) != (b & 0xffff)){\n\t this.mode = BAD;\n\t z.msg = \"invalid stored block lengths\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tthis.left = (b & 0xffff);\n\tb = k = 0; // dump bits\n\tthis.mode = this.left!=0 ? IB_STORED : (this.last!=0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_STORED:\n\tif (n == 0){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tif(m==0){\n\t if(q==end&&read!=0){\n\t q=0; m=(qn) t = n;\n\tif(t>m) t = m;\n\tarrayCopy(z.next_in, p, this.window, q, t);\n\tp += t; n -= t;\n\tq += t; m -= t;\n\tif ((this.left -= t) != 0)\n\t break;\n\tthis.mode = (this.last != 0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_TABLE:\n\n\twhile(k<(14)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)< 29 || ((t >> 5) & 0x1f) > 29)\n\t {\n\t this.mode = IB_BAD;\n\t z.msg = \"too many length or distance symbols\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\tt = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);\n\tif(this.blens==null || this.blens.length>>=(14);k-=(14);}\n\n\tthis.index = 0;\n\tmode = IB_BTREE;\n case IB_BTREE:\n\twhile (this.index < 4 + (this.table >>> 10)){\n\t while(k<(3)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(3);k-=(3);}\n\t}\n\n\twhile(this.index < 19){\n\t this.blens[INFBLOCKS_BORDER[this.index++]] = 0;\n\t}\n\n\tthis.bb[0] = 7;\n\tt = this.inftree.inflate_trees_bits(this.blens, this.bb, this.tb, this.hufts, z);\n\tif (t != Z_OK){\n\t r = t;\n\t if (r == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t }\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tthis.index = 0;\n\tthis.mode = IB_DTREE;\n case IB_DTREE:\n\twhile (true){\n\t t = this.table;\n\t if(!(this.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))){\n\t break;\n\t }\n\n\t var h; //int[]\n\t var i, j, c;\n\n\t t = this.bb[0];\n\n\t while(k<(t)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\t this.blens[this.index++] = c;\n\t }\n\t else { // c == 16..18\n\t i = c == 18 ? 7 : c - 14;\n\t j = c == 18 ? 11 : 3;\n\n\t while(k<(t+i)){\n\t if(n!=0){\n\t\tr=Z_OK;\n\t }\n\t else{\n\t\tthis.bitb=b; this.bitk=k;\n\t\tz.avail_in=n;\n\t\tz.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t\tthis.write=q;\n\t\treturn this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\n\t j += (b & inflate_mask[i]);\n\n\t b>>>=(i);k-=(i);\n\n\t i = this.index;\n\t t = this.table;\n\t if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||\n\t\t(c == 16 && i < 1)){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t z.msg = \"invalid bit length repeat\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\n\t c = c == 16 ? this.blens[i-1] : 0;\n\t do{\n\t this.blens[i++] = c;\n\t }\n\t while (--j!=0);\n\t this.index = i;\n\t }\n\t}\n\n\tthis.tb[0]=-1;\n\t{\n\t var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n\t var tl=new Int32Array(1);\n\t var td=new Int32Array(1);\n\t bl[0] = 9; // must be <= 9 for lookahead assumptions\n\t bd[0] = 6; // must be <= 9 for lookahead assumptions\n\n\t t = this.table;\n\t t = this.inftree.inflate_trees_dynamic(257 + (t & 0x1f),\n\t\t\t\t\t 1 + ((t >> 5) & 0x1f),\n\t\t\t\t\t this.blens, bl, bd, tl, td, this.hufts, z);\n\n\t if (t != Z_OK){\n\t if (t == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = BAD;\n\t }\n\t r = t;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\t this.codes.init(bl[0], bd[0], this.hufts, tl[0], this.hufts, td[0], z);\n\t}\n\tthis.mode = IB_CODES;\n case IB_CODES:\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n; z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\n\tif ((r = this.codes.proc(this, z, r)) != Z_STREAM_END){\n\t return this.inflate_flush(z, r);\n\t}\n\tr = Z_OK;\n\tthis.codes.free(z);\n\n\tp=z.next_in_index; n=z.avail_in;b=this.bitb;k=this.bitk;\n\tq=this.write;m = (q < this.read ? this.read-q-1 : this.end-q);\n\n\tif (this.last==0){\n\t this.mode = IB_TYPE;\n\t break;\n\t}\n\tthis.mode = IB_DRY;\n case IB_DRY:\n\tthis.write=q;\n\tr = this.inflate_flush(z, r);\n\tq=this.write; m = (q < this.read ? this.read-q-1 : this.end-q);\n\tif (this.read != this.write){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z, r);\n\t}\n\tmode = DONE;\n case IB_DONE:\n\tr = Z_STREAM_END;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n case IB_BAD:\n\tr = Z_DATA_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n\n default:\n\tr = Z_STREAM_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n }\n }\n }\n\nInfBlocks.prototype.free = function(z){\n this.reset(z, null);\n this.window=null;\n this.hufts=null;\n}\n\nInfBlocks.prototype.set_dictionary = function(d, start, n){\n arrayCopy(d, start, window, 0, n);\n this.read = this.write = n;\n}\n\n // Returns true if inflate is currently at the end of a block generated\n // by Z_SYNC_FLUSH or Z_FULL_FLUSH.\nInfBlocks.prototype.sync_point = function(){\n return this.mode == IB_LENS;\n}\n\n // copy as much as possible from the sliding window to the output area\nInfBlocks.prototype.inflate_flush = function(z, r){\n var n;\n var p;\n var q;\n\n // local copies of source and destination pointers\n p = z.next_out_index;\n q = this.read;\n\n // compute number of bytes to copy as far as end of window\n n = ((q <= this.write ? this.write : this.end) - q);\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n z.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy as far as end of window\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n\n // see if more to copy at beginning of window\n if (q == this.end){\n // wrap pointers\n q = 0;\n if (this.write == this.end)\n this.write = 0;\n\n // compute bytes to copy\n n = this.write - q;\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n\tz.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n }\n\n // update pointers\n z.next_out_index = p;\n this.read = q;\n\n // done\n return r;\n }\n\n//\n// InfCodes.java\n//\n\nvar IC_START=0; // x: set up for LEN\nvar IC_LEN=1; // i: get length/literal/eob next\nvar IC_LENEXT=2; // i: getting length extra (have base)\nvar IC_DIST=3; // i: get distance next\nvar IC_DISTEXT=4;// i: getting distance extra\nvar IC_COPY=5; // o: copying bytes in window, waiting for space\nvar IC_LIT=6; // o: got literal, waiting for output space\nvar IC_WASH=7; // o: got eob, possibly still output waiting\nvar IC_END=8; // x: got eob and all data flushed\nvar IC_BADCODE=9;// x: got error\n\nfunction InfCodes() {\n}\n\nInfCodes.prototype.init = function(bl, bd, tl, tl_index, td, td_index, z) {\n this.mode=IC_START;\n this.lbits=bl;\n this.dbits=bd;\n this.ltree=tl;\n this.ltree_index=tl_index;\n this.dtree = td;\n this.dtree_index=td_index;\n this.tree=null;\n}\n\nInfCodes.prototype.proc = function(s, z, r){\n var j; // temporary storage\n var t; // temporary pointer (int[])\n var tindex; // temporary pointer\n var e; // extra bits or operation\n var b=0; // bit buffer\n var k=0; // bits in bit buffer\n var p=0; // input data pointer\n var n; // bytes available there\n var q; // output window write pointer\n var m; // bytes to end of window or read pointer\n var f; // pointer to copy strings from\n\n // copy input/output information to locals (UPDATE macro restores)\n p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n q=s.write;m=q= 258 && n >= 10){\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t r = this.inflate_fast(this.lbits, this.dbits,\n\t\t\t this.ltree, this.ltree_index,\n\t\t\t this.dtree, this.dtree_index,\n\t\t\t s, z);\n\n\t p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n\t q=s.write;m=q>>=(this.tree[tindex+1]);\n\tk-=(this.tree[tindex+1]);\n\n\te=this.tree[tindex];\n\n\tif(e == 0){ // literal\n\t this.lit = this.tree[tindex+2];\n\t this.mode = IC_LIT;\n\t break;\n\t}\n\tif((e & 16)!=0 ){ // length\n\t this.get = e & 15;\n\t this.len = this.tree[tindex+2];\n\t this.mode = IC_LENEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tif ((e & 32)!=0){ // end of block\n\t this.mode = IC_WASH;\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid literal/length code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_LENEXT: // i: getting length extra (have base)\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.need = this.dbits;\n\tthis.tree = this.dtree;\n\tthis.tree_index = this.dtree_index;\n\tthis.mode = IC_DIST;\n case IC_DIST: // i: get distance next\n\tj = this.need;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=this.tree[tindex+1];\n\tk-=this.tree[tindex+1];\n\n\te = (this.tree[tindex]);\n\tif((e & 16)!=0){ // distance\n\t this.get = e & 15;\n\t this.dist = this.tree[tindex+2];\n\t this.mode = IC_DISTEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid distance code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_DISTEXT: // i: getting distance extra\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.mode = IC_COPY;\n case IC_COPY: // o: copying bytes in window, waiting for space\n f = q - this.dist;\n while(f < 0){ // modulo window size-\"while\" instead\n f += s.end; // of \"if\" handles invalid distances\n\t}\n\twhile (this.len!=0){\n\n\t if(m==0){\n\t if(q==s.end&&s.read!=0){q=0;m=q 7){ // return unused byte, if any\n\t k -= 8;\n\t n++;\n\t p--; // can always return one\n\t}\n\n\ts.write=q; r=s.inflate_flush(z,r);\n\tq=s.write;m=q= 258 && n >= 10\n // get literal/length code\n while(k<(20)){ // max bits for literal/length code\n\tn--;\n\tb|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\ts.window[q++] = tp[tp_index_t_3+2];\n\tm--;\n\tcontinue;\n }\n do {\n\n\tb>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\tif((e&16)!=0){\n\t e &= 15;\n\t c = tp[tp_index_t_3+2] + (b & inflate_mask[e]);\n\n\t b>>=e; k-=e;\n\n\t // decode distance base of block to copy\n\t while(k<(15)){ // max bits for distance code\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t if((e&16)!=0){\n\t // get extra bits to add to distance base\n\t e &= 15;\n\t while(k<(e)){ // get extra bits (up to 13)\n\t\tn--;\n\t\tb|=(z.next_in[p++]&0xff)<>=(e); k-=(e);\n\n\t // do the copy\n\t m -= c;\n\t if (q >= d){ // offset before dest\n\t\t// just copy\n\t\tr=q-d;\n\t\tif(q-r>0 && 2>(q-r)){\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t\telse{\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t }\n\t else{ // else offset after destination\n r=q-d;\n do{\n r+=s.end; // force pointer in window\n }while(r<0); // covers invalid distances\n\t\te=s.end-r;\n\t\tif(c>e){ // if source crosses,\n\t\t c-=e; // wrapped copy\n\t\t if(q-r>0 && e>(q-r)){\n\t\t do{s.window[q++] = s.window[r++];}\n\t\t while(--e!=0);\n\t\t }\n\t\t else{\n\t\t arrayCopy(s.window, r, s.window, q, e);\n\t\t q+=e; r+=e; e=0;\n\t\t }\n\t\t r = 0; // copy rest from start of window\n\t\t}\n\n\t }\n\n\t // copy all or what's left\n do{s.window[q++] = s.window[r++];}\n\t\twhile(--c!=0);\n\t break;\n\t }\n\t else if((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t e=tp[tp_index_t_3];\n\t }\n\t else{\n\t z.msg = \"invalid distance code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t }\n\t }\n\t while(true);\n\t break;\n\t}\n\n\tif((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t if((e=tp[tp_index_t_3])==0){\n\n\t b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t s.window[q++]=tp[tp_index_t_3+2];\n\t m--;\n\t break;\n\t }\n\t}\n\telse if((e&32)!=0){\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_STREAM_END;\n\t}\n\telse{\n\t z.msg=\"invalid literal/length code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t}\n }\n while(true);\n }\n while(m>=258 && n>= 10);\n\n // not enough input or output--restore pointers and return\n c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n s.bitb=b;s.bitk=k;\n z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n s.write=q;\n\n return Z_OK;\n}\n\n//\n// InfTree.java\n//\n\nfunction InfTree() {\n}\n\nInfTree.prototype.huft_build = function(b, bindex, n, s, d, e, t, m, hp, hn, v) {\n\n // Given a list of code lengths and a maximum table size, make a set of\n // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR\n // if the given code set is incomplete (the tables are still built in this\n // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of\n // lengths), or Z_MEM_ERROR if not enough memory.\n\n var a; // counter for codes of length k\n var f; // i repeats in table every f entries\n var g; // maximum code length\n var h; // table level\n var i; // counter, current code\n var j; // counter\n var k; // number of bits in current code\n var l; // bits per table (returned in m)\n var mask; // (1 << w) - 1, to avoid cc -O bug on HP\n var p; // pointer into c[], b[], or v[]\n var q; // points to current table\n var w; // bits before this table == (l * h)\n var xp; // pointer into x\n var y; // number of dummy codes added\n var z; // number of entries in current table\n\n // Generate counts for each bit length\n\n p = 0; i = n;\n do {\n this.c[b[bindex+p]]++; p++; i--; // assume all entries <= BMAX\n }while(i!=0);\n\n if(this.c[0] == n){ // null input--all zero length codes\n t[0] = -1;\n m[0] = 0;\n return Z_OK;\n }\n\n // Find minimum and maximum length, bound *m by those\n l = m[0];\n for (j = 1; j <= BMAX; j++)\n if(this.c[j]!=0) break;\n k = j; // minimum code length\n if(l < j){\n l = j;\n }\n for (i = BMAX; i!=0; i--){\n if(this.c[i]!=0) break;\n }\n g = i; // maximum code length\n if(l > i){\n l = i;\n }\n m[0] = l;\n\n // Adjust last length count to fill out codes, if needed\n for (y = 1 << j; j < i; j++, y <<= 1){\n if ((y -= this.c[j]) < 0){\n return Z_DATA_ERROR;\n }\n }\n if ((y -= this.c[i]) < 0){\n return Z_DATA_ERROR;\n }\n this.c[i] += y;\n\n // Generate starting offsets into the value table for each length\n this.x[1] = j = 0;\n p = 1; xp = 2;\n while (--i!=0) { // note that i == g from above\n this.x[xp] = (j += this.c[p]);\n xp++;\n p++;\n }\n\n // Make a table of values in order of bit lengths\n i = 0; p = 0;\n do {\n if ((j = b[bindex+p]) != 0){\n this.v[this.x[j]++] = i;\n }\n p++;\n }\n while (++i < n);\n n = this.x[g]; // set n to length of v\n\n // Generate the Huffman codes and for each, make the table entries\n this.x[0] = i = 0; // first Huffman code is zero\n p = 0; // grab values in bit order\n h = -1; // no tables yet--level -1\n w = -l; // bits decoded == (l * h)\n this.u[0] = 0; // just to keep compilers happy\n q = 0; // ditto\n z = 0; // ditto\n\n // go through the bit lengths (k already is bits in shortest code)\n for (; k <= g; k++){\n a = this.c[k];\n while (a--!=0){\n\t// here i is the Huffman code of length k bits for value *p\n\t// make tables up to required level\n while (k > w + l){\n h++;\n w += l; // previous table always l bits\n\t // compute minimum size table less than or equal to l bits\n z = g - w;\n z = (z > l) ? l : z; // table size upper limit\n if((f=1<<(j=k-w))>a+1){ // try a k-w bit table\n // too few codes for k-w bit table\n f -= a + 1; // deduct codes from patterns left\n xp = k;\n if(j < z){\n while (++j < z){ // try smaller tables up to z bits\n if((f <<= 1) <= this.c[++xp])\n break; // enough codes to use up j bits\n f -= this.c[xp]; // else deduct codes from patterns\n }\n\t }\n }\n z = 1 << j; // table entries for j-bit table\n\n\t // allocate new table\n if (this.hn[0] + z > MANY){ // (note: doesn't matter for fixed)\n return Z_DATA_ERROR; // overflow of MANY\n }\n this.u[h] = q = /*hp+*/ this.hn[0]; // DEBUG\n this.hn[0] += z;\n\n\t // connect to last table, if there is one\n\t if(h!=0){\n this.x[h]=i; // save pattern for backing up\n this.r[0]=j; // bits in this table\n this.r[1]=l; // bits to dump before this table\n j=i>>>(w - l);\n this.r[2] = (q - this.u[h-1] - j); // offset to this table\n arrayCopy(this.r, 0, hp, (this.u[h-1]+j)*3, 3); // connect to last table\n }\n else{\n t[0] = q; // first table is returned result\n\t }\n }\n\n\t// set up table entry in r\n this.r[1] = (k - w);\n if (p >= n){\n this.r[0] = 128 + 64; // out of values--invalid code\n\t}\n else if (v[p] < s){\n this.r[0] = (this.v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block\n this.r[2] = this.v[p++]; // simple code is just the value\n }\n else{\n this.r[0]=(e[this.v[p]-s]+16+64); // non-simple--look up in lists\n this.r[2]=d[this.v[p++] - s];\n }\n\n // fill code-like entries with r\n f=1<<(k-w);\n for (j=i>>>w;j>>= 1){\n i ^= j;\n\t}\n i ^= j;\n\n\t// backup over finished tables\n mask = (1 << w) - 1; // needed on HP, cc -O bug\n while ((i & mask) != this.x[h]){\n h--; // don't need to update q\n w -= l;\n mask = (1 << w) - 1;\n }\n }\n }\n // Return Z_BUF_ERROR if we were given an incomplete table\n return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;\n}\n\nInfTree.prototype.inflate_trees_bits = function(c, bb, tb, hp, z) {\n var result;\n this.initWorkArea(19);\n this.hn[0]=0;\n result = this.huft_build(c, 0, 19, 19, null, null, tb, bb, hp, this.hn, this.v);\n\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed dynamic bit lengths tree\";\n }\n else if(result == Z_BUF_ERROR || bb[0] == 0){\n z.msg = \"incomplete dynamic bit lengths tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n}\n\nInfTree.prototype.inflate_trees_dynamic = function(nl, nd, c, bl, bd, tl, td, hp, z) {\n var result;\n\n // build literal/length tree\n this.initWorkArea(288);\n this.hn[0]=0;\n result = this.huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, this.hn, this.v);\n if (result != Z_OK || bl[0] == 0){\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed literal/length tree\";\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"incomplete literal/length tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n // build distance tree\n this.initWorkArea(288);\n result = this.huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, this.hn, this.v);\n\n if (result != Z_OK || (bd[0] == 0 && nl > 257)){\n if (result == Z_DATA_ERROR){\n z.msg = \"oversubscribed distance tree\";\n }\n else if (result == Z_BUF_ERROR) {\n z.msg = \"incomplete distance tree\";\n result = Z_DATA_ERROR;\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"empty distance tree with lengths\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n return Z_OK;\n}\n/*\n static int inflate_trees_fixed(int[] bl, //literal desired/actual bit depth\n int[] bd, //distance desired/actual bit depth\n int[][] tl,//literal/length tree result\n int[][] td,//distance tree result\n ZStream z //for memory allocation\n\t\t\t\t ){\n\n*/\n\nfunction inflate_trees_fixed(bl, bd, tl, td, z) {\n bl[0]=fixed_bl;\n bd[0]=fixed_bd;\n tl[0]=fixed_tl;\n td[0]=fixed_td;\n return Z_OK;\n}\n\nInfTree.prototype.initWorkArea = function(vsize){\n if(this.hn==null){\n this.hn=new Int32Array(1);\n this.v=new Int32Array(vsize);\n this.c=new Int32Array(BMAX+1);\n this.r=new Int32Array(3);\n this.u=new Int32Array(BMAX);\n this.x=new Int32Array(BMAX+1);\n }\n if(this.v.length 100) {\n arrayCopy_fast(new Uint8Array(src.buffer, src.byteOffset + srcOffset, count), dest, destOffset);\n } else {\n arrayCopy_slow(src, srcOffset, dest, destOffset, count);\n }\n\n}\n\nfunction arrayCopy_slow(src, srcOffset, dest, destOffset, count) {\n\n // dlog('_slow call: srcOffset=' + srcOffset + '; destOffset=' + destOffset + '; count=' + count);\n\n for (var i = 0; i < count; ++i) {\n dest[destOffset + i] = src[srcOffset + i];\n }\n}\n\nfunction arrayCopy_fast(src, dest, destOffset) {\n dest.set(src, destOffset);\n}\n\n\n // largest prime smaller than 65536\nvar ADLER_BASE=65521;\n // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1\nvar ADLER_NMAX=5552;\n\nfunction adler32(adler, /* byte[] */ buf, index, len){\n if(buf == null){ return 1; }\n\n var s1=adler&0xffff;\n var s2=(adler>>16)&0xffff;\n var k;\n\n while(len > 0) {\n k=len=16){\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n k-=16;\n }\n if(k!=0){\n do{\n s1+=buf[index++]&0xff; s2+=s1;\n }\n while(--k!=0);\n }\n s1%=ADLER_BASE;\n s2%=ADLER_BASE;\n }\n return (s2<<16)|s1;\n}\n\n\n\nfunction jszlib_inflate_buffer(buffer, start, length, afterUncOffset) {\n if (!start) {\n buffer = new Uint8Array(buffer);\n } else if (!length) {\n buffer = new Uint8Array(buffer, start, buffer.byteLength - start);\n } else {\n buffer = new Uint8Array(buffer, start, length);\n }\n\n var z = new ZStream();\n z.inflateInit(DEF_WBITS, true);\n z.next_in = buffer;\n z.next_in_index = 0;\n z.avail_in = buffer.length;\n\n var oBlockList = [];\n var totalSize = 0;\n while (true) {\n var obuf = new Uint8Array(32000);\n z.next_out = obuf;\n z.next_out_index = 0;\n z.avail_out = obuf.length;\n var status = z.inflate(Z_NO_FLUSH);\n if (status != Z_OK && status != Z_STREAM_END && status != Z_BUF_ERROR) {\n throw z.msg;\n }\n if (z.avail_out != 0) {\n var newob = new Uint8Array(obuf.length - z.avail_out);\n arrayCopy(obuf, 0, newob, 0, (obuf.length - z.avail_out));\n obuf = newob;\n }\n oBlockList.push(obuf);\n totalSize += obuf.length;\n if (status == Z_STREAM_END || status == Z_BUF_ERROR) {\n break;\n }\n }\n\n if (afterUncOffset) {\n afterUncOffset[0] = (start || 0) + z.next_in_index;\n }\n\n if (oBlockList.length == 1) {\n return oBlockList[0].buffer;\n } else {\n var out = new Uint8Array(totalSize);\n var cursor = 0;\n for (var i = 0; i < oBlockList.length; ++i) {\n var b = oBlockList[i];\n arrayCopy(b, 0, out, cursor, b.length);\n cursor += b.length;\n }\n return out.buffer;\n }\n}\n\nreturn {\n inflateBuffer: jszlib_inflate_buffer,\n arrayCopy: arrayCopy\n };\n}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\n\n/***/ }),\n/* 135 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(jQuery) {var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// jQuery Ajax Native Plugin\n\n// (c) 2015 Tarik Zakaria Benmerar, Acigna Inc.\n// jQuery Ajax Native Plugin may be freely distributed under the MIT license.\n(function (root, factory) {\n if (true) {\n // AMD. Register as an anonymous module.\n !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(0)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals (root is window)\n factory(root.jQuery);\n }\n}(this, function ( $ ) {\n var ajaxSettings = $.ajaxSettings;\n ajaxSettings.responseFields.native = 'responseNative';\n ajaxSettings.converters[ '* native' ] = true;\n var support = {},\n xhrId = 0,\n xhrSuccessStatus = {\n // file protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE9\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrCallbacks = {},\n xhrSupported = jQuery.ajaxSettings.xhr();\n // Support: IE9\n // Open requests must be manually aborted on unload (#5280)\n if ( window.ActiveXObject ) {\n $( window ).on( \"unload\", function() {\n for ( var key in xhrCallbacks ) {\n xhrCallbacks[ key ]();\n }\n });\n }\n support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\n support.ajax = xhrSupported = !!xhrSupported;\n\n //Native Data Type Ajax Transport\n $.ajaxTransport('native', function ( options ) {\n var callback;\n // Cross domain only allowed if supported through XMLHttpRequest\n if ( support.cors || xhrSupported && !options.crossDomain ) {\n return {\n send: function( headers, complete ) {\n var i,\n xhr = options.xhr(),\n id = ++xhrId,\n responses = {};\n\n xhr.open( options.type, options.url, options.async, options.username, options.password );\n\n // Apply custom fields if provided\n if ( options.xhrFields ) {\n for ( i in options.xhrFields ) {\n xhr[ i ] = options.xhrFields[ i ];\n }\n }\n\n // Override mime type if needed\n if ( options.mimeType && xhr.overrideMimeType ) {\n xhr.overrideMimeType( options.mimeType );\n }\n\n // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n if ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n }\n\n // Set headers\n for ( i in headers ) {\n xhr.setRequestHeader( i, headers[ i ] );\n }\n\n // Callback\n callback = function( type ) {\n return function() {\n if ( callback ) {\n delete xhrCallbacks[ id ];\n callback = xhr.onload = xhr.onerror = null;\n\n if ( type === \"abort\" ) {\n xhr.abort();\n } else if ( type === \"error\" ) {\n complete(\n // file: protocol always yields status 0; see #8605, #14207\n xhr.status,\n xhr.statusText\n );\n } else {\n // The native response associated with the responseType\n // Stored in the xhr.response attribute (XHR2 Spec)\n if ( xhr.response ) {\n responses.native = xhr.response;\n }\n\n complete(\n xhrSuccessStatus[ xhr.status ] || xhr.status,\n xhr.statusText,\n responses,\n xhr.getAllResponseHeaders()\n );\n }\n }\n };\n };\n\n // Listen to events\n xhr.onload = callback();\n xhr.onerror = callback(\"error\");\n\n // Create the abort callback\n callback = xhrCallbacks[ id ] = callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send( options.hasContent && options.data || null );\n } catch ( e ) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if ( callback ) {\n throw e;\n }\n }\n },\n\n abort: function() {\n if ( callback ) {\n callback();\n }\n }\n };\n }\n });\n\n\n //$.getNative wrapper\n $.getNative = function ( url, callback ) {\n return $.ajax({\n dataType: 'native',\n url: url,\n xhrFields: {\n responseType: 'arraybuffer'\n },\n success: callback\n });\n }\n}));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(0)))\n\n/***/ }),\n/* 136 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Backbone, _, $) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _baseMvc = __webpack_require__(5);\n\nvar _baseMvc2 = _interopRequireDefault(_baseMvc);\n\nvar _localization = __webpack_require__(4);\n\nvar _localization2 = _interopRequireDefault(_localization);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class View to display a user's disk/storage usage\n * either as a progress bar representing the percentage of a quota used\n * or a simple text element displaying the human readable size used.\n * @name UserQuotaMeter\n * @augments Backbone.View\n */\nvar UserQuotaMeter = Backbone.View.extend(_baseMvc2.default.LoggableMixin).extend(\n/** @lends UserQuotaMeter.prototype */{\n _logNamespace: logNamespace,\n\n /** Defaults for optional settings passed to initialize */\n options: {\n warnAtPercent: 85,\n errorAtPercent: 100\n },\n\n /** Set up, accept options, and bind events */\n initialize: function initialize(options) {\n this.log(this + \".initialize:\", options);\n _.extend(this.options, options);\n\n //this.bind( 'all', function( event, data ){ this.log( this + ' event:', event, data ); }, this );\n this.listenTo(this.model, \"change:quota_percent change:total_disk_usage\", this.render);\n },\n\n /** Re-load user model data from the api */\n update: function update(options) {\n this.log(this + \" updating user data...\", options);\n this.model.loadFromApi(this.model.get(\"id\"), options);\n return this;\n },\n\n /** Is the user over their quota (if there is one)?\n * @returns {Boolean} true if over quota, false if no quota or under quota\n */\n isOverQuota: function isOverQuota() {\n return this.model.get(\"quota_percent\") !== null && this.model.get(\"quota_percent\") >= this.options.errorAtPercent;\n },\n\n /** Render the meter when they have an applicable quota. Will render as a progress bar\n * with their percentage of that quota in text over the bar.\n * @fires quota:over when user is over quota (>= this.errorAtPercent)\n * @fires quota:under when user is under quota\n * @fires quota:under:approaching when user is >= this.warnAtPercent of their quota\n * @fires quota:under:ok when user is below this.warnAtPercent\n * @returns {jQuery} the rendered meter\n */\n _render_quota: function _render_quota() {\n var modelJson = this.model.toJSON();\n\n var //prevPercent = this.model.previous( 'quota_percent' ),\n percent = modelJson.quota_percent;\n\n var //meter = $( UserQuotaMeter.templates.quota( modelJson ) );\n $meter = $(this._templateQuotaMeter(modelJson));\n\n var $bar = $meter.find(\".progress-bar\");\n //this.log( this + '.rendering quota, percent:', percent, 'meter:', meter );\n\n // OVER QUOTA: color the quota bar and show the quota error message\n if (this.isOverQuota()) {\n //this.log( '\\t over quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-danger\");\n $meter.find(\".quota-meter-text\").css(\"color\", \"white\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:over\", modelJson);\n\n // APPROACHING QUOTA: color the quota bar\n } else if (percent >= this.options.warnAtPercent) {\n //this.log( '\\t approaching quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-warning\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:approaching\", modelJson);\n\n // otherwise, hide/don't use the msg box\n } else {\n $bar.attr(\"class\", \"progress-bar progress-bar-success\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:ok\", modelJson);\n }\n return $meter;\n },\n\n /** Render the meter when the user has NO applicable quota. Will render as text\n * showing the human readable sum storage their data is using.\n * @returns {jQuery} the rendered text\n */\n _render_usage: function _render_usage() {\n //var usage = $( UserQuotaMeter.templates.usage( this.model.toJSON() ) );\n var usage = $(this._templateUsage(this.model.toJSON()));\n this.log(this + \".rendering usage:\", usage);\n return usage;\n },\n\n /** Render either the quota percentage meter or the human readable disk usage\n * depending on whether the user model has quota info (quota_percent === null -> no quota)\n * @returns {Object} this UserQuotaMeter\n */\n render: function render() {\n //this.log( this + '.rendering' );\n var meterHtml = null;\n\n // no quota on server ('quota_percent' === null (can be valid at 0)), show usage instead\n this.log(this + \".model.quota_percent:\", this.model.get(\"quota_percent\"));\n if (this.model.get(\"quota_percent\") === null || this.model.get(\"quota_percent\") === undefined) {\n meterHtml = this._render_usage();\n\n // otherwise, render percent of quota (and warning, error)\n } else {\n meterHtml = this._render_quota();\n //TODO: add the original text for unregistered quotas\n //tooltip = \"Your disk quota is %s. You can increase your quota by registering a Galaxy account.\"\n }\n\n this.$el.html(meterHtml);\n this.$el.find(\".quota-meter-text\").tooltip();\n return this;\n },\n\n _templateQuotaMeter: function _templateQuotaMeter(data) {\n return ['
', '
', '
\" : \">\", (0, _localization2.default)(\"Using\"), \" \", data.quota_percent, \"%\", \"
\", \"
\"].join(\"\");\n },\n\n _templateUsage: function _templateUsage(data) {\n return ['
', '
', data.nice_total_disk_usage ? (0, _localization2.default)(\"Using \") + data.nice_total_disk_usage : \"\", \"
\", \"
\"].join(\"\");\n },\n\n toString: function toString() {\n return \"UserQuotaMeter(\" + this.model + \")\";\n }\n});\n\n//==============================================================================\nexports.default = {\n UserQuotaMeter: UserQuotaMeter\n};\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2), __webpack_require__(1), __webpack_require__(0)))\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// libs.bundled.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t3: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".bundled.js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 89);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 8ed224e5c9316a685a21","/*!\n * jQuery JavaScript Library v2.2.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:23Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"2.2.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray,\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Not plain objects:\n\t\t// - Any object or value whose internal [[Class]] property is not \"[object Object]\"\n\t\t// - DOM nodes\n\t\t// - window\n\t\tif ( jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Not own constructor property must be Object\n\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype || {}, \"isPrototypeOf\" ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\n\t\t// Support: Android<4.0, iOS<6 (functionish RegExp)\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code ) {\n\t\tvar script,\n\t\t\tindirect = eval;\n\n\t\tcode = jQuery.trim( code );\n\n\t\tif ( code ) {\n\n\t\t\t// If the code includes a valid, prologue position\n\t\t\t// strict mode pragma, execute code by injecting a\n\t\t\t// script tag into the document.\n\t\t\tif ( code.indexOf( \"use strict\" ) === 1 ) {\n\t\t\t\tscript = document.createElement( \"script\" );\n\t\t\t\tscript.text = code;\n\t\t\t\tdocument.head.appendChild( script ).parentNode.removeChild( script );\n\t\t\t} else {\n\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\n\t\t\t\tindirect( code );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Support: IE9-11+\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar tmp, args, proxy;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: Date.now,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"
\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tlen = this.length,\n\t\t\tret = [],\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Support: Blackberry 4.6\n\t\t\t\t\t// gEBID returns nodes no longer in the document (#6963)\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn elem.contentDocument || jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// Add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// If we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlen ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\t/* jshint -W018 */\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\n\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t// but we should not, see #8335.\n\t\t// Always return an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ data ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\tstored = this.get( owner, key );\n\n\t\t\treturn stored !== undefined ?\n\t\t\t\tstored : this.get( owner, jQuery.camelCase( key ) );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i, name, camel,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = key.concat( key.map( jQuery.camelCase ) );\n\t\t\t} else {\n\t\t\t\tcamel = jQuery.camelCase( key );\n\n\t\t\t\t// Try the string as a key before any manipulation\n\t\t\t\tif ( key in cache ) {\n\t\t\t\t\tname = [ key, camel ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\t\tname = camel;\n\t\t\t\t\tname = name in cache ?\n\t\t\t\t\t\t[ name ] : ( name.match( rnotwhite ) || [] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ti = name.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key as-is\n\t\t\t\tdata = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// with the key camelized\n\t\t\t\tdata = dataUser.get( elem, camelKey );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, camelKey, undefined );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\n\t\t\t\t// First, attempt to store a copy or reference of any\n\t\t\t\t// data that might've been store with a camelCased key.\n\t\t\t\tvar data = dataUser.get( this, camelKey );\n\n\t\t\t\t// For HTML5 data-* attribute interop, we have to\n\t\t\t\t// store property names with dashes in a camelCase form.\n\t\t\t\t// This might not apply to all properties...*\n\t\t\t\tdataUser.set( this, camelKey, value );\n\n\t\t\t\t// *... In the case of properties that might _actually_\n\t\t\t\t// have dashes, we need to also store a copy of that\n\t\t\t\t// unchanged property.\n\t\t\t\tif ( key.indexOf( \"-\" ) > -1 && data !== undefined ) {\n\t\t\t\t\tdataUser.set( this, key, value );\n\t\t\t\t}\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting
\", \"
\" ],\n\tcol: [ 2, \"\", \"
\" ],\n\ttr: [ 2, \"\", \"
\" ],\n\ttd: [ 3, \"\", \"
\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t[];\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], ret ) :\n\t\tret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0-4.3, Safari<=5.1\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari<=5.1, Android<4.2\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<=11+\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY offsetX offsetY pageX pageY \" +\n\t\t\t\"screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar eventDoc, doc, body,\n\t\t\t\tbutton = original.button;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop || body && body.scrollTop || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop || body && body.clientTop || 0 );\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: Cordova 2.5 (WebKit) (#13255)\n\t\t// All events should have a target; Cordova deviceready doesn't\n\t\tif ( !event.target ) {\n\t\t\tevent.target = document;\n\t\t}\n\n\t\t// Support: Safari 6.0+, Chrome<28\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\tthis.focus();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this.type === \"checkbox\" && this.click && jQuery.nodeName( this, \"input\" ) ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android<4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: QtWebKit\n\t\t\t// .get() because push.apply(_, arraylike) throws\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"
`\n )\n });\n modal.show({ backdrop: true });\n}\n\n// ============================================================================\nexport default {\n Modal: Modal,\n hide_modal: hide_modal,\n show_modal: show_modal,\n show_message: show_message,\n show_in_overlay: show_in_overlay\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/modal.js","/**\n * This is the primary galaxy tours definition, currently only used for\n * rendering a tour menu.\n */\n\nimport * as BootstrapTour from \"libs/bootstrap-tour\";\nvar gxy_root = typeof Galaxy === \"undefined\" ? \"/\" : Galaxy.root;\n\nvar tourpage_template = `

Galaxy Tours

\n

This page presents a list of interactive tours available on this Galaxy server.\nSelect any tour to get started (and remember, you can click 'End Tour' at any time).

\n\n
\n <% _.each(tourtagorder, function(tag) { %>\n \n <% }); %>\n
\n\n<% _.each(tourtagorder, function(tourtagkey) { %>\n
\" style=\"display: block;\">\n <% var tourtag = tourtags[tourtagkey]; %>\n

\n <%- tourtag.name %>\n

\n
\n
\n<% }); %>`;\n\nvar tour_opts = {\n storage: window.sessionStorage,\n onEnd: function() {\n sessionStorage.removeItem(\"activeGalaxyTour\");\n },\n delay: 150, // Attempts to make it look natural\n orphan: true\n};\n\nvar hooked_tour_from_data = data => {\n _.each(data.steps, step => {\n if (step.preclick) {\n step.onShow = () => {\n _.each(step.preclick, preclick => {\n // TODO: click delay between clicks\n $(preclick).click();\n });\n };\n }\n if (step.postclick) {\n step.onHide = () => {\n _.each(step.postclick, postclick => {\n // TODO: click delay between clicks\n $(postclick).click();\n });\n };\n }\n if (step.textinsert) {\n // Have to manually trigger a change here, for some\n // elements which have additional logic, like the\n // upload input box\n step.onShown = () => {\n $(step.element)\n .val(step.textinsert)\n .trigger(\"change\");\n };\n }\n });\n return data;\n};\n\nvar TourItem = Backbone.Model.extend({\n urlRoot: `${gxy_root}api/tours`\n});\n\nvar Tours = Backbone.Collection.extend({\n url: `${gxy_root}api/tours`,\n model: TourItem\n});\n\nvar giveTour = tour_id => {\n var url = `${gxy_root}api/tours/${tour_id}`;\n $.getJSON(url, data => {\n // Set hooks for additional click and data entry actions.\n var tourdata = hooked_tour_from_data(data);\n sessionStorage.setItem(\"activeGalaxyTour\", JSON.stringify(data));\n // Store tour steps in sessionStorage to easily persist w/o hackery.\n var tour = new Tour(\n _.extend(\n {\n steps: tourdata.steps\n },\n tour_opts\n )\n );\n // Always clean restart, since this is a new, explicit giveTour execution.\n tour.init();\n tour.goTo(0);\n tour.restart();\n });\n};\n\nvar ToursView = Backbone.View.extend({\n title: \"Tours\",\n // initialize\n initialize: function() {\n var self = this;\n this.setElement(\"
\");\n this.model = new Tours();\n this.model.fetch({\n success: function() {\n self.render();\n },\n error: function() {\n // Do something.\n console.error(\"Failed to fetch tours.\");\n }\n });\n },\n\n render: function() {\n var tpl = _.template(tourpage_template);\n\n var tourtags = {};\n _.each(this.model.models, tour => {\n if (tour.attributes.tags === null) {\n if (tourtags.Untagged === undefined) {\n tourtags.Untagged = { name: \"Untagged\", tours: [] };\n }\n tourtags.Untagged.tours.push(tour);\n } else {\n _.each(tour.attributes.tags, tag => {\n tag = tag.charAt(0).toUpperCase() + tag.slice(1);\n if (tourtags[tag] === undefined) {\n tourtags[tag] = { name: tag, tours: [] };\n }\n tourtags[tag].tours.push(tour);\n });\n }\n });\n var tourtagorder = Object.keys(tourtags).sort();\n\n this.$el\n .html(\n tpl({\n tours: this.model.models,\n tourtags: tourtags,\n tourtagorder: tourtagorder\n })\n )\n .on(\"click\", \".tourItem\", function(e) {\n e.preventDefault();\n giveTour($(this).data(\"tour.id\"));\n })\n .on(\"click\", \".tag-selector-button\", e => {\n var elem = $(e.target);\n var display = \"block\";\n var tag = elem.attr(\"tag-selector-button\");\n\n elem.toggleClass(\"btn-primary\");\n elem.toggleClass(\"btn-secondary\");\n\n if (elem.hasClass(\"btn-secondary\")) {\n display = \"none\";\n }\n $(`div[tag='${tag}']`).css({ display: display });\n });\n }\n});\n\nexport default {\n ToursView: ToursView,\n hooked_tour_from_data: hooked_tour_from_data,\n tour_opts: tour_opts,\n giveTour: giveTour\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/tours.js","//==============================================================================\nvar LOGGING_FNS = [\"log\", \"debug\", \"info\", \"warn\", \"error\", \"metric\"];\n/** adds logging functions to an obj.prototype (or obj directly) adding a namespace for filtering\n * @param {Object} obj\n * @param {String} namespace\n */\nfunction addLogging(obj, namespace) {\n var addTo = obj.prototype !== undefined ? obj.prototype : obj;\n if (namespace !== undefined) {\n addTo._logNamespace = namespace;\n }\n //yagni?: without this, may not capture Galaxy.config.debug and add Galaxy.logger properly\n // if( window.Galaxy && window.Galaxy.config && window.Galaxy.config.debug ){\n // addTo.logger = window.Galaxy.logger;\n // }\n\n // give the object each\n LOGGING_FNS.forEach(logFn => {\n addTo[logFn] = function() {\n if (!this.logger) {\n return undefined;\n }\n if (this.logger.emit) {\n return this.logger.emit(logFn, this._logNamespace, arguments);\n }\n if (this.logger[logFn]) {\n //TODO:! there has to be a way to get the lineno/file into this\n // http://stackoverflow.com/questions/13815640/a-proper-wrapper-for-console-log-with-correct-line-number\n // http://www.paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/\n return this.logger[logFn].apply(this.logger, arguments);\n }\n return undefined;\n };\n });\n return obj;\n}\n\n//==============================================================================\nexport default addLogging;\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/utils/add-logging.js","import * as _ from \"libs/underscore\";\nimport * as Backbone from \"libs/backbone\";\nimport baseMVC from \"mvc/base-mvc\";\nimport _l from \"utils/localization\";\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class Model for a Galaxy user (including anonymous users).\n * @name User\n */\nvar User = Backbone.Model.extend(baseMVC.LoggableMixin).extend(\n /** @lends User.prototype */ {\n _logNamespace: logNamespace,\n\n /** API location for this resource */\n urlRoot: function() {\n return `${Galaxy.root}api/users`;\n },\n\n /** Model defaults\n * Note: don't check for anon-users with the username as the default is '(anonymous user)'\n * a safer method is if( !user.get( 'email' ) ) -> anon user\n */\n defaults: /** @lends User.prototype */ {\n id: null,\n username: `(${_l(\"anonymous user\")})`,\n email: \"\",\n total_disk_usage: 0,\n nice_total_disk_usage: \"\",\n quota_percent: null,\n is_admin: false\n },\n\n /** Set up and bind events\n * @param {Object} data Initial model data.\n */\n initialize: function(data) {\n this.log(\"User.initialize:\", data);\n\n this.on(\"loaded\", function(model, resp) {\n this.log(`${this} has loaded:`, model, resp);\n });\n this.on(\"change\", function(model, data) {\n this.log(`${this} has changed:`, model, data.changes);\n });\n },\n\n isAnonymous: function() {\n return !this.get(\"email\");\n },\n\n isAdmin: function() {\n return this.get(\"is_admin\");\n },\n\n /** Load a user with the API using an id.\n * If getting an anonymous user or no access to a user id, pass the User.CURRENT_ID_STR\n * (e.g. 'current') and the API will return the current transaction's user data.\n * @param {String} idOrCurrent encoded user id or the User.CURRENT_ID_STR\n * @param {Object} options hash to pass to Backbone.Model.fetch. Can contain success, error fns.\n * @fires loaded when the model has been loaded from the API, passing the newModel and AJAX response.\n */\n loadFromApi: function(idOrCurrent, options) {\n idOrCurrent = idOrCurrent || User.CURRENT_ID_STR;\n\n options = options || {};\n var model = this;\n var userFn = options.success;\n\n /** @ignore */\n options.success = (newModel, response) => {\n model.trigger(\"loaded\", newModel, response);\n if (userFn) {\n userFn(newModel, response);\n }\n };\n\n // requests for the current user must have a sep. constructed url (fetch don't work, ma)\n if (idOrCurrent === User.CURRENT_ID_STR) {\n options.url = `${this.urlRoot}/${User.CURRENT_ID_STR}`;\n }\n return Backbone.Model.prototype.fetch.call(this, options);\n },\n\n /** Clears all data from the sessionStorage.\n */\n clearSessionStorage: function() {\n for (var key in sessionStorage) {\n //TODO: store these under the user key so we don't have to do this\n // currently only history\n if (key.indexOf(\"history:\") === 0) {\n sessionStorage.removeItem(key);\n } else if (key === \"history-panel\") {\n sessionStorage.removeItem(key);\n }\n }\n },\n\n /** string representation */\n toString: function() {\n var userInfo = [this.get(\"username\")];\n if (this.get(\"id\")) {\n userInfo.unshift(this.get(\"id\"));\n userInfo.push(this.get(\"email\"));\n }\n return `User(${userInfo.join(\":\")})`;\n }\n }\n);\n\n// string to send to tell server to return this transaction's user (see api/users.py)\nUser.CURRENT_ID_STR = \"current\";\n\n// class method to load the current user via the api and return that model\nUser.getCurrentUserFromApi = options => {\n var currentUser = new User();\n currentUser.loadFromApi(User.CURRENT_ID_STR, options);\n return currentUser;\n};\n\n// (stub) collection for users (shouldn't be common unless admin UI)\nvar UserCollection = Backbone.Collection.extend(baseMVC.LoggableMixin).extend({\n model: User,\n urlRoot: function() {\n return `${Galaxy.root}api/users`;\n }\n //logger : console,\n});\n\n//==============================================================================\nexport default {\n User: User\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/user/user-model.js","/** Frame view */\nvar FrameView = Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n this.model = (options && options.model) || new Backbone.Model(options);\n this.setElement($(\"
\").addClass(\"corner frame\"));\n this.$el\n .append(\n $(\"
\")\n .addClass(\"f-header corner\")\n .append($(\"
\").addClass(\"f-title\"))\n .append(\n $(\"
\")\n .addClass(\"f-icon f-close fa fa-close\")\n .tooltip({\n title: \"Close\",\n placement: \"bottom\"\n })\n )\n )\n .append($(\"
\").addClass(\"f-content\"))\n .append(\n $(\"
\")\n .addClass(\"f-resize f-icon corner fa fa-expand\")\n .tooltip({ title: \"Resize\" })\n )\n .append($(\"
\").addClass(\"f-cover\"));\n this.$header = this.$(\".f-header\");\n this.$title = this.$(\".f-title\");\n this.$content = this.$(\".f-content\");\n this.render();\n this.listenTo(this.model, \"change\", this.render, this);\n },\n\n render: function() {\n var self = this;\n var options = this.model.attributes;\n this.$title.html(options.title || \"\");\n this.$header.find(\".f-icon-left\").remove();\n _.each(options.menu, option => {\n var $option = $(\"
\")\n .addClass(\"f-icon-left\")\n .addClass(option.icon);\n if (_.isFunction(option.disabled) && option.disabled()) {\n $option.attr(\"disabled\", true);\n } else {\n $option\n .on(\"click\", () => {\n option.onclick(self);\n })\n .tooltip({\n title: option.tooltip,\n placement: \"bottom\"\n });\n }\n self.$header.append($option);\n });\n if (options.url) {\n this.$content.html(\n $(\"`;\n\n var header_template =\n '' +\n '' +\n '';\n\n var frame_height = 350;\n var frame_width = 600;\n var class_names = \"ui-modal chat-modal\";\n\n // deletes the chat modal if already present and create one\n if ($(\".chat-modal\").length > 0) {\n $(\".chat-modal\").remove();\n }\n // creates a modal\n GenericNavView.modal = new Modal.View({\n body: iframe_template,\n height: frame_height,\n width: frame_width,\n closing_events: true,\n title_separator: false,\n cls: class_names\n });\n\n // shows modal\n GenericNavView.modal.show();\n $el_chat_modal_header = $(\".chat-modal .modal-header\");\n $el_chat_modal_body = $(\".chat-modal .modal-body\");\n // adjusts the css of bootstrap modal for chat\n $el_chat_modal_header.addClass(\"modal-header-body\");\n $el_chat_modal_body.addClass(\"modal-header-body\");\n $el_chat_modal_header.find(\"h4\").remove();\n $el_chat_modal_header.removeAttr(\"min-height padding border\");\n $el_chat_modal_header.append(header_template);\n // click event of the close button for chat\n $(\".close-modal\").click(e => {\n $(\".chat-modal\").css(\"display\", \"none\");\n });\n // click event of expand and compress icon\n $(\".expand-compress-modal\").click(e => {\n if ($(\".expand-compress-modal\").hasClass(\"fa-expand\")) {\n $(\".chat-modal .modal-dialog\").width(\"1000px\");\n $(\".chat-modal .modal-body\").height(\"575px\");\n $(\".expand-compress-modal\")\n .removeClass(\"fa-expand\")\n .addClass(\"fa-compress\");\n $(\".expand-compress-modal\").attr(\"title\", \"Minimize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"96.2%\");\n } else {\n $(\".chat-modal .modal-dialog\").width(`${frame_width}px`);\n $(\".chat-modal .modal-body\").height(`${frame_height}px`);\n $(\".expand-compress-modal\")\n .removeClass(\"fa-compress\")\n .addClass(\"fa-expand\");\n $(\".expand-compress-modal\").attr(\"title\", \"Maximize\");\n $(\".expand-compress-modal\").css(\"margin-left\", \"93.2%\");\n }\n });\n return this;\n },\n\n /**renders the chat icon as a nav item*/\n render: function() {\n var self = this;\n var navItem = {};\n navItem = {\n id: \"show-chat-online\",\n icon: \"fa-comment-o\",\n tooltip: \"Chat online\",\n visible: false,\n onclick: self.makeModalIframe\n };\n return navItem;\n }\n});\n\nexport default {\n GenericNavView: GenericNavView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/generic-nav-view.js","/** Frame manager uses the ui-frames to create the scratch book masthead icon and functionality **/\nimport Frames from \"mvc/ui/ui-frames\";\nimport DATA from \"mvc/dataset/data\";\nimport visualization from \"viz/visualization\";\nimport trackster from \"viz/trackster\";\nimport _l from \"utils/localization\";\nexport default Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n options = options || {};\n this.frames = new Frames.View({ visible: false });\n this.setElement(this.frames.$el);\n this.buttonActive = options.collection.add({\n id: \"enable-scratchbook\",\n icon: \"fa-th\",\n tooltip: _l(\"Enable/Disable Scratchbook\"),\n onclick: function() {\n self.active = !self.active;\n self.buttonActive.set({\n toggle: self.active,\n show_note: self.active,\n note_cls: self.active && \"fa fa-check\"\n });\n !self.active && self.frames.hide();\n },\n onbeforeunload: function() {\n if (self.frames.length() > 0) {\n return `You opened ${self.frames.length()} frame(s) which will be lost.`;\n }\n }\n });\n this.buttonLoad = options.collection.add({\n id: \"show-scratchbook\",\n icon: \"fa-eye\",\n tooltip: _l(\"Show/Hide Scratchbook\"),\n show_note: true,\n visible: false,\n onclick: function(e) {\n self.frames.visible ? self.frames.hide() : self.frames.show();\n }\n });\n this.frames\n .on(\"add remove\", function() {\n this.visible && this.length() == 0 && this.hide();\n self.buttonLoad.set({\n note: this.length(),\n visible: this.length() > 0\n });\n })\n .on(\"show hide \", function() {\n self.buttonLoad.set({\n toggle: this.visible,\n icon: (this.visible && \"fa-eye\") || \"fa-eye-slash\"\n });\n });\n this.history_cache = {};\n },\n\n /** Add a dataset to the frames */\n addDataset: function(dataset_id) {\n var self = this;\n var current_dataset = null;\n if (Galaxy && Galaxy.currHistoryPanel) {\n var history_id = Galaxy.currHistoryPanel.collection.historyId;\n this.history_cache[history_id] = {\n name: Galaxy.currHistoryPanel.model.get(\"name\"),\n dataset_ids: []\n };\n Galaxy.currHistoryPanel.collection.each(model => {\n !model.get(\"deleted\") &&\n model.get(\"visible\") &&\n self.history_cache[history_id].dataset_ids.push(model.get(\"id\"));\n });\n }\n var _findDataset = (dataset, offset) => {\n if (dataset) {\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details && history_details.dataset_ids) {\n var dataset_list = history_details.dataset_ids;\n var pos = dataset_list.indexOf(dataset.get(\"id\"));\n if (pos !== -1 && pos + offset >= 0 && pos + offset < dataset_list.length) {\n return dataset_list[pos + offset];\n }\n }\n }\n };\n var _loadDatasetOffset = (dataset, offset, frame) => {\n var new_dataset_id = _findDataset(dataset, offset);\n if (new_dataset_id) {\n self._loadDataset(new_dataset_id, (new_dataset, config) => {\n current_dataset = new_dataset;\n frame.model.set(config);\n });\n } else {\n frame.model.trigger(\"change\");\n }\n };\n this._loadDataset(dataset_id, (dataset, config) => {\n current_dataset = dataset;\n self.add(\n _.extend(\n {\n menu: [\n {\n icon: \"fa fa-chevron-circle-left\",\n tooltip: \"Previous in History\",\n onclick: function(frame) {\n _loadDatasetOffset(current_dataset, -1, frame);\n },\n disabled: function() {\n return !_findDataset(current_dataset, -1);\n }\n },\n {\n icon: \"fa fa-chevron-circle-right\",\n tooltip: \"Next in History\",\n onclick: function(frame) {\n _loadDatasetOffset(current_dataset, 1, frame);\n },\n disabled: function() {\n return !_findDataset(current_dataset, 1);\n }\n }\n ]\n },\n config\n )\n );\n });\n },\n\n _loadDataset: function(dataset_id, callback) {\n var self = this;\n var dataset = new DATA.Dataset({ id: dataset_id });\n $.when(dataset.fetch()).then(() => {\n var is_tabular = _.find(\n [\"tabular\", \"interval\"],\n data_type => dataset.get(\"data_type\").indexOf(data_type) !== -1\n );\n var title = dataset.get(\"name\");\n var history_details = self.history_cache[dataset.get(\"history_id\")];\n if (history_details) {\n title = `${history_details.name}: ${title}`;\n }\n callback(\n dataset,\n is_tabular\n ? {\n title: title,\n url: null,\n content: DATA.createTabularDatasetChunkedView({\n model: new DATA.TabularDataset(dataset.toJSON()),\n embedded: true,\n height: \"100%\"\n }).$el\n }\n : {\n title: title,\n url: `${Galaxy.root}datasets/${dataset_id}/display/?preview=True`,\n content: null\n }\n );\n });\n },\n\n /** Add a trackster visualization to the frames. */\n addTrackster: function(viz_id) {\n var self = this;\n var viz = new visualization.Visualization({ id: viz_id });\n $.when(viz.fetch()).then(() => {\n var ui = new trackster.TracksterUI(Galaxy.root);\n\n // Construct frame config based on dataset's type.\n var frame_config = {\n title: viz.get(\"name\"),\n type: \"other\",\n content: function(parent_elt) {\n // Create view config.\n var view_config = {\n container: parent_elt,\n name: viz.get(\"title\"),\n id: viz.id,\n // FIXME: this will not work with custom builds b/c the dbkey needed to be encoded.\n dbkey: viz.get(\"dbkey\"),\n stand_alone: false\n };\n\n var latest_revision = viz.get(\"latest_revision\");\n var drawables = latest_revision.config.view.drawables;\n\n // Set up datasets in drawables.\n _.each(drawables, d => {\n d.dataset = {\n hda_ldda: d.hda_ldda,\n id: d.dataset_id\n };\n });\n view = ui.create_visualization(\n view_config,\n latest_revision.config.viewport,\n latest_revision.config.view.drawables,\n latest_revision.config.bookmarks,\n false\n );\n }\n };\n self.add(frame_config);\n });\n },\n\n /** Add and display a new frame/window based on options. */\n add: function(options) {\n if (options.target == \"_blank\") {\n window.open(options.url);\n } else if (options.target == \"_top\" || options.target == \"_parent\" || options.target == \"_self\") {\n window.location = options.url;\n } else if (!this.active || options.noscratchbook) {\n var $galaxy_main = $(window.parent.document).find(\"#galaxy_main\");\n if (options.target == \"galaxy_main\" || options.target == \"center\") {\n if ($galaxy_main.length === 0) {\n window.location = `${options.url + (options.url.indexOf(\"?\") == -1 ? \"?\" : \"&\")}use_panels=True`;\n } else {\n $galaxy_main.attr(\"src\", options.url);\n }\n } else window.location = options.url;\n } else {\n this.frames.add(options);\n }\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/layout/scratchbook.js","// dependencies\n\n// grid model\nexport default Backbone.Model.extend({\n defaults: {\n url_base: \"\",\n async: false,\n async_ops: [],\n categorical_filters: [],\n filters: {},\n sort_key: null,\n show_item_checkboxes: false,\n advanced_search: false,\n cur_page: 1,\n num_pages: 1,\n operation: undefined,\n item_ids: undefined\n },\n\n /**\n * Return true if operation can be done asynchronously.\n */\n can_async_op: function(op) {\n return _.indexOf(this.attributes.async_ops, op) !== -1;\n },\n\n /**\n * Add filtering criterion.\n */\n add_filter: function(key, value, append) {\n // Update URL arg with new condition.\n if (append) {\n // Update or append value.\n var cur_val = this.attributes.filters[key];\n\n var new_val;\n if (cur_val === null || cur_val === undefined) {\n new_val = value;\n } else if (typeof cur_val == \"string\") {\n if (cur_val == \"All\" || cur_val == value) {\n new_val = value;\n } else {\n // Replace string with array.\n var values = [];\n values[0] = cur_val;\n values[1] = value;\n new_val = values;\n }\n } else {\n // Current value is an array.\n new_val = cur_val;\n if (new_val.indexOf(value) === -1) {\n new_val.push(value);\n }\n }\n this.attributes.filters[key] = new_val;\n } else {\n // Replace value.\n this.attributes.filters[key] = value;\n }\n },\n\n /**\n * Remove filtering criterion.\n */\n remove_filter: function(key, condition) {\n var cur_val = this.attributes.filters[key];\n if (cur_val === null || cur_val === undefined) {\n return false;\n }\n\n if (typeof cur_val === \"string\") {\n // overwrite/remove condition.\n this.attributes.filters[key] = \"\";\n } else {\n // filter contains an array of conditions.\n var condition_index = _.indexOf(cur_val, condition);\n if (condition_index !== -1) {\n cur_val[condition_index] = \"\";\n }\n }\n },\n\n /**\n * Returns URL data for obtaining a new grid.\n */\n get_url_data: function() {\n var url_data = {\n async: this.attributes.async,\n sort: this.attributes.sort_key,\n page: this.attributes.cur_page,\n show_item_checkboxes: this.attributes.show_item_checkboxes,\n advanced_search: this.attributes.advanced_search\n };\n\n // Add operation, item_ids only if they have values.\n if (this.attributes.operation) {\n url_data.operation = this.attributes.operation;\n }\n if (this.attributes.item_ids) {\n url_data.id = this.attributes.item_ids;\n }\n\n // Add filter arguments to data, placing \"f-\" in front of all arguments.\n var self = this;\n _.each(_.pairs(self.attributes.filters), k => {\n url_data[`f-${k[0]}`] = k[1];\n });\n return url_data;\n },\n\n // Return URL for obtaining a new grid\n get_url: function(args) {\n return `${this.get(\"url_base\")}?${$.param(this.get_url_data())}&${$.param(args)}`;\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/grid/grid-model.js","// dependencies\nimport Utils from \"utils/utils\";\n// grid view templates\nexport default {\n // template\n grid: function(options) {\n var tmpl = \"\";\n if (options.embedded) {\n tmpl = this.grid_header(options) + this.grid_table(options);\n } else {\n tmpl = `
${this.grid_header(\n options\n )}
${this.grid_table(\n options\n )}`;\n }\n\n // add info text\n if (options.info_text) {\n tmpl += `
${options.info_text}
`;\n }\n\n // return\n return tmpl;\n },\n\n // template\n grid_table: function(options) {\n return (\n '
' +\n '' +\n '' +\n '' +\n '' +\n \"
\" +\n \"
\"\n );\n },\n\n // template\n grid_header: function(options) {\n var tmpl = '
\";\n\n // return template\n return tmpl;\n },\n\n // template\n header: function(options) {\n // start\n var tmpl = \"\";\n\n // add checkbox\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n if (options.items.length > 0) {\n tmpl +=\n '' +\n '';\n }\n tmpl += \"\";\n }\n\n // create header elements\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.visible) {\n tmpl += ``;\n if (column.href) {\n tmpl += `${column.label}`;\n } else {\n tmpl += column.label;\n }\n tmpl += `${column.extra}`;\n }\n }\n\n // finalize\n tmpl += \"\";\n\n // return template\n return tmpl;\n },\n\n // template\n body: function(options) {\n // initialize\n var tmpl = \"\";\n var num_rows_rendered = 0;\n var items_length = options.items.length;\n\n // empty grid?\n if (items_length == 0) {\n // No results.\n tmpl += 'No Items';\n num_rows_rendered = 1;\n }\n\n // create rows\n for (var i in options.items) {\n // encode ids\n var item = options.items[i];\n var encoded_id = item.encode_id;\n var popupmenu_id = `grid-${i}-popup`;\n\n // Tag current\n tmpl += \"\";\n\n // Item selection column\n if (options.show_item_checkboxes) {\n tmpl += ``;\n }\n\n // Data columns\n for (var j in options.columns) {\n var column = options.columns[j];\n if (column.visible) {\n // Nowrap\n var nowrap = \"\";\n if (column.nowrap) {\n nowrap = 'style=\"white-space:nowrap;\"';\n }\n\n // get column settings\n var column_settings = item.column_config[column.label];\n\n // load attributes\n var link = column_settings.link;\n var value = column_settings.value;\n var target = column_settings.target;\n\n // unescape value\n if (jQuery.type(value) === \"string\") {\n value = value.replace(/\\/\\//g, \"/\");\n }\n\n // Attach popup menu?\n var id = \"\";\n var cls = \"\";\n if (column.attach_popup) {\n id = `grid-${i}-popup`;\n cls = \"menubutton\";\n if (link != \"\") {\n cls += \" split\";\n }\n cls += \" popup\";\n }\n\n // Check for row wrapping\n tmpl += ``;\n\n // Link\n if (link) {\n if (options.operations.length != 0) {\n tmpl += `
`;\n }\n tmpl += `${value}`;\n if (options.operations.length != 0) {\n tmpl += \"
\";\n }\n } else {\n tmpl += `
`;\n }\n tmpl += \"\";\n }\n }\n tmpl += \"\";\n num_rows_rendered++;\n }\n return tmpl;\n },\n\n // template\n footer: function(options) {\n // create template string\n var tmpl = \"\";\n\n // paging\n if (options.use_paging && options.num_pages > 1) {\n // get configuration\n var num_page_links = options.num_page_links;\n var cur_page_num = options.cur_page_num;\n var num_pages = options.num_pages;\n\n // First pass on min page.\n var page_link_range = num_page_links / 2;\n var min_page = cur_page_num - page_link_range;\n var min_offset = 0;\n if (min_page <= 0) {\n // Min page is too low.\n min_page = 1;\n min_offset = page_link_range - (cur_page_num - min_page);\n }\n\n // Set max page.\n var max_range = page_link_range + min_offset;\n var max_page = cur_page_num + max_range;\n var max_offset;\n if (max_page <= num_pages) {\n // Max page is fine.\n max_offset = 0;\n } else {\n // Max page is too high.\n max_page = num_pages;\n // +1 to account for the +1 in the loop below.\n max_offset = max_range - (max_page + 1 - cur_page_num);\n }\n\n // Second and final pass on min page to add any unused\n // offset from max to min.\n if (max_offset != 0) {\n min_page -= max_offset;\n if (min_page < 1) {\n min_page = 1;\n }\n }\n\n // template header\n tmpl += '';\n if (options.show_item_checkboxes) {\n tmpl += \"\";\n }\n tmpl += '' + '' + \"Page:\";\n\n if (min_page > 1) {\n tmpl +=\n '1 ...';\n }\n\n // create page urls\n for (var page_index = min_page; page_index < max_page + 1; page_index++) {\n if (page_index == options.cur_page_num) {\n tmpl += `${page_index}`;\n } else {\n tmpl += `${\n page_index\n }`;\n }\n }\n\n // show last page\n if (max_page < num_pages) {\n tmpl += `...${\n num_pages\n }`;\n }\n tmpl += \"\";\n\n // Show all link\n tmpl +=\n ' | Show All' +\n \"\" +\n \"\";\n }\n\n // Grid operations for multiple items.\n if (options.show_item_checkboxes) {\n // start template\n tmpl +=\n \"\" +\n '' +\n \"\" +\n '' +\n 'For selected items: ';\n\n // configure buttons for operations\n for (var i in options.operations) {\n var operation = options.operations[i];\n if (operation.allow_multiple) {\n tmpl += ` `;\n }\n }\n\n // finalize template\n tmpl += \"\" + \"\";\n }\n\n // count global operations\n var found_global = false;\n for (i in options.operations) {\n if (options.operations[i].global_operation) {\n found_global = true;\n break;\n }\n }\n\n // add global operations\n if (found_global) {\n tmpl += \"\" + '';\n for (i in options.operations) {\n var operation = options.operations[i];\n if (operation.global_operation) {\n tmpl += `${operation.label}`;\n }\n }\n tmpl += \"\" + \"\";\n }\n\n // add legend\n if (options.legend) {\n tmpl += `${options.legend}`;\n }\n\n // return\n return tmpl;\n },\n\n // template\n message: function(options) {\n var status = options.status;\n if ([\"success\", \"ok\"].indexOf(status) != -1) {\n status = \"done\";\n }\n return `

${_.escape(\n options.message\n )}

`;\n },\n\n // template\n grid_filters: function(options) {\n // get filters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n\n // show advanced search if flag set or if there are filters for advanced search fields\n var advanced_search_display = \"none\";\n if (options.advanced_search) {\n advanced_search_display = \"block\";\n }\n\n // identify columns with advanced filtering\n var show_advanced_search_link = false;\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n var column_key = column.key;\n var f_key = filters[column_key];\n var d_key = default_filter_dict[column_key];\n if (f_key && d_key && f_key != d_key) {\n advanced_search_display = \"block\";\n }\n show_advanced_search_link = true;\n }\n }\n\n // hide standard search if advanced is shown\n var standard_search_display = \"block\";\n if (advanced_search_display == \"block\") {\n standard_search_display = \"none\";\n }\n\n //\n // standard search\n //\n var tmpl = `
\" + \"\" + \"\" + \"\" + \"\" + \"
`;\n\n // add standard filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"standard\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize standard search\n tmpl += \"
\" + \"
\";\n\n // show advanced search link in standard display\n if (show_advanced_search_link) {\n tmpl += 'Advanced Search';\n }\n\n // finalize standard search display\n tmpl += \"
\" + \"
\";\n\n //\n // advanced search\n //\n tmpl += `
`;\n\n // add advanced filters\n for (var i in options.columns) {\n var column = options.columns[i];\n if (column.filterable == \"advanced\") {\n tmpl += this.grid_column_filter(options, column);\n }\n }\n\n // finalize advanced search template\n tmpl += \"
Close Advanced Search
\" + \"
\";\n\n // return template\n return tmpl;\n },\n\n // template\n grid_column_filter: function(options, column) {\n // collect parameters\n var default_filter_dict = options.default_filter_dict;\n var filters = options.filters;\n var column_label = column.label;\n var column_key = column.key;\n if (column.filterable == \"advanced\") {\n column_label = column_label.toLowerCase();\n }\n\n // start\n var tmpl = \"\";\n\n if (column.filterable == \"advanced\") {\n tmpl += `${column_label}:`;\n }\n tmpl += '';\n if (column.is_text) {\n tmpl += `
`;\n // Carry forward filtering criteria with hidden inputs.\n for (i in options.columns) {\n var temp_column = options.columns[i];\n var filter_value = filters[temp_column.key];\n if (filter_value) {\n if (filter_value != \"All\") {\n if (temp_column.is_text) {\n filter_value = JSON.stringify(filter_value);\n }\n tmpl += ``;\n }\n }\n }\n // Print current filtering criteria and links to delete.\n tmpl += ``;\n\n // add filters\n var column_filter = filters[column_key];\n if (column_filter) {\n // identify type\n var type = jQuery.type(column_filter);\n\n // single filter value\n if (type == \"string\") {\n if (column_filter != \"All\") {\n // append template\n tmpl += this.filter_element(column_key, column_filter);\n }\n }\n\n // multiple filter values\n if (type == \"array\") {\n for (var i in column_filter) {\n // get filter\n var filter = column_filter[i];\n\n // copy filters and remove entry\n var params = column_filter;\n params = params.slice(i);\n\n // append template\n tmpl += this.filter_element(column_key, filter);\n }\n }\n }\n\n // close span\n tmpl += \"\";\n\n // Set value, size of search input field. Minimum size is 20 characters.\n var value = \"\";\n if (column.filterable == \"standard\") {\n value = column.label.toLowerCase();\n var size = value.length;\n if (size < 20) {\n size = 20;\n }\n // +4 to account for space after placeholder\n size = size + 4;\n }\n\n // print input field for column\n tmpl += `
`;\n } else {\n // filter criteria\n tmpl += ``;\n\n // add category filters\n var seperator = false;\n for (var cf_label in options.categorical_filters[column_key]) {\n // get category filter\n var cf = options.categorical_filters[column_key][cf_label];\n\n // each filter will have only a single argument, so get that single argument\n var cf_key = \"\";\n var cf_arg = \"\";\n for (var key in cf) {\n cf_key = key;\n cf_arg = cf[key];\n }\n\n // add seperator\n if (seperator) {\n tmpl += \" | \";\n }\n seperator = true;\n\n // add category\n var filter = filters[column_key];\n if (filter && cf[column_key] && filter == cf_arg) {\n tmpl += `${cf_label}`;\n } else {\n tmpl += `${\n cf_label\n }`;\n }\n }\n tmpl += \"\";\n }\n tmpl += \"\" + \"\";\n\n // return template\n return tmpl;\n },\n\n // template for filter items\n filter_element: function(filter_key, filter_value) {\n filter_value = Utils.sanitize(filter_value);\n return `${filter_value}`;\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/grid/grid-template.js","import Utils from \"utils/utils\";\nvar View = Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n this.model =\n (options && options.model) ||\n new Backbone.Model({\n id: Utils.uid(),\n min: null,\n max: null,\n step: null,\n precise: false,\n split: 10000,\n value: null,\n onchange: function() {}\n }).set(options);\n\n // create new element\n this.setElement(this._template());\n this.$el.attr(\"id\", this.model.id);\n this.$text = this.$(\".ui-form-slider-text\");\n this.$slider = this.$(\".ui-form-slider-element\");\n\n // add text field event\n var pressed = [];\n this.$text\n .on(\"change\", function() {\n self.value($(this).val());\n })\n .on(\"keyup\", e => {\n pressed[e.which] = false;\n })\n .on(\"keydown\", function(e) {\n var v = e.which;\n pressed[v] = true;\n if (self.model.get(\"is_workflow\") && pressed[16] && v == 52) {\n self.value(\"$\");\n event.preventDefault();\n } else if (\n !(\n v == 8 ||\n v == 9 ||\n v == 13 ||\n v == 37 ||\n v == 39 ||\n (v >= 48 && v <= 57 && !pressed[16]) ||\n (v >= 96 && v <= 105) ||\n ((v == 190 || v == 110) &&\n $(this)\n .val()\n .indexOf(\".\") == -1 &&\n self.model.get(\"precise\")) ||\n ((v == 189 || v == 109) &&\n $(this)\n .val()\n .indexOf(\"-\") == -1) ||\n self._isParameter($(this).val()) ||\n pressed[91] ||\n pressed[17]\n )\n ) {\n event.preventDefault();\n }\n });\n\n // build slider, cannot be rebuild in render\n var opts = this.model.attributes;\n this.has_slider = opts.max !== null && opts.min !== null && opts.max > opts.min;\n var step = opts.step;\n if (!step) {\n if (opts.precise && this.has_slider) {\n step = (opts.max - opts.min) / opts.split;\n } else {\n step = 1.0;\n }\n }\n if (this.has_slider) {\n this.$text.addClass(\"ui-form-slider-left\");\n this.$slider.slider({ min: opts.min, max: opts.max, step: step }).on(\"slide\", (event, ui) => {\n self.value(ui.value);\n });\n } else {\n this.$slider.hide();\n }\n\n // add listeners\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n },\n\n render: function() {\n var value = this.model.get(\"value\");\n this.has_slider && this.$slider.slider(\"value\", value);\n value !== this.$text.val() && this.$text.val(value);\n },\n\n /** Set and return the current value */\n value: function(new_val) {\n var options = this.model.attributes;\n if (new_val !== undefined) {\n if (new_val !== null && new_val !== \"\" && !this._isParameter(new_val)) {\n isNaN(new_val) && (new_val = 0);\n !options.precise && (new_val = Math.round(new_val));\n options.max !== null && (new_val = Math.min(new_val, options.max));\n options.min !== null && (new_val = Math.max(new_val, options.min));\n }\n this.model.set(\"value\", new_val);\n this.model.trigger(\"change\");\n options.onchange(new_val);\n }\n return this.model.get(\"value\");\n },\n\n /** Return true if the field contains a workflow parameter i.e. $('name') */\n _isParameter: function(value) {\n return this.model.get(\"is_workflow\") && String(value).substring(0, 1) === \"$\";\n },\n\n /** Slider template */\n _template: function() {\n return (\n '
' +\n '' +\n '
' +\n \"
\"\n );\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-slider.js","/** This class creates/wraps a drill down element. */\nimport Utils from \"utils/utils\";\nimport Options from \"mvc/ui/ui-options\";\nvar View = Options.BaseIcons.extend({\n initialize: function(options) {\n options.type = options.display || \"checkbox\";\n options.multiple = options.type == \"checkbox\";\n Options.BaseIcons.prototype.initialize.call(this, options);\n },\n\n /** Set states for selected values */\n _setValue: function(new_value) {\n Options.BaseIcons.prototype._setValue.call(this, new_value);\n if (new_value !== undefined && new_value !== null && this.header_index) {\n var self = this;\n var values = $.isArray(new_value) ? new_value : [new_value];\n _.each(values, v => {\n var list = self.header_index[v];\n _.each(list, element => {\n self._setState(element, true);\n });\n });\n }\n },\n\n /** Expand/collapse a sub group */\n _setState: function(header_id, is_expanded) {\n var $button = this.$(`.button-${header_id}`);\n var $subgroup = this.$(`.subgroup-${header_id}`);\n $button.data(\"is_expanded\", is_expanded);\n if (is_expanded) {\n $subgroup.show();\n $button.removeClass(\"fa-plus-square\").addClass(\"fa-minus-square\");\n } else {\n $subgroup.hide();\n $button.removeClass(\"fa-minus-square\").addClass(\"fa-plus-square\");\n }\n },\n\n /** Template to create options tree */\n _templateOptions: function() {\n var self = this;\n this.header_index = {};\n\n // attach event handler\n function attach($el, header_id) {\n var $button = $el.find(`.button-${header_id}`);\n $button.on(\"click\", () => {\n self._setState(header_id, !$button.data(\"is_expanded\"));\n });\n }\n\n // recursive function which iterates through options\n function iterate($tmpl, options, header) {\n header = header || [];\n for (var i in options) {\n var level = options[i];\n var has_options = level.options && level.options.length > 0;\n var new_header = header.slice(0);\n self.header_index[level.value] = new_header.slice(0);\n var $group = $(\"
\");\n if (has_options) {\n var header_id = Utils.uid();\n var $button = $(\"\")\n .addClass(`button-${header_id}`)\n .addClass(\"ui-drilldown-button fa fa-plus-square\");\n var $subgroup = $(\"
\")\n .addClass(`subgroup-${header_id}`)\n .addClass(\"ui-drilldown-subgroup\");\n $group.append(\n $(\"
\")\n .append($button)\n .append(\n self._templateOption({\n label: level.name,\n value: level.value\n })\n )\n );\n new_header.push(header_id);\n iterate($subgroup, level.options, new_header);\n $group.append($subgroup);\n attach($group, header_id);\n } else {\n $group.append(\n self._templateOption({\n label: level.name,\n value: level.value\n })\n );\n }\n $tmpl.append($group);\n }\n }\n\n // iterate through options and create dom\n var $tmpl = $(\"
\");\n iterate($tmpl, this.model.get(\"data\"));\n return $tmpl;\n },\n\n /** Template for drill down view */\n _template: function() {\n return $(\"
\")\n .addClass(\"ui-options-list drilldown-container\")\n .attr(\"id\", this.model.id);\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-drilldown.js","/**\n * Top-level trackster code, used for creating/loading visualizations and user interface elements.\n */\n\n// global variables\nvar ui = null;\nvar view = null;\nvar browser_router = null;\n\n// trackster viewer\nimport * as _ from \"libs/underscore\";\nimport tracks from \"viz/trackster/tracks\";\nimport visualization from \"viz/visualization\";\nimport mod_icon_btn from \"mvc/ui/icon-button\";\nimport query_string from \"utils/query-string-parsing\";\nimport GridView from \"mvc/grid/grid-view\";\nimport mod_utils from \"utils/utils\";\nimport \"libs/jquery/jquery.event.drag\";\nimport \"libs/jquery/jquery.event.hover\";\nimport \"libs/jquery/jquery.mousewheel\";\nimport \"libs/jquery/jquery-ui\";\nimport \"libs/jquery/select2\";\nimport \"libs/farbtastic\";\nimport \"libs/jquery/jquery.form\";\nimport \"libs/jquery/jquery.rating\";\nimport \"ui/editable-text\";\n/**\n * Base Object/Model for inhertiance.\n */\nvar Base = function() {\n if (this.initialize) {\n this.initialize.apply(this, arguments);\n }\n};\nBase.extend = Backbone.Model.extend;\n\n/**\n * User interface controls for trackster\n */\nvar TracksterUI = Base.extend({\n initialize: function(baseURL) {\n mod_utils.cssLoadFile(\"static/style/jquery.rating.css\");\n mod_utils.cssLoadFile(\"static/style/autocomplete_tagging.css\");\n mod_utils.cssLoadFile(\"static/style/jquery-ui/smoothness/jquery-ui.css\");\n mod_utils.cssLoadFile(\"static/style/library.css\");\n mod_utils.cssLoadFile(\"static/style/trackster.css\");\n this.baseURL = baseURL;\n },\n\n /**\n * Save visualization, returning a Deferred object for the remote call to save.\n */\n save_viz: function() {\n // show dialog\n Galaxy.modal.show({ title: \"Saving...\", body: \"progress\" });\n\n // Save bookmarks.\n var bookmarks = [];\n $(\".bookmark\").each(function() {\n bookmarks.push({\n position: $(this)\n .children(\".position\")\n .text(),\n annotation: $(this)\n .children(\".annotation\")\n .text()\n });\n });\n\n // FIXME: give unique IDs to Drawables and save overview as ID.\n var overview_track_name = view.overview_drawable ? view.overview_drawable.config.get_value(\"name\") : null;\n\n var viz_config = {\n view: view.to_dict(),\n viewport: {\n chrom: view.chrom,\n start: view.low,\n end: view.high,\n overview: overview_track_name\n },\n bookmarks: bookmarks\n };\n\n // Make call to save visualization.\n return $.ajax({\n url: `${Galaxy.root}visualization/save`,\n type: \"POST\",\n dataType: \"json\",\n data: {\n id: view.vis_id,\n title: view.config.get_value(\"name\"),\n dbkey: view.dbkey,\n type: \"trackster\",\n vis_json: JSON.stringify(viz_config)\n }\n })\n .success(vis_info => {\n Galaxy.modal.hide();\n view.vis_id = vis_info.vis_id;\n view.has_changes = false;\n\n // Needed to set URL when first saving a visualization.\n window.history.pushState({}, \"\", vis_info.url + window.location.hash);\n })\n .error(() => {\n // show dialog\n Galaxy.modal.show({\n title: \"Could Not Save\",\n body: \"Could not save visualization. Please try again later.\",\n buttons: {\n Cancel: function() {\n Galaxy.modal.hide();\n }\n }\n });\n });\n },\n\n /**\n * Create button menu\n */\n createButtonMenu: function() {\n var self = this;\n\n var menu = mod_icon_btn.create_icon_buttons_menu(\n [\n {\n icon_class: \"plus-button\",\n title: \"Add tracks\",\n on_click: function() {\n visualization.select_datasets({ dbkey: view.dbkey }, new_tracks => {\n _.each(new_tracks, track => {\n view.add_drawable(tracks.object_from_template(track, view, view));\n });\n });\n }\n },\n {\n icon_class: \"block--plus\",\n title: \"Add group\",\n on_click: function() {\n view.add_drawable(\n new tracks.DrawableGroup(view, view, {\n name: \"New Group\"\n })\n );\n }\n },\n {\n icon_class: \"bookmarks\",\n title: \"Bookmarks\",\n on_click: function() {\n // HACK -- use style to determine if panel is hidden and hide/show accordingly.\n force_right_panel($(\"div#right\").css(\"right\") == \"0px\" ? \"hide\" : \"show\");\n }\n },\n {\n icon_class: \"globe\",\n title: \"Circster\",\n on_click: function() {\n window.location = `${self.baseURL}visualization/circster?id=${view.vis_id}`;\n }\n },\n {\n icon_class: \"disk--arrow\",\n title: \"Save\",\n on_click: function() {\n self.save_viz();\n }\n },\n {\n icon_class: \"cross-circle\",\n title: \"Close\",\n on_click: function() {\n self.handle_unsaved_changes(view);\n }\n }\n ],\n {\n tooltip_config: { placement: \"bottom\" }\n }\n );\n\n this.buttonMenu = menu;\n return menu;\n },\n\n /**\n * Add bookmark.\n */\n add_bookmark: function(position, annotation, editable) {\n // Create HTML.\n var bookmarks_container = $(\"#right .unified-panel-body\");\n\n var new_bookmark = $(\"
\")\n .addClass(\"bookmark\")\n .appendTo(bookmarks_container);\n\n var position_div = $(\"
\")\n .addClass(\"position\")\n .appendTo(new_bookmark);\n\n var position_link = $(\"\")\n .text(position)\n .appendTo(position_div)\n .click(() => {\n view.go_to(position);\n return false;\n });\n\n var annotation_div = $(\"
\")\n .text(annotation)\n .appendTo(new_bookmark);\n\n // If editable, enable bookmark deletion and annotation editing.\n if (editable) {\n var delete_icon_container = $(\"
\")\n .addClass(\"delete-icon-container\")\n .prependTo(new_bookmark)\n .click(() => {\n // Remove bookmark.\n new_bookmark.slideUp(\"fast\");\n new_bookmark.remove();\n view.has_changes = true;\n return false;\n });\n\n var delete_icon = $(\"\")\n .addClass(\"icon-button delete\")\n .appendTo(delete_icon_container);\n\n annotation_div\n .make_text_editable({\n num_rows: 3,\n use_textarea: true,\n help_text: \"Edit bookmark note\"\n })\n .addClass(\"annotation\");\n }\n\n view.has_changes = true;\n return new_bookmark;\n },\n\n /**\n * Create a complete Trackster visualization. Returns view.\n */\n create_visualization: function(view_config, viewport_config, drawables_config, bookmarks_config, editable) {\n // Create view.\n var self = this;\n\n var view = new tracks.TracksterView(_.extend(view_config, { header: false }));\n\n view.editor = true;\n $.when(view.load_chroms_deferred).then(chrom_info => {\n // Viewport config.\n if (viewport_config) {\n var chrom = viewport_config.chrom;\n var start = viewport_config.start;\n var end = viewport_config.end;\n var overview_drawable_name = viewport_config.overview;\n\n if (chrom && start !== undefined && end) {\n view.change_chrom(chrom, start, end);\n } else {\n // No valid viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n } else {\n // No viewport, so use first chromosome.\n view.change_chrom(chrom_info[0].chrom);\n }\n\n // Add drawables to view.\n if (drawables_config) {\n // FIXME: can from_dict() be used to create view and add drawables?\n var drawable_config;\n\n var drawable_type;\n var drawable;\n for (var i = 0; i < drawables_config.length; i++) {\n view.add_drawable(tracks.object_from_template(drawables_config[i], view, view));\n }\n }\n\n // Set overview.\n var overview_drawable;\n for (var i = 0; i < view.drawables.length; i++) {\n if (view.drawables[i].config.get_value(\"name\") === overview_drawable_name) {\n view.set_overview(view.drawables[i]);\n break;\n }\n }\n\n // Load bookmarks.\n if (bookmarks_config) {\n var bookmark;\n for (var i = 0; i < bookmarks_config.length; i++) {\n bookmark = bookmarks_config[i];\n self.add_bookmark(bookmark[\"position\"], bookmark[\"annotation\"], editable);\n }\n }\n\n // View has no changes as of yet.\n view.has_changes = false;\n });\n\n // Final initialization.\n this.set_up_router({ view: view });\n\n return view;\n },\n\n /**\n * Set up location router to use hashes as track browser locations.\n */\n set_up_router: function(options) {\n new visualization.TrackBrowserRouter(options);\n Backbone.history.start();\n },\n\n /**\n * Set up keyboard navigation for a visualization.\n */\n init_keyboard_nav: function(view) {\n // Keyboard navigation. Scroll ~7% of height when scrolling up/down.\n $(document).keyup(e => {\n // Do not navigate if arrow keys used in input element.\n if ($(e.srcElement).is(\":input\")) {\n return;\n }\n\n // Key codes: left == 37, up == 38, right == 39, down == 40\n switch (e.which) {\n case 37:\n view.move_fraction(0.25);\n break;\n case 38:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() - 20);\n break;\n case 39:\n view.move_fraction(-0.25);\n break;\n case 40:\n var change = Math.round(view.viewport_container.height() / 15.0);\n view.viewport_container.scrollTop(view.viewport_container.scrollTop() + 20);\n break;\n }\n });\n },\n\n /**\n * Handle unsaved changes in visualization.\n */\n handle_unsaved_changes: function(view) {\n if (view.has_changes) {\n var self = this;\n Galaxy.modal.show({\n title: \"Close visualization\",\n body: \"There are unsaved changes to your visualization which will be lost if you do not save them.\",\n buttons: {\n Cancel: function() {\n Galaxy.modal.hide();\n },\n \"Leave without Saving\": function() {\n $(window).off(\"beforeunload\");\n window.location = `${Galaxy.root}visualization`;\n },\n Save: function() {\n $.when(self.save_viz()).then(() => {\n window.location = `${Galaxy.root}visualization`;\n });\n }\n }\n });\n } else {\n window.location = `${Galaxy.root}visualization`;\n }\n }\n});\n\nvar TracksterView = Backbone.View.extend({\n // initalize trackster\n initialize: function() {\n // load ui\n ui = new TracksterUI(Galaxy.root);\n\n // create button menu\n ui.createButtonMenu();\n\n // attach the button menu to the panel header and float it left\n ui.buttonMenu.$el.attr(\"style\", \"float: right\");\n\n // add to center panel\n $(\"#center .unified-panel-header-inner\").append(ui.buttonMenu.$el);\n\n // configure right panel\n $(\"#right .unified-panel-title\").append(\"Bookmarks\");\n $(\"#right .unified-panel-icons\").append(\n \"\"\n );\n\n // resize view when showing/hiding right panel (bookmarks for now).\n $(\"#right-border\").click(() => {\n view.resize_window();\n });\n\n // hide right panel\n force_right_panel(\"hide\");\n\n // check if id is available\n if (galaxy_config.app.id) {\n this.view_existing();\n } else if (query_string.get(\"dataset_id\")) {\n this.choose_existing_or_new();\n } else {\n this.view_new();\n }\n },\n\n choose_existing_or_new: function() {\n var self = this;\n var dbkey = query_string.get(\"dbkey\");\n var listTracksParams = {};\n\n var dataset_params = {\n dbkey: dbkey,\n dataset_id: query_string.get(\"dataset_id\"),\n hda_ldda: query_string.get(\"hda_ldda\"),\n gene_region: query_string.get(\"gene_region\")\n };\n\n if (dbkey) {\n listTracksParams[\"f-dbkey\"] = dbkey;\n }\n\n Galaxy.modal.show({\n title: \"View Data in a New or Saved Visualization?\",\n // either have text in here or have to remove body and the header/footer margins\n body: `

    You can add this dataset as:
  • a new track to one of your existing, saved Trackster sessions if they share the genome build: ${dbkey ||\n \"Not available.\"}
  • or create a new session with this dataset as the only track

`,\n buttons: {\n Cancel: function() {\n window.location = `${Galaxy.root}visualizations/list`;\n },\n \"View in saved visualization\": function() {\n self.view_in_saved(dataset_params);\n },\n \"View in new visualization\": function() {\n self.view_new();\n }\n }\n });\n },\n\n // view\n view_in_saved: function(dataset_params) {\n var tracks_grid = new GridView({\n url_base: `${Galaxy.root}visualization/list_tracks`,\n dict_format: true,\n embedded: true\n });\n Galaxy.modal.show({\n title: \"Add Data to Saved Visualization\",\n body: tracks_grid.$el,\n buttons: {\n Cancel: function() {\n window.location = `${Galaxy.root}visualizations/list`;\n },\n \"Add to visualization\": function() {\n $(parent.document)\n .find(\"input[name=id]:checked\")\n .each(function() {\n dataset_params.id = $(this).val();\n window.location = `${Galaxy.root}visualization/trackster?${$.param(dataset_params)}`;\n });\n }\n }\n });\n },\n\n // view\n view_existing: function() {\n // get config\n var viz_config = galaxy_config.app.viz_config;\n\n // view\n view = ui.create_visualization(\n {\n container: $(\"#center .unified-panel-body\"),\n name: viz_config.title,\n vis_id: viz_config.vis_id,\n dbkey: viz_config.dbkey\n },\n viz_config.viewport,\n viz_config.tracks,\n viz_config.bookmarks,\n true\n );\n\n // initialize editor\n this.init_editor();\n },\n\n // view\n view_new: function() {\n // reference this\n var self = this;\n\n // ajax\n $.ajax({\n url: `${Galaxy.root}api/genomes?chrom_info=True`,\n data: {},\n error: function() {\n alert(\"Couldn't create new browser.\");\n },\n success: function(response) {\n // show dialog\n Galaxy.modal.show({\n title: \"New Visualization\",\n body: self.template_view_new(response),\n buttons: {\n Cancel: function() {\n window.location = `${Galaxy.root}visualizations/list`;\n },\n Create: function() {\n self.create_browser($(\"#new-title\").val(), $(\"#new-dbkey\").val());\n Galaxy.modal.hide();\n }\n }\n });\n\n // select default\n var dbkeys_in_genomes = response.map(r => r[1]);\n if (galaxy_config.app.default_dbkey && _.contains(dbkeys_in_genomes, galaxy_config.app.default_dbkey)) {\n $(\"#new-dbkey\").val(galaxy_config.app.default_dbkey);\n }\n\n // change focus\n $(\"#new-title\").focus();\n $(\"select[name='dbkey']\").select2();\n\n // to support the large number of options for dbkey, enable scrolling in overlay.\n $(\"#overlay\").css(\"overflow\", \"auto\");\n }\n });\n },\n\n // new browser form\n template_view_new: function(response) {\n // start template\n var html =\n '
' +\n '
' +\n '' +\n '
' +\n '' +\n \"
\" +\n '
' +\n \"
\" +\n '
' +\n '' +\n '
' +\n '
Is the build not listed here? Add a Custom Build
`;\n\n // return\n return html;\n },\n\n // create\n create_browser: function(name, dbkey) {\n $(document).trigger(\"convert_to_values\");\n\n view = ui.create_visualization(\n {\n container: $(\"#center .unified-panel-body\"),\n name: name,\n dbkey: dbkey\n },\n galaxy_config.app.gene_region\n );\n\n // initialize editor\n this.init_editor();\n\n // modify view setting\n view.editor = true;\n },\n\n // initialization for editor-specific functions.\n init_editor: function() {\n // set title\n $(\"#center .unified-panel-title\").text(`${view.config.get_value(\"name\")} (${view.dbkey})`);\n\n // add dataset\n if (galaxy_config.app.add_dataset)\n $.ajax({\n url: `${Galaxy.root}api/datasets/${galaxy_config.app.add_dataset}`,\n data: { hda_ldda: \"hda\", data_type: \"track_config\" },\n dataType: \"json\",\n success: function(track_data) {\n view.add_drawable(tracks.object_from_template(track_data, view, view));\n }\n });\n\n // initialize icons\n $(\"#add-bookmark-button\").click(() => {\n // add new bookmark.\n var position = `${view.chrom}:${view.low}-${view.high}`;\n\n var annotation = \"Bookmark description\";\n return ui.add_bookmark(position, annotation, true);\n });\n\n // initialize keyboard\n ui.init_keyboard_nav(view);\n\n $(window).on(\"beforeunload\", () => {\n if (view.has_changes) {\n return \"There are unsaved changes to your visualization that will be lost if you leave this page.\";\n }\n });\n }\n});\n\nexport default {\n TracksterUI: TracksterUI,\n GalaxyApp: TracksterView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster.js","import * as _ from \"libs/underscore\";\nimport visualization from \"viz/visualization\";\nimport viz_views from \"viz/viz_views\";\nimport util from \"viz/trackster/util\";\nimport slotting from \"viz/trackster/slotting\";\nimport painters from \"viz/trackster/painters\";\nimport filters_mod from \"viz/trackster/filters\";\nimport data from \"mvc/dataset/data\";\nimport tools_mod from \"mvc/tool/tools\";\nimport config_mod from \"utils/config\";\nimport bbi from \"viz/bbi-data-manager\";\nimport \"ui/editable-text\";\nvar extend = _.extend;\n\n// ---- Web UI specific utilities ----\n\n/**\n * Dictionary of HTML element-JavaScript object relationships.\n */\n// TODO: probably should separate moveable objects from containers.\nvar html_elt_js_obj_dict = {};\n\n/**\n * Designates an HTML as a container.\n */\nvar is_container = (element, obj) => {\n html_elt_js_obj_dict[element.attr(\"id\")] = obj;\n};\n\n/**\n * Make `element` moveable within parent and sibling elements by dragging `handle` (a selector).\n * Function manages JS objects, containers as well.\n *\n * @param element HTML element to make moveable\n * @param handle_class classname that denotes HTML element to be used as handle\n * @param container_selector selector used to identify possible containers for this element\n * @param element_js_obj JavaScript object associated with element; used\n */\nvar moveable = (element, handle_class, container_selector, element_js_obj) => {\n // HACK: set default value for container selector.\n container_selector = \".group\";\n\n // Register element with its object.\n html_elt_js_obj_dict[element.attr(\"id\")] = element_js_obj;\n\n // Need to provide selector for handle, not class.\n element\n .bind(\"drag\", { handle: `.${handle_class}`, relative: true }, function(e, d) {\n var element = $(this);\n var parent = $(this).parent();\n\n var // Only sorting amongst tracks and groups.\n children = parent.children(\".track,.group\");\n\n var this_obj = html_elt_js_obj_dict[$(this).attr(\"id\")];\n var child;\n var container;\n var top;\n var bottom;\n var i;\n\n //\n // Enable three types of dragging: (a) out of container; (b) into container;\n // (c) sibling movement, aka sorting. Handle in this order for simplicity.\n //\n\n // Handle dragging out of container.\n container = $(this).parents(container_selector);\n if (container.length !== 0) {\n top = container.position().top;\n bottom = top + container.outerHeight();\n var cur_container = html_elt_js_obj_dict[container.attr(\"id\")];\n if (d.offsetY < top) {\n // Moving above container.\n $(this).insertBefore(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable_before(this_obj, cur_container);\n return;\n } else if (d.offsetY > bottom) {\n // Moving below container.\n $(this).insertAfter(container);\n cur_container.remove_drawable(this_obj);\n cur_container.container.add_drawable(this_obj);\n return;\n }\n }\n\n // Handle dragging into container. Child is appended to container's content_div.\n container = null;\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n top = child.position().top;\n bottom = top + child.outerHeight();\n // Dragging into container if child is a container and offset is inside container.\n if (child.is(container_selector) && this !== child.get(0) && d.offsetY >= top && d.offsetY <= bottom) {\n // Append/prepend based on where offsetY is closest to and return.\n if (d.offsetY - top < bottom - d.offsetY) {\n child.find(\".content-div\").prepend(this);\n } else {\n child.find(\".content-div\").append(this);\n }\n // Update containers. Object may not have container if it is being moved quickly.\n if (this_obj.container) {\n this_obj.container.remove_drawable(this_obj);\n }\n html_elt_js_obj_dict[child.attr(\"id\")].add_drawable(this_obj);\n return;\n }\n }\n\n // Handle sibling movement, aka sorting.\n\n // Determine new position\n for (i = 0; i < children.length; i++) {\n child = $(children.get(i));\n if (\n d.offsetY < child.position().top &&\n // Cannot move tracks above reference track or intro div.\n !(child.hasClass(\"reference-track\") || child.hasClass(\"intro\"))\n ) {\n break;\n }\n }\n\n // If not already in the right place, move. Need\n // to handle the end specially since we don't have\n // insert at index\n if (i === children.length) {\n if (this !== children.get(i - 1)) {\n parent.append(this);\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, i);\n }\n } else if (this !== children.get(i)) {\n $(this).insertBefore(children.get(i));\n // Need to adjust insert position if moving down because move is changing\n // indices of all list items.\n html_elt_js_obj_dict[parent.attr(\"id\")].move_drawable(this_obj, d.deltaY > 0 ? i - 1 : i);\n }\n })\n .bind(\"dragstart\", function() {\n $(this).addClass(\"dragging\");\n })\n .bind(\"dragend\", function() {\n $(this).removeClass(\"dragging\");\n });\n};\n\n/**\n * Init constants & functions used throughout trackster.\n */\nvar // Padding at the top of tracks for error messages\nERROR_PADDING = 20;\n\nvar // Maximum number of rows un a slotted track\nMAX_FEATURE_DEPTH = 100;\n\nvar // Minimum width for window for squish to be used.\nMIN_SQUISH_VIEW_WIDTH = 12000;\n\nvar // Number of pixels per tile, not including left offset.\nTILE_SIZE = 400;\n\nvar DEFAULT_DATA_QUERY_WAIT = 5000;\n\nvar // Maximum number of chromosomes that are selectable at any one time.\nMAX_CHROMS_SELECTABLE = 100;\n\nvar DATA_ERROR = \"Cannot display dataset due to an error. \";\n\nvar DATA_NOCONVERTER = \"A converter for this dataset is not installed. Please check your datatypes_conf.xml file.\";\n\nvar DATA_NONE = \"No data for this chrom/contig.\";\n\nvar DATA_PENDING =\n \"Preparing data. This can take a while for a large dataset. \" +\n \"If the visualization is saved and closed, preparation will continue in the background.\";\n\nvar DATA_CANNOT_RUN_TOOL = \"Tool cannot be rerun: \";\nvar DATA_LOADING = \"Loading data...\";\nvar DATA_OK = \"Ready for display\";\nvar TILE_CACHE_SIZE = 10;\nvar DATA_CACHE_SIZE = 20;\n\nvar // Numerical/continuous data display modes.\nCONTINUOUS_DATA_MODES = [\"Histogram\", \"Line\", \"Filled\", \"Intensity\"];\n\n/**\n * Round a number to a given number of decimal places.\n */\nfunction round(num, places) {\n // Default rounding is to integer.\n if (!places) {\n places = 0;\n }\n\n var val = Math.pow(10, places);\n return Math.round(num * val) / val;\n}\n\n/**\n * Check if a server can do byte range requests.\n */\nfunction supportsByteRanges(url) {\n var promise = $.Deferred();\n $.ajax({\n type: \"HEAD\",\n url: url,\n beforeSend: function(xhr) {\n xhr.setRequestHeader(\"Range\", \"bytes=0-10\");\n },\n success: function(result, status, xhr) {\n promise.resolve(xhr.status === 206);\n }\n });\n\n return promise;\n}\n\n/**\n * Drawables hierarchy:\n *\n * Drawable\n * --> DrawableCollection\n * --> DrawableGroup\n * --> View\n * --> Track\n */\n\n/**\n * Base class for all drawable objects. Drawable objects are associated with a view and live in a\n * container. They have the following HTML elements and structure:\n * \n * \n * \n *\n * They optionally have a drag handle class.\n */\nvar Drawable = function(view, container, obj_dict) {\n if (!Drawable.id_counter) {\n Drawable.id_counter = 0;\n }\n this.id = Drawable.id_counter++;\n this.view = view;\n this.container = container;\n this.drag_handle_class = obj_dict.drag_handle_class;\n this.is_overview = false;\n this.action_icons = {};\n\n // -- Set up drawable configuration. --\n this.config = config_mod.ConfigSettingCollection.from_models_and_saved_values(this.config_params, obj_dict.prefs);\n\n // If there's no saved name, use object name.\n if (!this.config.get_value(\"name\")) {\n this.config.set_value(\"name\", obj_dict.name);\n }\n if (this.config_onchange) {\n this.config.on(\"change\", this.config_onchange, this);\n }\n\n // Build Drawable HTML and behaviors.\n this.container_div = this.build_container_div();\n this.header_div = null;\n\n // Use opt-out policy on header creation because this is the more frequent approach:\n // unless flag set, create header.\n if (obj_dict.header !== false) {\n var header_view = new viz_views.TrackHeaderView({\n model: this,\n id: this.id\n });\n\n this.header_div = header_view.$el;\n this.container_div.append(this.header_div);\n\n // Show icons when users is hovering over track.\n var icons_div = header_view.icons_div;\n this.action_icons = header_view.action_icons;\n this.container_div.hover(\n () => {\n icons_div.show();\n },\n () => {\n icons_div.hide();\n }\n );\n }\n};\n\nDrawable.prototype.action_icons_def = [\n // Hide/show drawable content.\n // FIXME: make this an odict for easier lookup.\n {\n name: \"toggle_icon\",\n title: \"Hide/show content\",\n css_class: \"toggle\",\n on_click_fn: function(drawable) {\n if (drawable.config.get_value(\"content_visible\")) {\n drawable.action_icons.toggle_icon.addClass(\"toggle-expand\").removeClass(\"toggle\");\n drawable.hide_contents();\n drawable.config.set_value(\"content_visible\", false);\n } else {\n drawable.action_icons.toggle_icon.addClass(\"toggle\").removeClass(\"toggle-expand\");\n drawable.config.set_value(\"content_visible\", true);\n drawable.show_contents();\n }\n }\n },\n // Edit settings.\n {\n name: \"settings_icon\",\n title: \"Edit settings\",\n css_class: \"gear\",\n on_click_fn: function(drawable) {\n var view = new config_mod.ConfigSettingCollectionView({\n collection: drawable.config\n });\n view.render_in_modal(\"Configure Track\");\n }\n },\n // Remove.\n {\n name: \"remove_icon\",\n title: \"Remove\",\n css_class: \"remove-icon\",\n on_click_fn: function(drawable) {\n // Tooltip for remove icon must be deleted when drawable is deleted.\n $(\".tooltip\").remove();\n drawable.remove();\n }\n }\n];\n\nextend(Drawable.prototype, {\n config_params: [\n { key: \"name\", label: \"Name\", type: \"text\", default_value: \"\" },\n {\n key: \"content_visible\",\n type: \"bool\",\n default_value: true,\n hidden: true\n }\n ],\n\n config_onchange: function() {},\n\n init: function() {},\n\n changed: function() {\n this.view.changed();\n },\n\n can_draw: function() {\n if (this.enabled && this.config.get_value(\"content_visible\")) {\n return true;\n }\n\n return false;\n },\n\n request_draw: function() {},\n\n _draw: function(options) {},\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function() {},\n\n /**\n * Set drawable name.\n */\n set_name: function(new_name) {\n this.old_name = this.config.get_value(\"name\");\n this.config.set_value(\"name\", new_name);\n },\n\n /**\n * Revert track name; currently name can be reverted only once.\n */\n revert_name: function() {\n if (this.old_name) {\n this.config.set_value(\"name\", this.old_name);\n }\n },\n\n /**\n * Remove drawable (a) from its container and (b) from the HTML.\n */\n remove: function() {\n this.changed();\n\n this.container.remove_drawable(this);\n var view = this.view;\n this.container_div.hide(0, function() {\n $(this).remove();\n // HACK: is there a better way to update the view?\n view.update_intro_div();\n });\n },\n\n /**\n * Build drawable's container div; this is the parent div for all drawable's elements.\n */\n build_container_div: function() {},\n\n /**\n * Update icons.\n */\n update_icons: function() {},\n\n /**\n * Hide drawable's contents.\n */\n hide_contents: function() {},\n\n /**\n * Show drawable's contents.\n */\n show_contents: function() {},\n\n /**\n * Returns a shallow copy of all drawables in this drawable.\n */\n get_drawables: function() {}\n});\n\n/**\n * A collection of drawable objects.\n */\nvar DrawableCollection = function(view, container, obj_dict) {\n Drawable.call(this, view, container, obj_dict);\n\n // Attribute init.\n this.obj_type = obj_dict.obj_type;\n this.drawables = [];\n};\n\nextend(DrawableCollection.prototype, Drawable.prototype, {\n /**\n * Unpack and add drawables to the collection.\n */\n unpack_drawables: function(drawables_array) {\n // Add drawables to collection.\n this.drawables = [];\n var drawable;\n for (var i = 0; i < drawables_array.length; i++) {\n drawable = object_from_template(drawables_array[i], this.view, this);\n this.add_drawable(drawable);\n }\n },\n\n /**\n * Init each drawable in the collection.\n */\n init: function() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].init();\n }\n },\n\n /**\n * Draw each drawable in the collection.\n */\n _draw: function(options) {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i]._draw(options);\n }\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function() {\n var dictified_drawables = [];\n for (var i = 0; i < this.drawables.length; i++) {\n dictified_drawables.push(this.drawables[i].to_dict());\n }\n return {\n prefs: this.config.to_key_value_dict(),\n obj_type: this.obj_type,\n drawables: dictified_drawables\n };\n },\n\n /**\n * Add a drawable to the end of the collection.\n */\n add_drawable: function(drawable) {\n this.drawables.push(drawable);\n drawable.container = this;\n this.changed();\n },\n\n /**\n * Add a drawable before another drawable.\n */\n add_drawable_before: function(drawable, other) {\n this.changed();\n var index = this.drawables.indexOf(other);\n if (index !== -1) {\n this.drawables.splice(index, 0, drawable);\n return true;\n }\n return false;\n },\n\n /**\n * Replace one drawable with another.\n */\n replace_drawable: function(old_drawable, new_drawable, update_html) {\n var index = this.drawables.indexOf(old_drawable);\n if (index !== -1) {\n this.drawables[index] = new_drawable;\n if (update_html) {\n old_drawable.container_div.replaceWith(new_drawable.container_div);\n }\n this.changed();\n }\n return index;\n },\n\n /**\n * Remove drawable from this collection.\n */\n remove_drawable: function(drawable) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Found drawable to remove.\n this.drawables.splice(index, 1);\n drawable.container = null;\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Move drawable to another location in collection.\n */\n move_drawable: function(drawable, new_position) {\n var index = this.drawables.indexOf(drawable);\n if (index !== -1) {\n // Remove from current position:\n this.drawables.splice(index, 1);\n // insert into new position:\n this.drawables.splice(new_position, 0, drawable);\n this.changed();\n return true;\n }\n return false;\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function() {\n return this.drawables;\n },\n\n /**\n * Returns all tracks in collection.\n */\n get_tracks: function(track_type) {\n // Initialize queue with copy of drawables array.\n var queue = this.drawables.slice(0);\n\n var tracks = [];\n var drawable;\n while (queue.length !== 0) {\n drawable = queue.shift();\n if (drawable instanceof track_type) {\n tracks.push(drawable);\n } else if (drawable.drawables) {\n queue = queue.concat(drawable.drawables);\n }\n }\n return tracks;\n }\n});\n\n/**\n * A group of drawables that are moveable, visible.\n */\nvar DrawableGroup = function(view, container, obj_dict) {\n extend(obj_dict, {\n obj_type: \"DrawableGroup\",\n drag_handle_class: \"group-handle\"\n });\n DrawableCollection.call(this, view, container, obj_dict);\n\n // Set up containers/moving for group: register both container_div and content div as container\n // because both are used as containers (container div to recognize container, content_div to\n // store elements). Group can be moved.\n this.content_div = $(\"
\")\n .addClass(\"content-div\")\n .attr(\"id\", `group_${this.id}_content_div`)\n .appendTo(this.container_div);\n is_container(this.container_div, this);\n is_container(this.content_div, this);\n moveable(this.container_div, this.drag_handle_class, \".group\", this);\n\n // Set up filters.\n this.filters_manager = new filters_mod.FiltersManager(this);\n this.header_div.after(this.filters_manager.parent_div);\n\n // HACK: add div to clear floating elements.\n this.filters_manager.parent_div.after($(\"
\"));\n\n // For saving drawables' filter managers when group-level filtering is done:\n this.saved_filters_managers = [];\n\n // Add drawables.\n if (\"drawables\" in obj_dict) {\n this.unpack_drawables(obj_dict.drawables);\n }\n\n // Restore filters.\n if (\"filters\" in obj_dict) {\n // FIXME: Pass collection_dict to DrawableCollection/Drawable will make this easier.\n var old_manager = this.filters_manager;\n this.filters_manager = new filters_mod.FiltersManager(this, obj_dict.filters);\n old_manager.parent_div.replaceWith(this.filters_manager.parent_div);\n\n if (obj_dict.filters.visible) {\n this.setup_multitrack_filtering();\n }\n }\n};\n\nextend(DrawableGroup.prototype, Drawable.prototype, DrawableCollection.prototype, {\n action_icons_def: [\n Drawable.prototype.action_icons_def[0],\n Drawable.prototype.action_icons_def[1],\n // Replace group with composite track.\n {\n name: \"composite_icon\",\n title: \"Show composite track\",\n css_class: \"layers-stack\",\n on_click_fn: function(group) {\n $(\".tooltip\").remove();\n group.show_composite_track();\n }\n },\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function(group) {\n // TODO: update Tooltip text.\n if (group.filters_manager.visible()) {\n // Hiding filters.\n group.filters_manager.clear_filters();\n group._restore_filter_managers();\n // TODO: maintain current filter by restoring and setting saved manager's\n // settings to current/shared manager's settings.\n // TODO: need to restore filter managers when moving drawable outside group.\n } else {\n // Showing filters.\n group.setup_multitrack_filtering();\n group.request_draw({ clear_tile_cache: true });\n }\n group.filters_manager.toggle();\n }\n },\n Drawable.prototype.action_icons_def[2]\n ],\n\n build_container_div: function() {\n var container_div = $(\"
\")\n .addClass(\"group\")\n .attr(\"id\", `group_${this.id}`);\n if (this.container) {\n this.container.content_div.append(container_div);\n }\n return container_div;\n },\n\n hide_contents: function() {\n this.tiles_div.hide();\n },\n\n show_contents: function() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n update_icons: function() {\n //\n // Handle update when there are no tracks.\n //\n var num_drawables = this.drawables.length;\n if (num_drawables === 0) {\n this.action_icons.composite_icon.hide();\n this.action_icons.filters_icon.hide();\n } else if (num_drawables === 1) {\n this.action_icons.composite_icon.toggle(this.drawables[0] instanceof CompositeTrack);\n this.action_icons.filters_icon.hide();\n } else {\n // There are 2 or more tracks.\n\n //\n // Determine if a composite track can be created. Current criteria:\n // (a) all tracks are line tracks;\n // OR\n // FIXME: this is not enabled right now because it has not been well tested:\n // (b) there is a single FeatureTrack.\n //\n\n // All tracks the same?\n var i;\n\n var j;\n var drawable;\n var same_type = true;\n var a_type = this.drawables[0].get_type();\n var num_feature_tracks = 0;\n for (i = 0; i < num_drawables; i++) {\n drawable = this.drawables[i];\n if (drawable.get_type() !== a_type) {\n can_composite = false;\n break;\n }\n if (drawable instanceof FeatureTrack) {\n num_feature_tracks++;\n }\n }\n\n if (same_type && this.drawables[0] instanceof LineTrack) {\n this.action_icons.composite_icon.show();\n } else {\n this.action_icons.composite_icon.hide();\n $(\".tooltip\").remove();\n }\n\n //\n // Set up group-level filtering and update filter icon.\n //\n if (num_feature_tracks > 1 && num_feature_tracks === this.drawables.length) {\n //\n // Find shared filters.\n //\n var shared_filters = {};\n\n var filter;\n\n // Init shared filters with filters from first drawable.\n drawable = this.drawables[0];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n shared_filters[filter.name] = [filter];\n }\n\n // Create lists of shared filters.\n for (i = 1; i < this.drawables.length; i++) {\n drawable = this.drawables[i];\n for (j = 0; j < drawable.filters_manager.filters.length; j++) {\n filter = drawable.filters_manager.filters[j];\n if (filter.name in shared_filters) {\n shared_filters[filter.name].push(filter);\n }\n }\n }\n\n //\n // Create filters for shared filters manager. Shared filters manager is group's\n // manager.\n //\n this.filters_manager.remove_all();\n var filters;\n var new_filter;\n var min;\n var max;\n for (var filter_name in shared_filters) {\n filters = shared_filters[filter_name];\n if (filters.length === num_feature_tracks) {\n // Add new filter.\n // FIXME: can filter.copy() be used?\n new_filter = new filters_mod.NumberFilter({\n name: filters[0].name,\n index: filters[0].index\n });\n this.filters_manager.add_filter(new_filter);\n }\n }\n\n // Show/hide icon based on filter availability.\n this.action_icons.filters_icon.toggle(this.filters_manager.filters.length > 0);\n } else {\n this.action_icons.filters_icon.hide();\n }\n }\n },\n\n /**\n * Restore individual track filter managers.\n */\n _restore_filter_managers: function() {\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].filters_manager = this.saved_filters_managers[i];\n }\n this.saved_filters_managers = [];\n },\n\n /**\n *\n */\n setup_multitrack_filtering: function() {\n // Save tracks' managers and set up shared manager.\n if (this.filters_manager.filters.length > 0) {\n // For all tracks, save current filter manager and set manager to shared (this object's) manager.\n this.saved_filters_managers = [];\n for (var i = 0; i < this.drawables.length; i++) {\n var drawable = this.drawables[i];\n this.saved_filters_managers.push(drawable.filters_manager);\n drawable.filters_manager = this.filters_manager;\n }\n\n //TODO: hide filters icons for each drawable?\n }\n this.filters_manager.init_filters();\n },\n\n /**\n * Replace group with a single composite track that includes all group's tracks.\n */\n show_composite_track: function() {\n var composite_track = new CompositeTrack(this.view, this.view, {\n name: this.config.get_value(\"name\"),\n drawables: this.drawables\n });\n var index = this.container.replace_drawable(this, composite_track, true);\n composite_track.request_draw();\n },\n\n add_drawable: function(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n this.update_icons();\n },\n\n remove_drawable: function(drawable) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n this.update_icons();\n },\n\n to_dict: function() {\n // If filters are visible, need to restore original filter managers before converting to dict.\n if (this.filters_manager.visible()) {\n this._restore_filter_managers();\n }\n\n var obj_dict = extend(DrawableCollection.prototype.to_dict.call(this), {\n filters: this.filters_manager.to_dict()\n });\n\n // Setup multi-track filtering again.\n if (this.filters_manager.visible()) {\n this.setup_multitrack_filtering();\n }\n\n return obj_dict;\n },\n\n request_draw: function(options) {\n _.each(this.drawables, d => {\n d.request_draw(options);\n });\n }\n});\n\n/**\n * View object manages a trackster visualization, including tracks and user interactions.\n * Events triggered:\n * navigate: when browser view changes to a new locations\n */\nvar TracksterView = Backbone.View.extend({\n initialize: function(obj_dict) {\n extend(obj_dict, {\n obj_type: \"View\"\n });\n DrawableCollection.call(this, \"View\", obj_dict.container, obj_dict);\n this.chrom = null;\n this.vis_id = obj_dict.vis_id;\n this.dbkey = obj_dict.dbkey;\n this.stand_alone = obj_dict.stand_alone !== undefined ? obj_dict.stand_alone : true;\n this.label_tracks = [];\n this.tracks_to_be_redrawn = [];\n this.max_low = 0;\n this.max_high = 0;\n this.zoom_factor = 3;\n this.min_separation = 30;\n this.has_changes = false;\n // Deferred object that indicates when view's chrom data has been loaded.\n this.load_chroms_deferred = null;\n this.render();\n this.canvas_manager = new visualization.CanvasManager(this.container.get(0).ownerDocument);\n this.reset();\n\n // Define track configuration\n this.config = config_mod.ConfigSettingCollection.from_models_and_saved_values(\n [\n {\n key: \"name\",\n label: \"Name\",\n type: \"text\",\n default_value: \"\"\n },\n {\n key: \"a_color\",\n label: \"A Color\",\n type: \"color\",\n default_value: \"#FF0000\"\n },\n {\n key: \"c_color\",\n label: \"C Color\",\n type: \"color\",\n default_value: \"#00FF00\"\n },\n {\n key: \"g_color\",\n label: \"G Color\",\n type: \"color\",\n default_value: \"#0000FF\"\n },\n {\n key: \"t_color\",\n label: \"T Color\",\n type: \"color\",\n default_value: \"#FF00FF\"\n },\n {\n key: \"n_color\",\n label: \"N Color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n }\n ],\n { name: obj_dict.name }\n );\n },\n\n render: function() {\n // Attribute init.\n this.requested_redraw = false;\n\n // Create DOM elements\n var parent_element = this.container;\n\n var view = this;\n // Top container for things that are fixed at the top\n this.top_container = $(\"
\")\n .addClass(\"top-container\")\n .appendTo(parent_element);\n // Browser content, primary tracks are contained in here\n this.browser_content_div = $(\"
\")\n .addClass(\"content\")\n .appendTo(parent_element);\n // Bottom container for things that are fixed at the bottom\n this.bottom_container = $(\"
\")\n .addClass(\"bottom-container\")\n .appendTo(parent_element);\n // Label track fixed at top\n this.top_labeltrack = $(\"
\")\n .addClass(\"top-labeltrack\")\n .appendTo(this.top_container);\n // Viewport for dragging tracks in center\n this.viewport_container = $(\"
\")\n .addClass(\"viewport-container\")\n .attr(\"id\", \"viewport-container\")\n .appendTo(this.browser_content_div);\n // Alias viewport_container as content_div so that it matches function of DrawableCollection/Group content_div.\n this.content_div = this.viewport_container;\n is_container(this.viewport_container, view);\n // Introduction div shown when there are no tracks.\n this.intro_div = $(\"
\")\n .addClass(\"intro\")\n .appendTo(this.viewport_container);\n var add_tracks_button = $(\"
\")\n .text(\"Add Datasets to Visualization\")\n .addClass(\"action-button\")\n .appendTo(this.intro_div)\n .click(() => {\n visualization.select_datasets({ dbkey: view.dbkey }, tracks => {\n _.each(tracks, track => {\n view.add_drawable(object_from_template(track, view, view));\n });\n });\n });\n\n // Navigation at top\n this.nav_container = $(\"
\")\n .addClass(\"trackster-nav-container\")\n .prependTo(this.top_container);\n this.nav = $(\"
\")\n .addClass(\"trackster-nav\")\n .appendTo(this.nav_container);\n\n if (this.stand_alone) {\n this.nav_container.addClass(\"stand-alone\");\n this.nav.addClass(\"stand-alone\");\n }\n\n // Overview (scrollbar and overview plot) at bottom\n this.overview = $(\"
\")\n .addClass(\"overview\")\n .appendTo(this.bottom_container);\n this.overview_viewport = $(\"
\")\n .addClass(\"overview-viewport\")\n .appendTo(this.overview);\n this.overview_close = $(\"\")\n .attr(\"title\", \"Close overview\")\n .addClass(\"icon-button overview-close tooltip\")\n .hide()\n .appendTo(this.overview_viewport);\n this.overview_highlight = $(\"
\")\n .addClass(\"overview-highlight\")\n .hide()\n .appendTo(this.overview_viewport);\n this.overview_box_background = $(\"
\")\n .addClass(\"overview-boxback\")\n .appendTo(this.overview_viewport);\n this.overview_box = $(\"
\")\n .addClass(\"overview-box\")\n .appendTo(this.overview_viewport);\n this.default_overview_height = this.overview_box.height();\n\n this.nav_controls = $(\"
\")\n .addClass(\"nav-controls\")\n .appendTo(this.nav);\n this.chrom_select = $(\"\")\n .addClass(\"nav-input\")\n .hide()\n .bind(\"keyup focusout\", submit_nav)\n .appendTo(this.nav_controls);\n this.location_span = $(\"\")\n .addClass(\"location\")\n .attr(\"title\", \"Click to change location\")\n .tooltip({ placement: \"bottom\" })\n .appendTo(this.nav_controls);\n this.location_span.click(() => {\n view.location_span.hide();\n view.chrom_select.hide();\n view.nav_input.val(`${view.chrom}:${view.low}-${view.high}`);\n view.nav_input.css(\"display\", \"inline-block\");\n view.nav_input.select();\n view.nav_input.focus();\n // Set up autocomplete for tracks' features.\n view.nav_input.autocomplete({\n source: function(request, response) {\n // Using current text, query each track and create list of all matching features.\n var all_features = [];\n\n var feature_search_deferreds = $.map(view.get_tracks(FeatureTrack), t =>\n t.data_manager.search_features(request.term).success(dataset_features => {\n all_features = all_features.concat(dataset_features);\n })\n );\n\n // When all searching is done, fill autocomplete.\n $.when.apply($, feature_search_deferreds).done(() => {\n response(\n $.map(all_features, feature => ({\n label: feature[0],\n value: feature[1]\n }))\n );\n });\n },\n minLength: 2\n });\n });\n if (this.vis_id !== undefined) {\n this.hidden_input = $(\"\")\n .attr(\"type\", \"hidden\")\n .val(this.vis_id)\n .appendTo(this.nav_controls);\n }\n\n this.zo_link = $(\"\")\n .attr(\"id\", \"zoom-out\")\n .attr(\"title\", \"Zoom out\")\n .tooltip({ placement: \"bottom\" })\n .click(() => {\n view.zoom_out();\n })\n .appendTo(this.nav_controls);\n this.zi_link = $(\"\")\n .attr(\"id\", \"zoom-in\")\n .attr(\"title\", \"Zoom in\")\n .tooltip({ placement: \"bottom\" })\n .click(() => {\n view.zoom_in();\n })\n .appendTo(this.nav_controls);\n\n // Get initial set of chroms.\n this.load_chroms_deferred = this.load_chroms({ low: 0 });\n this.chrom_select.bind(\"change\", () => {\n view.change_chrom(view.chrom_select.val());\n });\n\n /*\n this.browser_content_div.bind(\"mousewheel\", function( e, delta ) {\n if (Math.abs(delta) < 0.5) {\n return;\n }\n if (delta > 0) {\n view.zoom_in(e.pageX, this.viewport_container);\n } else {\n view.zoom_out();\n }\n e.preventDefault();\n });\n */\n\n // Blur tool/filter inputs when user clicks on content div.\n this.browser_content_div.click(function(e) {\n $(this)\n .find(\"input\")\n .trigger(\"blur\");\n });\n\n // Double clicking zooms in\n this.browser_content_div.bind(\"dblclick\", function(e) {\n view.zoom_in(e.pageX, this.viewport_container);\n });\n\n // Dragging the overview box (~ horizontal scroll bar)\n this.overview_box\n .bind(\"dragstart\", function(e, d) {\n this.current_x = d.offsetX;\n })\n .bind(\"drag\", function(e, d) {\n var delta = d.offsetX - this.current_x;\n this.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.max_high - view.max_low));\n view.move_delta(-delta_chrom);\n });\n\n this.overview_close.click(() => {\n view.reset_overview();\n });\n\n // Dragging in the viewport scrolls\n this.viewport_container\n .bind(\"draginit\", (e, d) => {\n // Disable interaction if started in scrollbar (for webkit)\n if (e.clientX > view.viewport_container.width() - 16) {\n return false;\n }\n })\n .bind(\"dragstart\", (e, d) => {\n d.original_low = view.low;\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n })\n .bind(\"drag\", function(e, d) {\n var container = $(this);\n var delta = d.offsetX - d.current_x;\n var new_scroll = container.scrollTop() - (e.clientY - d.current_height);\n container.scrollTop(new_scroll);\n d.current_height = e.clientY;\n d.current_x = d.offsetX;\n var delta_chrom = Math.round(delta / view.viewport_container.width() * (view.high - view.low));\n view.move_delta(delta_chrom);\n });\n /*\n FIXME: Do not do this for now because it's too jittery. Some kind of gravity approach is\n needed here because moving left/right should be difficult.\n\n // Also capture mouse wheel for left/right scrolling\n }).bind( 'mousewheel', function( e, d, dx, dy ) {\n // Only handle x axis scrolling; y axis scrolling is\n // handled by the browser when the event bubbles up.\n if (dx) {\n var delta_chrom = Math.round( - dx / view.viewport_container.width() * (view.high - view.low) );\n view.move_delta( delta_chrom );\n }\n });\n */\n\n // Dragging in the top label track allows selecting a region to zoom in on selected region.\n this.top_labeltrack\n .bind(\"dragstart\", function(e, d) {\n return $(\"
\")\n .addClass(\"zoom-area\")\n .css(\"height\", view.browser_content_div.height() + view.top_labeltrack.height() + 1)\n .appendTo($(this));\n })\n .bind(\"drag\", (e, d) => {\n $(d.proxy).css({\n left: Math.min(e.pageX, d.startX) - view.container.offset().left,\n width: Math.abs(e.pageX - d.startX)\n });\n\n var min = Math.min(e.pageX, d.startX) - view.container.offset().left;\n\n var max = Math.max(e.pageX, d.startX) - view.container.offset().left;\n\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n view.update_location(\n Math.round(min / width * span) + view.low,\n Math.round(max / width * span) + view.low\n );\n })\n .bind(\"dragend\", (e, d) => {\n var min = Math.min(e.pageX, d.startX);\n var max = Math.max(e.pageX, d.startX);\n var span = view.high - view.low;\n var width = view.viewport_container.width();\n var old_low = view.low;\n view.low = Math.round(min / width * span) + old_low;\n view.high = Math.round(max / width * span) + old_low;\n $(d.proxy).remove();\n view.request_redraw();\n });\n\n // FIXME: this is still wonky for embedded visualizations.\n /*\n // For vertical alignment, track mouse with simple line.\n var mouse_tracker_div = $('
').addClass('mouse-pos').appendTo(parent_element);\n\n // Show tracker only when hovering over view.\n parent_element.hover(\n function() {\n mouse_tracker_div.show();\n parent_element.mousemove(function(e) {\n mouse_tracker_div.css({\n // -1 makes line appear next to the mouse w/o preventing mouse actions.\n left: e.pageX - parent_element.offset().left - 1\n });\n });\n },\n function() {\n parent_element.off('mousemove');\n mouse_tracker_div.hide();\n }\n );\n */\n\n this.add_label_track(new LabelTrack(this, { content_div: this.top_labeltrack }));\n\n $(window).bind(\"resize\", function() {\n // Stop previous timer.\n if (this.resize_timer) {\n clearTimeout(this.resize_timer);\n }\n\n // When function activated, resize window and redraw.\n this.resize_timer = setTimeout(() => {\n view.resize_window();\n }, 500);\n });\n $(document).bind(\"redraw\", () => {\n view.redraw();\n });\n\n this.reset();\n $(window).trigger(\"resize\");\n },\n\n get_base_color: function(base) {\n return this.config.get_value(`${base.toLowerCase()}_color`) || this.config.get_value(\"n_color\");\n }\n});\n\n// FIXME: need to use this approach to enable inheritance of DrawableCollection functions.\nextend(TracksterView.prototype, DrawableCollection.prototype, {\n changed: function() {\n this.has_changes = true;\n },\n\n /** Add or remove intro div depending on view state. */\n update_intro_div: function() {\n this.intro_div.toggle(this.drawables.length === 0);\n },\n\n /**\n * Triggers navigate events as needed. If there is a delay,\n * then event is triggered only after navigation has stopped.\n */\n trigger_navigate: function(new_chrom, new_low, new_high, delay) {\n // Stop previous timer.\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n if (delay) {\n // To aggregate calls, use timer and only navigate once\n // location has stabilized.\n var self = this;\n this.timer = setTimeout(() => {\n self.trigger(\"navigate\", `${new_chrom}:${new_low}-${new_high}`);\n }, 500);\n } else {\n view.trigger(\"navigate\", `${new_chrom}:${new_low}-${new_high}`);\n }\n },\n\n update_location: function(low, high) {\n this.location_span.text(`${util.commatize(low)} - ${util.commatize(high)}`);\n this.nav_input.val(`${this.chrom}:${util.commatize(low)}-${util.commatize(high)}`);\n\n // Update location. Only update when there is a valid chrom; when loading vis, there may\n // not be a valid chrom.\n var chrom = this.chrom_select.val();\n if (chrom !== \"\") {\n this.trigger_navigate(chrom, this.low, this.high, true);\n }\n },\n\n /**\n * Load chrom data for the view. Returns a jQuery Deferred.\n */\n // FIXME: instead of loading chrom data, should load and store genome object.\n load_chroms: function(url_parms) {\n url_parms.num = MAX_CHROMS_SELECTABLE;\n\n var view = this;\n var chrom_data = $.Deferred();\n $.ajax({\n url: `${Galaxy.root}api/genomes/${this.dbkey}`,\n data: url_parms,\n dataType: \"json\",\n success: function(result) {\n // Do nothing if could not load chroms.\n if (result.chrom_info.length === 0) {\n return;\n }\n\n // Load chroms.\n if (result.reference) {\n var ref_track = new ReferenceTrack(view);\n view.add_label_track(ref_track);\n view.reference_track = ref_track;\n }\n view.chrom_data = result.chrom_info;\n\n view.chrom_select.html(\"\");\n view.chrom_select.append($(''));\n\n for (var i = 0, len = view.chrom_data.length; i < len; i++) {\n var chrom = view.chrom_data[i].chrom;\n var chrom_option = $(\"`));\n }\n if (result.next_chroms) {\n view.chrom_select.append($(``));\n }\n view.chrom_start_index = result.start_index;\n\n chrom_data.resolve(result.chrom_info);\n },\n error: function() {\n alert(`Could not load chroms for this dbkey: ${view.dbkey}`);\n }\n });\n return chrom_data;\n },\n\n change_chrom: function(chrom, low, high) {\n var view = this;\n // If chrom data is still loading, wait for it.\n if (!view.chrom_data) {\n view.load_chroms_deferred.then(() => {\n view.change_chrom(chrom, low, high);\n });\n return;\n }\n\n // Don't do anything if chrom is \"None\" (hackish but some browsers already have this set), or null/blank\n if (!chrom || chrom === \"None\") {\n return;\n }\n\n //\n // If user is navigating to previous/next set of chroms, load new chrom set and return.\n //\n if (chrom === \"previous\") {\n view.load_chroms({\n low: this.chrom_start_index - MAX_CHROMS_SELECTABLE\n });\n return;\n }\n if (chrom === \"next\") {\n view.load_chroms({\n low: this.chrom_start_index + MAX_CHROMS_SELECTABLE\n });\n return;\n }\n\n //\n // User is loading a particular chrom. Look first in current set; if not in current set, load new\n // chrom set.\n //\n var found = $.grep(view.chrom_data, (v, i) => v.chrom === chrom)[0];\n if (found === undefined) {\n // Try to load chrom and then change to chrom.\n view.load_chroms({ chrom: chrom }, () => {\n view.change_chrom(chrom, low, high);\n });\n return;\n } else {\n // Switching to local chrom.\n if (chrom !== view.chrom) {\n view.chrom = chrom;\n view.chrom_select.val(view.chrom);\n view.max_high = found.len - 1; // -1 because we're using 0-based indexing.\n view.reset();\n\n for (var i = 0, len = view.drawables.length; i < len; i++) {\n var drawable = view.drawables[i];\n if (drawable.init) {\n drawable.init();\n }\n }\n if (view.reference_track) {\n view.reference_track.init();\n }\n }\n\n // Resolve low, high.\n if (low === undefined && high === undefined) {\n // Both are undefined, so view is whole chromosome.\n view.low = 0;\n view.high = view.max_high;\n } else {\n // Low and/or high is defined.\n view.low = low !== undefined ? Math.max(low, 0) : 0;\n if (high === undefined) {\n // Center visualization around low.\n // HACK: max resolution is currently 30 bases.\n view.low = Math.max(view.low - 15, 0);\n view.high = view.low + 30;\n } else {\n // High is defined.\n view.high = Math.min(high, view.max_high);\n }\n }\n\n view.request_redraw();\n }\n },\n\n /**\n * Change viewing region to that denoted by string. General format of string is:\n *\n * [ {separator}[-] ]\n *\n * where separator can be whitespace or a colon. Examples:\n *\n * chr22\n * chr1:100-200\n * chr7 89999\n * chr8 90000 990000\n */\n go_to: function(str) {\n // Remove commas.\n str = str.replace(/,/g, \"\");\n\n // Replace colons and hyphens with space for easy parsing.\n str = str.replace(/:|\\-/g, \" \");\n\n // Parse new location.\n var chrom_pos = str.split(/\\s+/);\n\n var chrom = chrom_pos[0];\n var new_low = chrom_pos[1] ? parseInt(chrom_pos[1], 10) : undefined;\n var new_high = chrom_pos[2] ? parseInt(chrom_pos[2], 10) : undefined;\n\n this.change_chrom(chrom, new_low, new_high);\n },\n\n move_fraction: function(fraction) {\n var view = this;\n var span = view.high - view.low;\n this.move_delta(fraction * span);\n },\n\n move_delta: function(delta_chrom) {\n //\n // Update low, high.\n //\n\n var view = this;\n var current_chrom_span = view.high - view.low;\n // Check for left and right boundaries\n if (view.low - delta_chrom < view.max_low) {\n view.low = view.max_low;\n view.high = view.max_low + current_chrom_span;\n } else if (view.high - delta_chrom > view.max_high) {\n view.high = view.max_high;\n view.low = view.max_high - current_chrom_span;\n } else {\n view.high -= delta_chrom;\n view.low -= delta_chrom;\n }\n\n //\n // Redraw view.\n //\n\n // Redraw without requesting more data immediately.\n view.request_redraw({ data_fetch: false });\n\n // Set up timeout to redraw with more data when moving stops.\n if (this.redraw_on_move_fn) {\n clearTimeout(this.redraw_on_move_fn);\n }\n\n this.redraw_on_move_fn = setTimeout(() => {\n view.request_redraw();\n }, 200);\n\n // Navigate.\n var chrom = view.chrom_select.val();\n this.trigger_navigate(chrom, view.low, view.high, true);\n },\n\n /**\n * Add a drawable to the view.\n */\n add_drawable: function(drawable) {\n DrawableCollection.prototype.add_drawable.call(this, drawable);\n drawable.init();\n this.changed();\n this.update_intro_div();\n\n // When drawable config changes, mark view as changed. This\n // captures most (all?) state change that needs to be saved.\n var self = this;\n drawable.config.on(\"change\", () => {\n self.changed();\n });\n },\n\n add_label_track: function(label_track) {\n label_track.view = this;\n label_track.init();\n this.label_tracks.push(label_track);\n },\n\n /**\n * Remove drawable from the view.\n */\n remove_drawable: function(drawable, hide) {\n DrawableCollection.prototype.remove_drawable.call(this, drawable);\n if (hide) {\n var view = this;\n drawable.container_div.hide(0, function() {\n $(this).remove();\n view.update_intro_div();\n });\n }\n },\n\n reset: function() {\n this.low = this.max_low;\n this.high = this.max_high;\n this.viewport_container.find(\".yaxislabel\").remove();\n },\n\n /**\n * Request that view redraw one or more of view's drawables. If drawable is not specified,\n * all drawables are redrawn.\n */\n request_redraw: function(options, drawable) {\n var view = this;\n\n var // Either redrawing a single drawable or all view's drawables.\n track_list = drawable ? [drawable] : view.drawables;\n\n // Add/update tracks in track list to redraw list.\n _.each(track_list, track => {\n var track_options = _.find(view.tracks_to_be_redrawn, to => to[0] === track);\n\n if (track_options) {\n // Track already in list; update options.\n track_options[1] = options;\n } else {\n // Track not in list yet.\n view.tracks_to_be_redrawn.push([track, options]);\n }\n });\n\n // Set up redraw if it has not been requested since last redraw.\n if (!this.requested_redraw) {\n requestAnimationFrame(() => {\n view._redraw();\n });\n this.requested_redraw = true;\n }\n },\n\n /**\n * Redraws view and tracks.\n * NOTE: this method should never be called directly; request_redraw() should be used so\n * that requestAnimationFrame can manage redrawing.\n */\n _redraw: function() {\n // TODO: move this code to function that does location setting.\n\n // Clear because requested redraw is being handled now.\n this.requested_redraw = false;\n\n var low = this.low;\n var high = this.high;\n\n if (low < this.max_low) {\n low = this.max_low;\n }\n if (high > this.max_high) {\n high = this.max_high;\n }\n var span = this.high - this.low;\n if (this.high !== 0 && span < this.min_separation) {\n high = low + this.min_separation;\n }\n this.low = Math.floor(low);\n this.high = Math.ceil(high);\n\n this.update_location(this.low, this.high);\n\n // -- Drawing code --\n\n // Resolution is a pixel density.\n this.resolution_px_b = this.viewport_container.width() / (this.high - this.low);\n\n // Overview\n var left_px = this.low / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var width_px = (this.high - this.low) / (this.max_high - this.max_low) * this.overview_viewport.width() || 0;\n var min_width_px = 13;\n\n this.overview_box\n .css({\n left: left_px,\n width: Math.max(min_width_px, width_px)\n })\n .show();\n if (width_px < min_width_px) {\n this.overview_box.css(\"left\", left_px - (min_width_px - width_px) / 2);\n }\n if (this.overview_highlight) {\n this.overview_highlight.css({\n left: left_px,\n width: width_px\n });\n }\n\n // Draw data tracks.\n _.each(this.tracks_to_be_redrawn, track_options => {\n var track = track_options[0];\n var options = track_options[1];\n if (track) {\n track._draw(options);\n }\n });\n this.tracks_to_be_redrawn = [];\n\n // Draw label tracks.\n _.each(this.label_tracks, label_track => {\n label_track._draw();\n });\n },\n\n zoom_in: function(point, container) {\n if (this.max_high === 0 || this.high - this.low <= this.min_separation) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span / this.zoom_factor / 2;\n if (point) {\n cur_center = point / this.viewport_container.width() * (this.high - this.low) + this.low;\n }\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n\n this.changed();\n this.request_redraw();\n },\n\n zoom_out: function() {\n if (this.max_high === 0) {\n return;\n }\n var span = this.high - this.low;\n var cur_center = span / 2 + this.low;\n var new_half = span * this.zoom_factor / 2;\n this.low = Math.round(cur_center - new_half);\n this.high = Math.round(cur_center + new_half);\n this.changed();\n this.request_redraw();\n },\n\n /** Resize viewport. Use this method if header/footer content has changed in size. */\n resize_viewport: function() {\n this.viewport_container.height(\n this.container.height() - this.top_container.height() - this.bottom_container.height()\n );\n },\n\n /** Called when window is resized. */\n resize_window: function() {\n this.resize_viewport();\n this.request_redraw();\n },\n\n /** Show a Drawable in the overview. */\n set_overview: function(drawable) {\n if (this.overview_drawable) {\n // If drawable to be set as overview is already in overview, do nothing.\n // Otherwise, remove overview.\n if (this.overview_drawable.dataset.id === drawable.dataset.id) {\n return;\n }\n this.overview_viewport.find(\".track\").remove();\n }\n\n // Set new overview.\n var overview_drawable = drawable.copy({\n content_div: this.overview_viewport\n });\n\n var view = this;\n overview_drawable.header_div.hide();\n overview_drawable.is_overview = true;\n view.overview_drawable = overview_drawable;\n this.overview_drawable.postdraw_actions = () => {\n view.overview_highlight.show().height(view.overview_drawable.content_div.height());\n view.overview_viewport.height(\n view.overview_drawable.content_div.height() + view.overview_box.outerHeight()\n );\n view.overview_close.show();\n view.resize_window();\n };\n view.overview_drawable.request_draw();\n this.changed();\n },\n\n /** Close and reset overview. */\n reset_overview: function() {\n // Update UI.\n $(\".tooltip\").remove();\n this.overview_viewport.find(\".track-tile\").remove();\n this.overview_viewport.height(this.default_overview_height);\n this.overview_box.height(this.default_overview_height);\n this.overview_close.hide();\n this.overview_highlight.hide();\n view.resize_window();\n view.overview_drawable = null;\n }\n});\n\n/**\n * Encapsulation of a tool that users can apply to tracks/datasets.\n */\nvar TracksterTool = tools_mod.Tool.extend({\n defaults: {\n track: null\n },\n\n initialize: function(options) {\n tools_mod.Tool.prototype.initialize.call(this, options);\n\n // Restore tool visibility from state; default to hidden.\n var hidden = true;\n if (options.tool_state !== undefined && options.tool_state.hidden !== undefined) {\n hidden = options.tool_state.hidden;\n }\n this.set(\"hidden\", hidden);\n\n // FIXME: need to restore tool values from options.tool_state\n\n // HACK: remove some inputs because Trackster does yet not work with them.\n this.remove_inputs([\"data\", \"hidden_data\", \"conditional\"]);\n },\n\n state_dict: function(options) {\n return _.extend(this.get_inputs_dict(), {\n hidden: !this.is_visible()\n });\n }\n});\n\n/**\n * View renders tool parameter HTML and updates parameter value as it is changed in the HTML.\n */\nvar ToolParameterView = Backbone.View.extend({\n events: {\n \"change :input\": \"update_value\"\n },\n\n render: function() {\n var param_div = this.$el.addClass(\"param-row\");\n var param = this.model;\n\n // Param label.\n var label_div = $(\"
\")\n .addClass(\"param-label\")\n .text(param.get(\"label\"))\n .appendTo(param_div);\n // Param HTML.\n var html_div = $(\"
\")\n .addClass(\"param-input\")\n .html(param.get(\"html\"))\n .appendTo(param_div);\n // Set initial value.\n html_div.find(\":input\").val(param.get(\"value\"));\n\n // Add to clear floating layout.\n $(\"
\").appendTo(param_div);\n },\n\n update_value: function(update_event) {\n this.model.set_value($(update_event.target).val());\n }\n});\n\n/**\n * View for TracksterTool.\n */\nvar TracksterToolView = Backbone.View.extend({\n initialize: function(options) {\n this.model.on(\"change:hidden\", this.set_visible, this);\n },\n\n /**\n * Render tool UI.\n */\n render: function() {\n var self = this;\n var tool = this.model;\n var parent_div = this.$el.addClass(\"dynamic-tool\").hide();\n\n // Prevent div events from propogating to other elements.\n parent_div\n .bind(\"drag\", e => {\n e.stopPropagation();\n })\n .click(e => {\n e.stopPropagation();\n })\n .bind(\"dblclick\", e => {\n e.stopPropagation();\n })\n .keydown(e => {\n e.stopPropagation();\n });\n\n // Add name, inputs.\n var name_div = $(\"
\")\n .appendTo(parent_div)\n .text(tool.get(\"name\"));\n tool.get(\"inputs\").each(param => {\n // Render parameter.\n var param_view = new ToolParameterView({ model: param });\n param_view.render();\n parent_div.append(param_view.$el);\n });\n\n // Highlight value for inputs for easy replacement.\n parent_div.find(\"input\").click(function() {\n $(this).select();\n });\n\n // Add buttons for running on dataset, region.\n var run_tool_row = $(\"
\")\n .addClass(\"param-row\")\n .appendTo(parent_div);\n var run_on_dataset_button = $(\"\")\n .attr(\"value\", \"Run on complete dataset\")\n .appendTo(run_tool_row);\n var run_on_region_button = $(\"\")\n .attr(\"value\", \"Run on visible region\")\n .appendTo(run_tool_row);\n run_on_region_button.click(() => {\n // Run tool to create new track.\n self.run_on_region();\n });\n run_on_dataset_button.click(() => {\n self.run_on_dataset();\n });\n\n if (tool.is_visible()) {\n this.$el.show();\n }\n },\n\n /**\n * Show or hide tool depending on tool visibility state.\n */\n set_visible: function() {\n this.$el.toggle(this.model.is_visible());\n },\n\n /**\n * Update tool parameters.\n */\n update_params: function() {\n for (var i = 0; i < this.params.length; i++) {\n this.params[i].update_value();\n }\n },\n\n /**\n * Run tool on dataset. Output is placed in dataset's history and no changes to viz are made.\n */\n run_on_dataset: function() {\n var tool = this.model;\n this.run(\n // URL params.\n {\n target_dataset_id: this.model.get(\"track\").dataset.id,\n action: \"rerun\",\n tool_id: tool.id\n },\n null,\n track_data => {\n Galaxy.modal.show({\n title: `${tool.get(\"name\")} is Running`,\n body: `${tool.get(\n \"name\"\n )} is running on the complete dataset. Tool outputs are in dataset's history.`,\n buttons: {\n Close: function() {\n Galaxy.modal.hide();\n }\n }\n });\n }\n );\n },\n\n /**\n * Run dataset on visible region. This creates a new track and sets the track's contents\n * to the tool's output.\n */\n run_on_region: function() {\n //\n // Create track for tool's output immediately to provide user feedback.\n //\n var track = this.model.get(\"track\");\n\n var tool = this.model;\n\n var region = new visualization.GenomeRegion({\n chrom: track.view.chrom,\n start: track.view.low,\n end: track.view.high\n });\n\n var url_params = {\n target_dataset_id: track.dataset.id,\n action: \"rerun\",\n tool_id: tool.id,\n regions: [region.toJSON()]\n };\n\n var current_track = track;\n\n var // Set name of track to include tool name, parameters, and region used.\n track_name = tool.get(\"name\") + current_track.tool_region_and_parameters_str(region);\n\n var container;\n\n // If track not in a group, create a group for it and add new track to group. If track\n // already in group, add track to group.\n if (current_track.container === view) {\n // Create new group.\n var group = new DrawableGroup(view, view, {\n name: track.config.get_value(\"name\")\n });\n\n // Replace track with group.\n var index = current_track.container.replace_drawable(current_track, group, false);\n\n // Update HTML.\n // FIXME: this is ugly way to replace a track with a group -- make this easier via\n // a Drawable or DrawableCollection function.\n group.container_div.insertBefore(current_track.view.content_div.children()[index]);\n group.add_drawable(current_track);\n current_track.container_div.appendTo(group.content_div);\n container = group;\n } else {\n // Use current group.\n container = current_track.container;\n }\n\n // Create and init new track.\n var new_track = new current_track.constructor(view, container, {\n name: track_name,\n hda_ldda: \"hda\"\n });\n new_track.init_for_tool_data();\n new_track.change_mode(current_track.mode);\n new_track.set_filters_manager(current_track.filters_manager.copy(new_track));\n new_track.update_icons();\n container.add_drawable(new_track);\n new_track.tiles_div.text(\"Starting job.\");\n\n // Run tool.\n this.run(url_params, new_track, track_data => {\n new_track.set_dataset(new data.Dataset(track_data));\n new_track.tiles_div.text(\"Running job.\");\n new_track.init();\n });\n },\n\n /**\n * Run tool using a set of URL params and a success callback.\n */\n run: function(url_params, new_track, success_callback) {\n // Run tool.\n url_params.inputs = this.model.get_inputs_dict();\n var ss_deferred = new util.ServerStateDeferred({\n ajax_settings: {\n url: `${Galaxy.root}api/tools`,\n data: JSON.stringify(url_params),\n dataType: \"json\",\n contentType: \"application/json\",\n type: \"POST\"\n },\n interval: 2000,\n success_fn: function(response) {\n return response !== \"pending\";\n }\n });\n\n // Start with this status message.\n //new_track.container_div.addClass(\"pending\");\n //new_track.content_div.html(DATA_PENDING);\n\n $.when(ss_deferred.go()).then(response => {\n if (response === \"no converter\") {\n // No converter available for input datasets, so cannot run tool.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_NOCONVERTER);\n } else if (response.error) {\n // General error.\n new_track.container_div.addClass(\"error\");\n new_track.content_div.text(DATA_CANNOT_RUN_TOOL + response.message);\n } else {\n // Job submitted and running.\n success_callback(response);\n }\n });\n }\n});\n\n/**\n * Generates scale values based on filter and feature's value for filter.\n */\nvar FilterScaler = function(filter, default_val) {\n painters.Scaler.call(this, default_val);\n this.filter = filter;\n};\n\nFilterScaler.prototype.gen_val = function(feature_data) {\n // If filter is not initalized yet, return default val.\n if (\n this.filter.high === Number.MAX_VALUE ||\n this.filter.low === -Number.MAX_VALUE ||\n this.filter.low === this.filter.high\n ) {\n return this.default_val;\n }\n\n // Scaling value is ratio of (filter's value compared to low) to (complete filter range).\n return (parseFloat(feature_data[this.filter.index]) - this.filter.low) / (this.filter.high - this.filter.low);\n};\n\n/**\n * Tiles drawn by tracks.\n */\nvar Tile = function(track, region, w_scale, canvas, data) {\n this.track = track;\n this.region = region;\n this.low = region.get(\"start\");\n this.high = region.get(\"end\");\n this.w_scale = w_scale;\n this.canvas = canvas;\n // Wrap element in div for background and to provide container for tile-specific elements.\n this.html_elt = $(\"
\").append(canvas);\n this.data = data;\n this.stale = false;\n};\n\n/**\n * Perform pre-display actions.\n */\nTile.prototype.predisplay_actions = () => {};\n\nvar LineTrackTile = function(track, region, w_scale, canvas, data) {\n Tile.call(this, track, region, w_scale, canvas, data);\n};\nLineTrackTile.prototype.predisplay_actions = () => {};\n\nvar FeatureTrackTile = function(\n track,\n region,\n w_scale,\n canvas,\n data,\n mode,\n message,\n all_slotted,\n feature_mapper,\n incomplete_features,\n seq_data\n) {\n // Attribute init.\n Tile.call(this, track, region, w_scale, canvas, data);\n this.mode = mode;\n this.all_slotted = all_slotted;\n this.feature_mapper = feature_mapper;\n this.has_icons = false;\n this.incomplete_features = incomplete_features;\n // Features drawn based on data from other tiles.\n this.other_tiles_features_drawn = {};\n this.seq_data = seq_data;\n\n // Add message + action icons to tile's html.\n /*\n This does not work right now because a random set of reads is returned by the server.\n When the server can respond with more data systematically, renable these icons.\n if (message) {\n this.has_icons = true;\n\n var\n tile = this;\n canvas = this.html_elt.children()[0],\n message_div = $(\"
\").addClass(\"tile-message\")\n // -1 to account for border.\n .css({'height': ERROR_PADDING, 'width': canvas.width}).prependTo(this.html_elt);\n\n // Handle message; only message currently is that only the first N elements are displayed.\n var tile_region = new visualization.GenomeRegion({\n chrom: track.view.chrom,\n start: this.low,\n end: this.high\n }),\n num_features = data.length,\n more_down_icon = $(\"\").addClass(\"icon more-down\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data including depth\")\n .tooltip().appendTo(message_div),\n more_across_icon = $(\"\").addClass(\"icon more-across\")\n .attr(\"title\", \"For speed, only the first \" + num_features + \" features in this region were obtained from server. Click to get more data excluding depth\")\n .tooltip().appendTo(message_div);\n\n // Set up actions for icons.\n more_down_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.DEEP_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n\n more_across_icon.click(function() {\n // Mark tile as stale, request more data, and redraw track.\n tile.stale = true;\n track.data_manager.get_more_data(tile_region, track.mode, 1 / tile.w_scale, {}, track.data_manager.BROAD_DATA_REQ);\n $(\".tooltip\").hide();\n track.request_draw();\n }).dblclick(function(e) {\n // Do not propogate as this would normally zoom in.\n e.stopPropagation();\n });\n }\n */\n};\nextend(FeatureTrackTile.prototype, Tile.prototype);\n\n/**\n * Sets up support for popups.\n */\nFeatureTrackTile.prototype.predisplay_actions = () => {\n /*\n FIXME: use a canvas library to handle popups.\n //\n // Add support for popups.\n //\n var tile = this,\n popups = {};\n\n // Only show popups in Pack mode.\n if (tile.mode !== \"Pack\") { return; }\n\n $(this.html_elt).hover(\n function() {\n this.hovered = true;\n $(this).mousemove();\n },\n function() {\n this.hovered = false;\n // Clear popup if it is still hanging around (this is probably not needed)\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n } ).mousemove(function (e) {\n // Use the hover plugin to get a delay before showing popup\n if ( !this.hovered ) { return; }\n // Get feature data for position.\n var\n this_offset = $(this).offset(),\n offsetX = e.pageX - this_offset.left,\n offsetY = e.pageY - this_offset.top,\n feature_data = tile.feature_mapper.get_feature_data(offsetX, offsetY),\n feature_uid = (feature_data ? feature_data[0] : null);\n // Hide visible popup if not over a feature or over a different feature.\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").each(function() {\n if ( !feature_uid ||\n $(this).attr(\"id\") !== feature_uid.toString() ) {\n $(this).remove();\n }\n });\n\n if (feature_data) {\n // Get or create popup.\n var popup = popups[feature_uid];\n if (!popup) {\n // Create feature's popup element.\n var feature_dict = {\n name: feature_data[3],\n start: feature_data[1],\n end: feature_data[2],\n strand: feature_data[4]\n },\n filters = tile.track.filters_manager.filters,\n filter;\n\n // Add filter values to feature dict.\n for (var i = 0; i < filters.length; i++) {\n filter = filters[i];\n feature_dict[filter.name] = feature_data[filter.index];\n }\n\n // Build popup.\n popup = $(\"
\").attr(\"id\", feature_uid).addClass(\"feature-popup\");\n var table = $(\"\"),\n key, value, row;\n for (key in feature_dict) {\n value = feature_dict[key];\n row = $(\"\").appendTo(table);\n $(\" - - % if not simple: - - - % endif - - - - <% - my_row = row_counter.count - row_counter.increment() - %> - %endif - - -<%def name="render_folder( cntrller, folder, folder_pad, created_ldda_ids, library, hidden_folder_ids, tracked_datasets, show_deleted=False, parent=None, row_counter=None, root_folder=False, simple=False )"> - <% - from galaxy.webapps.galaxy.controllers.library_common import active_folders, active_folders_and_library_datasets, activatable_folders_and_library_datasets, branch_deleted - - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - has_accessible_library_datasets = trans.app.security_agent.has_accessible_library_datasets( trans, folder, trans.user, current_user_roles, search_downward=False ) - - if root_folder: - pad = folder_pad - expander = h.url_for("/static/images/silk/resultset_bottom.png") - folder_img = h.url_for("/static/images/silk/folder_page.png") - else: - pad = folder_pad + 20 - expander = h.url_for("/static/images/silk/resultset_next.png") - folder_img = h.url_for("/static/images/silk/folder.png") - if created_ldda_ids: - created_ldda_ids = util.listify( created_ldda_ids ) - if str( folder.id ) in hidden_folder_ids: - return "" - my_row = None - if is_admin: - can_add = can_modify = can_manage = True - elif cntrller in [ 'library' ]: - can_access, folder_ids = trans.app.security_agent.check_folder_contents( trans.user, current_user_roles, folder ) - if not can_access: - can_show, folder_ids = \ - trans.app.security_agent.show_library_item( trans.user, - current_user_roles, - folder, - [ trans.app.security_agent.permitted_actions.LIBRARY_ADD, - trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, - trans.app.security_agent.permitted_actions.LIBRARY_MANAGE ] ) - if not can_show: - return "" - can_add = trans.app.security_agent.can_add_library_item( current_user_roles, folder ) - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, folder ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, folder ) - else: - can_add = can_modify = can_manage = False - - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE - info_association, inherited = folder.get_info_association( restrict=True ) - %> - %if not root_folder and ( not folder.deleted or show_deleted ): - <% encoded_id = trans.security.encode_id( folder.id ) %> - - - - <% - my_row = row_counter.count - row_counter.increment() - %> - %endif - <% - if show_deleted: - sub_folders, library_datasets = activatable_folders_and_library_datasets( trans, folder ) - else: - sub_folders, library_datasets = active_folders_and_library_datasets( trans, folder ) - %> - %if is_admin: - %for sub_folder in sub_folders: - ${render_folder( cntrller, sub_folder, pad, created_ldda_ids, library, [], tracked_datasets, show_deleted=show_deleted, parent=my_row, row_counter=row_counter, root_folder=False )} - %endfor - %for library_dataset in library_datasets: - <% - ldda = library_dataset.library_dataset_dataset_association - if ldda: - # There should always be an ldda, but some users running their own instances have reported that - # some of their LibraryDatasets have no associated lddas - selected = created_ldda_ids and str( ldda.id ) in created_ldda_ids - %> - %if ldda: - ${render_dataset( cntrller, ldda, library_dataset, selected, library, folder, pad, my_row, row_counter, tracked_datasets, show_deleted=show_deleted )} - %endif - %endfor - %else: - %for sub_folder in sub_folders: - ${render_folder( cntrller, sub_folder, pad, created_ldda_ids, library, hidden_folder_ids, tracked_datasets, show_deleted=show_deleted, parent=my_row, row_counter=row_counter, root_folder=False, simple=simple )} - %endfor - %for library_dataset in library_datasets: - <% - ldda = library_dataset.library_dataset_dataset_association - if ldda: - # There should always be an ldda, but some users running their own instances have reported that - # some of their LibraryDatasets have no associated lddas - can_access = trans.app.security_agent.can_access_dataset( current_user_roles, ldda.dataset ) - selected = created_ldda_ids and str( ldda.id ) in created_ldda_ids - else: - can_access = False - %> - %if can_access: - ${render_dataset( cntrller, ldda, library_dataset, selected, library, folder, pad, my_row, row_counter, tracked_datasets, show_deleted=show_deleted, simple=simple )} - %endif - %endfor - %endif - - -<%def name="render_content(simple=False)"> - <% - from galaxy import util - from galaxy.webapps.galaxy.controllers.library_common import branch_deleted - from time import strftime - - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - - if is_admin: - can_add = can_modify = can_manage = True - elif cntrller in [ 'library', 'requests' ]: - can_add = trans.app.security_agent.can_add_library_item( current_user_roles, library ) - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, library ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, library ) - else: - can_add = can_modify = can_manage = False - - info_association, inherited = library.get_info_association() - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE - - self.has_accessible_datasets = trans.app.security_agent.has_accessible_library_datasets( trans, library.root_folder, trans.user, current_user_roles ) - root_folder_has_accessible_library_datasets = trans.app.security_agent.has_accessible_library_datasets( trans, library.root_folder, trans.user, current_user_roles, search_downward=False ) - has_accessible_folders = is_admin or trans.app.security_agent.has_accessible_folders( trans, library.root_folder, trans.user, current_user_roles ) - - tracked_datasets = {} - - class RowCounter( object ): - def __init__( self ): - self.count = 0 - def increment( self ): - self.count += 1 - def __str__( self ): - return str( self.count ) - %> - -

Data Library “${library.name | h}”

- - - - %if message: - ${render_msg( message, status )} - %endif - - %if library.synopsis not in [ '', 'None', None ]: -
- ${library.synopsis | h} -
- %endif - - %if self.has_accessible_datasets: - - %endif - %if has_accessible_folders: -
\").appendTo(row).text(key);\n $(\"\").attr(\"align\", \"left\").appendTo(row)\n .text(typeof(value) === 'number' ? round(value, 2) : value);\n }\n popup.append( $(\"
\").append( table ) );\n popups[feature_uid] = popup;\n }\n\n // Attach popup to track's overlay.\n popup.appendTo( $(this).parents(\".track-content\").children(\".overlay\") );\n\n // Offsets are within canvas, but popup must be positioned relative to parent element.\n // parseInt strips \"px\" from left, top measurements. +7 so that mouse pointer does not\n // overlap popup.\n var\n popupX = offsetX + parseInt( tile.html_elt.css(\"left\"), 10 ) - popup.width() / 2,\n popupY = offsetY + parseInt( tile.html_elt.css(\"top\"), 10 ) + 7;\n popup.css(\"left\", popupX + \"px\").css(\"top\", popupY + \"px\");\n }\n else if (!e.isPropagationStopped()) {\n // Propogate event to other tiles because overlapping tiles prevent mousemove from being\n // called on tiles under this tile.\n e.stopPropagation();\n $(this).siblings().each(function() {\n $(this).trigger(e);\n });\n }\n })\n .mouseleave(function() {\n $(this).parents(\".track-content\").children(\".overlay\").children(\".feature-popup\").remove();\n });\n */\n};\n\n/**\n * Tracks are objects can be added to the View.\n *\n * Track object hierarchy:\n * Track\n * -> LabelTrack\n * -> TiledTrack\n * ----> LineTrack\n * ----> ReferenceTrack\n * ----> FeatureTrack\n * -------> ReadTrack\n * ----> VariantTrack\n */\nvar Track = function(view, container, obj_dict) {\n // For now, track's container is always view.\n extend(obj_dict, {\n drag_handle_class: \"draghandle\"\n });\n Drawable.call(this, view, container, obj_dict);\n\n //\n // Attribute init.\n //\n\n // Set or create dataset.\n this.dataset = null;\n if (obj_dict.dataset) {\n // Dataset can be a Backbone model or a dict that can be used to create a model.\n this.dataset =\n obj_dict.dataset instanceof Backbone.Model ? obj_dict.dataset : new data.Dataset(obj_dict.dataset);\n }\n this.dataset_check_type = \"converted_datasets_state\";\n this.data_url_extra_params = {};\n this.data_query_wait = \"data_query_wait\" in obj_dict ? obj_dict.data_query_wait : DEFAULT_DATA_QUERY_WAIT;\n // A little ugly creating data manager right now due to transition to Backbone-based objects.\n this.data_manager =\n \"data_manager\" in obj_dict\n ? obj_dict.data_manager\n : new visualization.GenomeDataManager({\n dataset: this.dataset,\n // HACK: simulate 'genome' attributes from view for now.\n // View should eventually use Genome object.\n genome: new visualization.Genome({\n key: view.dbkey,\n chroms_info: {\n chrom_info: view.chrom_data\n }\n }),\n data_mode_compatible: this.data_and_mode_compatible,\n can_subset: this.can_subset\n });\n\n // Height attributes: min height, max height, and visible height.\n this.min_height_px = 16;\n this.max_height_px = 800;\n this.visible_height_px = this.config.get_value(\"height\");\n\n //\n // Create content div, which is where track is displayed, and add to container if available.\n //\n this.content_div = $(\"
\").appendTo(this.container_div);\n if (this.container) {\n this.container.content_div.append(this.container_div);\n if (!(\"resize\" in obj_dict) || obj_dict.resize) {\n this.add_resize_handle();\n }\n }\n};\n\nextend(Track.prototype, Drawable.prototype, {\n action_icons_def: [\n // Change track mode.\n {\n name: \"mode_icon\",\n title: \"Set display mode\",\n css_class: \"chevron-expand\",\n on_click_fn: function() {}\n },\n // Hide/show content.\n Drawable.prototype.action_icons_def[0],\n // Set track as overview.\n {\n name: \"overview_icon\",\n title: \"Set as overview\",\n css_class: \"application-dock-270\",\n on_click_fn: function(track) {\n track.view.set_overview(track);\n }\n },\n // Edit config.\n Drawable.prototype.action_icons_def[1],\n // Toggle track filters.\n {\n name: \"filters_icon\",\n title: \"Filters\",\n css_class: \"ui-slider-050\",\n on_click_fn: function(drawable) {\n // TODO: update Tooltip text.\n if (drawable.filters_manager.visible()) {\n drawable.filters_manager.clear_filters();\n } else {\n drawable.filters_manager.init_filters();\n }\n drawable.filters_manager.toggle();\n }\n },\n // Toggle track tool.\n {\n name: \"tools_icon\",\n title: \"Tool\",\n css_class: \"hammer\",\n on_click_fn: function(track) {\n // TODO: update Tooltip text.\n\n track.tool.toggle();\n\n // Update track name.\n if (track.tool.is_visible()) {\n track.set_name(track.config.get_value(\"name\") + track.tool_region_and_parameters_str());\n } else {\n track.revert_name();\n }\n // HACK: name change modifies icon placement, which leaves tooltip incorrectly placed.\n $(\".tooltip\").remove();\n }\n },\n // Go to parameter exploration visualization.\n {\n name: \"param_space_viz_icon\",\n title: \"Tool parameter space visualization\",\n css_class: \"arrow-split\",\n on_click_fn: function(track) {\n var html = `Tool:${track.tool.get(\n \"name\"\n )}
Dataset:${track.config.get_value(\n \"name\"\n )}
Region(s): `;\n\n var cancel_fn = () => {\n Galaxy.modal.hide();\n $(window).unbind(\"keypress.check_enter_esc\");\n };\n\n var ok_fn = () => {\n var regions_to_use = $('select[name=\"regions\"] option:selected').val(),\n regions,\n view_region = new visualization.GenomeRegion({\n chrom: view.chrom,\n start: view.low,\n end: view.high\n }),\n bookmarked_regions = _.map(\n $(\".bookmark\"),\n elt =>\n new visualization.GenomeRegion({\n from_str: $(elt)\n .children(\".position\")\n .text()\n })\n );\n\n // Get regions for visualization.\n if (regions_to_use === \"cur\") {\n // Use only current region.\n regions = [view_region];\n } else if (regions_to_use === \"bookmarks\") {\n // Use only bookmarks.\n regions = bookmarked_regions;\n } else {\n // Use both current region and bookmarks.\n regions = [view_region].concat(bookmarked_regions);\n }\n\n Galaxy.modal.hide();\n\n // Go to visualization.\n window.location.href = `${Galaxy.root}visualization/sweepster?${$.param({\n dataset_id: track.dataset.id,\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n regions: JSON.stringify(new Backbone.Collection(regions).toJSON())\n })}`;\n };\n\n var check_enter_esc = e => {\n if ((e.keyCode || e.which) === 27) {\n // Escape key\n cancel_fn();\n } else if ((e.keyCode || e.which) === 13) {\n // Enter key\n ok_fn();\n }\n };\n\n // show dialog\n Galaxy.modal.show({\n title: \"Visualize tool parameter space and output from different parameter settings?\",\n body: html,\n buttons: { No: cancel_fn, Yes: ok_fn }\n });\n }\n },\n // Remove track.\n Drawable.prototype.action_icons_def[2]\n ],\n\n can_draw: function() {\n return this.dataset && Drawable.prototype.can_draw.call(this);\n },\n\n build_container_div: function() {\n return $(\"
\")\n .addClass(\"track\")\n .attr(\"id\", `track_${this.id}`);\n },\n\n /**\n * Set track's dataset.\n */\n set_dataset: function(dataset) {\n this.dataset = dataset;\n this.data_manager.set(\"dataset\", dataset);\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function() {\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Add resizing handle to drawable's container_div.\n */\n add_resize_handle: function() {\n var track = this;\n var in_handle = false;\n var in_drag = false;\n var drag_control = $(\"
\");\n // Control shows on hover over track, stays while dragging\n $(track.container_div).hover(\n () => {\n if (track.config.get_value(\"content_visible\")) {\n in_handle = true;\n drag_control.show();\n }\n },\n () => {\n in_handle = false;\n if (!in_drag) {\n drag_control.hide();\n }\n }\n );\n // Update height and force redraw of current view while dragging,\n // clear cache to force redraw of other tiles.\n drag_control\n .hide()\n .bind(\"dragstart\", (e, d) => {\n in_drag = true;\n d.original_height = $(track.content_div).height();\n })\n .bind(\"drag\", (e, d) => {\n var new_height = Math.min(\n Math.max(d.original_height + d.deltaY, track.min_height_px),\n track.max_height_px\n );\n $(track.tiles_div).css(\"height\", new_height);\n track.visible_height_px = track.max_height_px === new_height ? 0 : new_height;\n track.on_resize();\n })\n .bind(\"dragend\", (e, d) => {\n track.tile_cache.clear();\n in_drag = false;\n if (!in_handle) {\n drag_control.hide();\n }\n track.config.set_value(\"height\", track.visible_height_px);\n track.changed();\n })\n .appendTo(track.container_div);\n },\n\n /**\n * Hide any elements that are part of the tracks contents area. Should\n * remove as approprite, the track will be redrawn by show_contents.\n */\n hide_contents: function() {\n // Hide tiles.\n this.tiles_div.hide();\n // Hide any y axis labels (common to several track types)\n this.container_div.find(\".yaxislabel, .track-resize\").hide();\n },\n\n show_contents: function() {\n // Show the contents div and labels (if present)\n this.tiles_div.show();\n this.container_div.find(\".yaxislabel, .track-resize\").show();\n // Request a redraw of the content\n this.request_draw();\n },\n\n /**\n * Returns track type.\n */\n get_type: function() {\n // Order is important: start with most-specific classes and go up the track hierarchy.\n if (this instanceof LabelTrack) {\n return \"LabelTrack\";\n } else if (this instanceof ReferenceTrack) {\n return \"ReferenceTrack\";\n } else if (this instanceof LineTrack) {\n return \"LineTrack\";\n } else if (this instanceof ReadTrack) {\n return \"ReadTrack\";\n } else if (this instanceof VariantTrack) {\n return \"VariantTrack\";\n } else if (this instanceof CompositeTrack) {\n return \"CompositeTrack\";\n } else if (this instanceof FeatureTrack) {\n return \"FeatureTrack\";\n }\n return \"\";\n },\n\n /**\n * Remove visualization content and display message.\n */\n show_message: function(msg_html) {\n this.tiles_div.remove();\n return $(\"\")\n .addClass(\"message\")\n .html(msg_html)\n .appendTo(this.content_div);\n },\n\n /**\n * Initialize and draw the track.\n */\n init: function(retry) {\n // FIXME: track should have a 'state' attribute that is checked on load; this state attribute should be\n // used in this function to determine what action(s) to take.\n\n var track = this;\n track.enabled = false;\n track.tile_cache.clear();\n track.data_manager.clear();\n /*\n if (!track.content_div.text()) {\n track.content_div.text(DATA_LOADING);\n }\n */\n // Remove old track content (e.g. tiles, messages).\n track.content_div.children().remove();\n track.container_div.removeClass(\"nodata error pending\");\n\n track.tiles_div = $(\"
\")\n .addClass(\"tiles\")\n .appendTo(track.content_div);\n\n //\n // Tracks with no dataset id are handled differently.\n // FIXME: is this really necessary?\n //\n if (!track.dataset.id) {\n return;\n }\n\n // Get dataset state; if state is fine, enable and draw track. Otherwise, show message\n // about track status.\n var init_deferred = $.Deferred();\n\n var params = {\n hda_ldda: track.dataset.get(\"hda_ldda\"),\n data_type: this.dataset_check_type,\n chrom: track.view.chrom,\n retry: retry\n };\n\n $.getJSON(this.dataset.url(), params, result => {\n if (!result || result === \"error\" || result.kind === \"error\") {\n // Dataset is in error state.\n track.container_div.addClass(\"error\");\n var msg_elt = track.show_message(DATA_ERROR);\n if (result.message) {\n // Add links to (a) show error and (b) try again.\n msg_elt.append(\n $(\"\")\n .text(\"View error\")\n .click(() => {\n Galaxy.modal.show({\n title: \"Trackster Error\",\n body: `
${result.message}
`,\n buttons: {\n Close: function() {\n Galaxy.modal.hide();\n }\n }\n });\n })\n );\n msg_elt.append($(\"\").text(\" \"));\n msg_elt.append(\n $(\"\")\n .text(\"Try again\")\n .click(() => {\n track.init(true);\n })\n );\n }\n } else if (result === \"no converter\") {\n track.container_div.addClass(\"error\");\n track.show_message(DATA_NOCONVERTER);\n } else if (\n result === \"no data\" ||\n (result.data !== undefined && (result.data === null || result.data.length === 0))\n ) {\n track.container_div.addClass(\"nodata\");\n track.show_message(DATA_NONE);\n } else if (result === \"pending\") {\n track.container_div.addClass(\"pending\");\n track.show_message(DATA_PENDING);\n //$(\"\").attr(\"src\", image_path + \"/yui/rel_interstitial_loading.gif\").appendTo(track.tiles_div);\n setTimeout(() => {\n track.init();\n }, track.data_query_wait);\n } else if (result === \"data\" || result.status === \"data\") {\n if (result.valid_chroms) {\n track.valid_chroms = result.valid_chroms;\n track.update_icons();\n }\n track.tiles_div.text(DATA_OK);\n if (track.view.chrom) {\n track.tiles_div.text(\"\");\n track.tiles_div.css(\"height\", `${track.visible_height_px}px`);\n track.enabled = true;\n // predraw_init may be asynchronous, wait for it and then draw\n $.when.apply($, track.predraw_init()).done(() => {\n init_deferred.resolve();\n track.container_div.removeClass(\"nodata error pending\");\n track.request_draw();\n });\n } else {\n init_deferred.resolve();\n }\n }\n });\n\n this.update_icons();\n return init_deferred;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {\n var track = this;\n return $.getJSON(\n track.dataset.url(),\n {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n },\n result => {\n var data = result.data;\n\n // Tracks may not have stat data either because there is no data or data is not yet ready.\n if (data && data.min !== undefined && data.max !== undefined) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update config, prefs\n track.config.set_default_value(\"min_value\", min_value);\n track.config.set_default_value(\"max_value\", max_value);\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n }\n );\n },\n\n /**\n * Returns all drawables in this drawable.\n */\n get_drawables: function() {\n return this;\n }\n});\n\nvar TiledTrack = function(view, container, obj_dict) {\n Track.call(this, view, container, obj_dict);\n\n var track = this;\n\n // Make track moveable.\n moveable(track.container_div, track.drag_handle_class, \".group\", track);\n\n // Attribute init.\n this.filters_manager = new filters_mod.FiltersManager(this, \"filters\" in obj_dict ? obj_dict.filters : null);\n // HACK: set filters manager for data manager.\n // FIXME: prolly need function to set filters and update data_manager reference.\n this.data_manager.set(\"filters_manager\", this.filters_manager);\n this.filters_available = false;\n this.tool = obj_dict.tool\n ? new TracksterTool(\n _.extend(obj_dict.tool, {\n track: this,\n tool_state: obj_dict.tool_state\n })\n )\n : null;\n this.tile_cache = new visualization.Cache(TILE_CACHE_SIZE);\n this.left_offset = 0;\n\n if (this.header_div) {\n //\n // Setup filters.\n //\n this.set_filters_manager(this.filters_manager);\n\n //\n // Create dynamic tool view.\n //\n if (this.tool) {\n var tool_view = new TracksterToolView({ model: this.tool });\n tool_view.render();\n this.dynamic_tool_div = tool_view.$el;\n this.header_div.after(this.dynamic_tool_div);\n }\n }\n\n // Add tiles_div, overlay_div to content_div.\n this.tiles_div = $(\"
\")\n .addClass(\"tiles\")\n .appendTo(this.content_div);\n if (!this.config.get_value(\"content_visible\")) {\n this.tiles_div.hide();\n }\n this.overlay_div = $(\"
\")\n .addClass(\"overlay\")\n .appendTo(this.content_div);\n\n if (obj_dict.mode) {\n this.change_mode(obj_dict.mode);\n }\n};\nextend(TiledTrack.prototype, Drawable.prototype, Track.prototype, {\n action_icons_def: Track.prototype.action_icons_def.concat([\n // Show more rows when all features are not slotted.\n {\n name: \"show_more_rows_icon\",\n title: \"To minimize track height, not all feature rows are displayed. Click to display more rows.\",\n css_class: \"exclamation\",\n on_click_fn: function(track) {\n $(\".tooltip\").remove();\n track.slotters[track.view.resolution_px_b].max_rows *= 2;\n track.request_draw({ clear_tile_cache: true });\n },\n hide: true\n }\n ]),\n\n /**\n * Returns a copy of the track. The copy uses the same data manager so that the tracks can share data.\n */\n copy: function(container) {\n // Create copy.\n var obj_dict = this.to_dict();\n extend(obj_dict, {\n data_manager: this.data_manager\n });\n var new_track = new this.constructor(this.view, container, obj_dict);\n // Misc. init and return.\n new_track.change_mode(this.mode);\n new_track.enabled = this.enabled;\n return new_track;\n },\n\n /**\n * Set filters manager + HTML elements.\n */\n set_filters_manager: function(filters_manager) {\n this.filters_manager = filters_manager;\n this.header_div.after(this.filters_manager.parent_div);\n },\n\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: function() {\n return {\n track_type: this.get_type(),\n dataset: {\n id: this.dataset.id,\n hda_ldda: this.dataset.get(\"hda_ldda\")\n },\n prefs: this.config.to_key_value_dict(),\n mode: this.mode,\n filters: this.filters_manager.to_dict(),\n tool_state: this.tool ? this.tool.state_dict() : {}\n };\n },\n\n /**\n * Set track bounds for current chromosome.\n */\n set_min_max: function() {\n var track = this;\n\n return $.getJSON(\n track.dataset.url(),\n {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n },\n result => {\n var data = result.data;\n if (\n isNaN(parseFloat(track.config.get_value(\"min_value\"))) ||\n isNaN(parseFloat(track.config.get_value(\"max_value\")))\n ) {\n // Compute default minimum and maximum values\n var min_value = data.min;\n\n var max_value = data.max;\n // If mean and sd are present, use them to compute a ~95% window\n // but only if it would shrink the range on one side\n min_value = Math.floor(Math.min(0, Math.max(min_value, data.mean - 2 * data.sd)));\n max_value = Math.ceil(Math.max(0, Math.min(max_value, data.mean + 2 * data.sd)));\n // Update the prefs\n track.config.set_value(\"min_value\", min_value);\n track.config.set_value(\"max_value\", max_value);\n }\n }\n );\n },\n\n /**\n * Change track's mode.\n */\n change_mode: function(new_mode) {\n var track = this;\n // TODO: is it necessary to store the mode in two places (.mode and track_config)?\n track.mode = new_mode;\n track.config.set_value(\"mode\", new_mode);\n // FIXME: find a better way to get Auto data w/o clearing cache; using mode in the\n // data manager would work if Auto data were checked for compatibility when a specific\n // mode is chosen.\n if (new_mode === \"Auto\") {\n this.data_manager.clear();\n }\n track.request_draw({ clear_tile_cache: true });\n this.action_icons.mode_icon.attr(\"title\", `Set display mode (now: ${track.mode})`);\n return track;\n },\n\n /**\n * Update track's buttons.\n */\n update_icons: function() {\n var track = this;\n\n //\n // Show/hide filter icon.\n //\n track.action_icons.filters_icon.toggle(track.filters_available);\n\n //\n // Show/hide tool icons.\n //\n track.action_icons.tools_icon.toggle(track.tool !== null);\n track.action_icons.param_space_viz_icon.toggle(track.tool !== null);\n },\n\n /**\n * Generate a key for the tile cache.\n * TODO: create a TileCache object (like DataCache) and generate key internally.\n */\n _gen_tile_cache_key: function(w_scale, tile_region) {\n return `${w_scale}_${tile_region}`;\n },\n\n /**\n * Request that track be drawn.\n */\n request_draw: function(options) {\n if (options && options.clear_tile_cache) {\n this.tile_cache.clear();\n }\n this.view.request_redraw(options, this);\n },\n\n /**\n * Actions to be taken before drawing.\n */\n before_draw: function() {\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n },\n\n /**\n * Draw track. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -clear_after: clear old tiles after drawing new tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n *\n * NOTE: this function should never be called directly; use request_draw() so that drawing\n * management can be used.\n */\n _draw: function(options) {\n if (!this.can_draw()) {\n return;\n }\n\n var clear_after = options && options.clear_after;\n var low = this.view.low;\n var high = this.view.high;\n var range = high - low;\n var width = this.view.container.width();\n var w_scale = this.view.resolution_px_b;\n var resolution = 1 / w_scale;\n\n // For overview, adjust high, low, resolution, and w_scale.\n if (this.is_overview) {\n low = this.view.max_low;\n high = this.view.max_high;\n w_scale = width / (view.max_high - view.max_low);\n resolution = 1 / w_scale;\n }\n\n this.before_draw();\n\n //\n // Method for moving and/or removing tiles:\n // (a) mark all elements for removal using class 'remove'\n // (b) during tile drawing/placement, remove class for elements that are moved;\n // this occurs in show_tile()\n // (c) after drawing tiles, remove elements still marked for removal\n // (i.e. that still have class 'remove').\n //\n\n // Step (a) for (re)moving tiles.\n this.tiles_div.children().addClass(\"remove\");\n\n var // Tile width in bases.\n tile_width = Math.floor(TILE_SIZE * resolution);\n\n var // Index of first tile that overlaps visible region.\n tile_index = Math.floor(low / tile_width);\n\n var tile_region;\n var tile_promise;\n var tile_promises = [];\n var tiles = [];\n // Draw tiles.\n while (tile_index * tile_width < high) {\n // Get tile region.\n tile_region = new visualization.GenomeRegion({\n chrom: this.view.chrom,\n start: tile_index * tile_width,\n // Tile high cannot be larger than view.max_high, which the chromosome length.\n end: Math.min((tile_index + 1) * tile_width, this.view.max_high)\n });\n tile_promise = this.draw_helper(tile_region, w_scale, options);\n tile_promises.push(tile_promise);\n $.when(tile_promise).then(tile => {\n tiles.push(tile);\n });\n\n // Go to next tile.\n tile_index += 1;\n }\n\n // Step (c) for (re)moving tiles when clear_after is false.\n if (!clear_after) {\n this.tiles_div\n .children(\".remove\")\n .removeClass(\"remove\")\n .remove();\n }\n\n // When all tiles are drawn, call post-draw actions.\n var track = this;\n $.when.apply($, tile_promises).then(() => {\n // Step (c) for (re)moving tiles when clear_after is true:\n track.tiles_div.children(\".remove\").remove();\n\n // Only do postdraw actions for tiles; instances where tiles may not be drawn include:\n // (a) ReferenceTrack without sufficient resolution;\n // (b) data_fetch = false.\n tiles = _.filter(tiles, t => t !== null);\n if (tiles.length !== 0) {\n track.postdraw_actions(tiles, width, w_scale, clear_after);\n }\n });\n },\n\n /**\n * Add a maximum/minimum label to track.\n */\n _add_yaxis_label: function(type, on_change) {\n var track = this;\n var css_class = type === \"max\" ? \"top\" : \"bottom\";\n var text = type === \"max\" ? \"max\" : \"min\";\n var pref_name = type === \"max\" ? \"max_value\" : \"min_value\";\n var label = this.container_div.find(`.yaxislabel.${css_class}`);\n var value = round(track.config.get_value(pref_name), 1);\n\n // Default action for on_change is to redraw track.\n on_change =\n on_change ||\n (() => {\n track.request_draw({ clear_tile_cache: true });\n });\n\n if (label.length !== 0) {\n // Label already exists, so update value.\n label.text(value);\n } else {\n // Add label.\n label = $(\"
\")\n .text(value)\n .make_text_editable({\n num_cols: 12,\n on_finish: function(new_val) {\n $(\".tooltip\").remove();\n track.config.set_value(pref_name, round(new_val, 1));\n on_change();\n },\n help_text: `Set ${text} value`\n })\n .addClass(`yaxislabel ${css_class}`)\n .css(\"color\", this.config.get_value(\"label_color\"));\n this.container_div.prepend(label);\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n var line_track_tiles = _.filter(tiles, tile => tile instanceof LineTrackTile);\n\n //\n // Take different actions depending on whether there are LineTrack/Coverage tiles.\n //\n\n if (line_track_tiles.length > 0) {\n // -- Drawing in Coverage mode. --\n\n // Clear because this is set when drawing.\n this.max_height_px = 0;\n var track = this;\n _.each(tiles, tile => {\n if (!(tile instanceof LineTrackTile)) {\n tile.html_elt.remove();\n track.draw_helper(tile.region, w_scale, {\n force: true,\n mode: \"Coverage\"\n });\n }\n });\n\n track._add_yaxis_label(\"max\");\n } else {\n // -- Drawing in non-Coverage mode. --\n\n // Remove Y-axis labels because there are no line track tiles.\n this.container_div.find(\".yaxislabel\").remove();\n\n //\n // If some tiles have icons, set padding of tiles without icons so features and rows align.\n //\n var icons_present = _.find(tiles, tile => tile.has_icons);\n\n if (icons_present) {\n _.each(tiles, tile => {\n if (!tile.has_icons) {\n // Need to align with other tile(s) that have icons.\n tile.html_elt.css(\"padding-top\", ERROR_PADDING);\n }\n });\n }\n }\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function(data) {\n return this.mode;\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function(display_mode) {\n // FIXME: needs to be implemented.\n },\n\n /**\n * Returns a list of drawables to draw. Defaults to current track.\n */\n _get_drawables: function() {\n return [this];\n },\n\n /**\n * Retrieves from cache, draws, or sets up drawing for a single tile. Returns either a Tile object or a\n * jQuery.Deferred object that is fulfilled when tile can be drawn again. Options include:\n * -force: force a redraw rather than use cached tiles (default: false)\n * -data_fetch: fetch data if necessary (default: true)\n */\n draw_helper: function(region, w_scale, options) {\n // Init options if necessary to avoid having to check if options defined.\n if (!options) {\n options = {};\n }\n\n var force = options.force;\n var mode = options.mode || this.mode;\n var resolution = 1 / w_scale;\n\n var // Useful vars.\n track = this;\n\n var drawables = this._get_drawables();\n var key = this._gen_tile_cache_key(w_scale, region);\n\n var is_tile = o => o && \"track\" in o;\n\n // Check tile cache, if found show existing tile in correct position\n var tile = force ? undefined : track.tile_cache.get_elt(key);\n if (tile) {\n if (is_tile(tile)) {\n track.show_tile(tile, w_scale);\n }\n return tile;\n }\n\n // If not fetching data, nothing more to do because data is needed to draw tile.\n if (options.data_fetch === false) {\n return null;\n }\n\n // Function that returns data/Deferreds needed to draw tile.\n var get_tile_data = () => {\n // HACK: if display mode (mode) is in continuous data modes, data mode must be coverage to get coverage data.\n var data_mode = _.find(CONTINUOUS_DATA_MODES, m => m === mode) ? \"Coverage\" : mode;\n\n // Map drawable object to data needed for drawing.\n var tile_data = _.map(drawables, (\n d // Get the track data/promise.\n ) => d.data_manager.get_data(region, data_mode, resolution, track.data_url_extra_params));\n\n // Get reference data/promise.\n if (view.reference_track) {\n tile_data.push(\n view.reference_track.data_manager.get_data(\n region,\n mode,\n resolution,\n view.reference_track.data_url_extra_params\n )\n );\n }\n\n return tile_data;\n };\n\n //\n // When data is available, draw tile.\n //\n var tile_drawn = $.Deferred();\n track.tile_cache.set_elt(key, tile_drawn);\n $.when.apply($, get_tile_data()).then(() => {\n var tile_data = get_tile_data();\n var tracks_data = tile_data;\n var seq_data;\n\n // Deferreds may show up here if trying to fetch a subset of data from a superset data chunk\n // that cannot be subsetted. This may occur if the superset has a message. If there is a\n // Deferred, try again from the top. NOTE: this condition could (should?) be handled by the\n // GenomeDataManager in visualization module.\n if (_.find(tile_data, d => util.is_deferred(d))) {\n track.tile_cache.set_elt(key, undefined);\n $.when(track.draw_helper(region, w_scale, options)).then(tile => {\n tile_drawn.resolve(tile);\n });\n return;\n }\n\n // If sequence data is available, subset to get only data in region.\n if (view.reference_track) {\n seq_data = view.reference_track.data_manager.subset_entry(tile_data.pop(), region);\n }\n\n // Get drawing modes, heights for all tracks.\n var drawing_modes = [];\n\n var drawing_heights = [];\n\n _.each(drawables, (d, i) => {\n var mode = d.mode;\n var data = tracks_data[i];\n if (mode === \"Auto\") {\n mode = d.get_mode(data);\n d.update_auto_mode(mode);\n }\n drawing_modes.push(mode);\n drawing_heights.push(d.get_canvas_height(data, mode, w_scale, width));\n });\n\n var canvas = track.view.canvas_manager.new_canvas();\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var all_data_index = 0;\n\n var width = Math.ceil((tile_high - tile_low) * w_scale) + track.left_offset;\n\n var height = _.max(drawing_heights);\n var tile;\n\n //\n // Draw all tracks on tile.\n //\n canvas.width = width;\n // Height is specified in options or is the height found above.\n canvas.height = options.height || height;\n var ctx = canvas.getContext(\"2d\");\n ctx.translate(track.left_offset, 0);\n if (drawables.length > 1) {\n ctx.globalAlpha = 0.5;\n ctx.globalCompositeOperation = \"source-over\";\n }\n _.each(drawables, (d, i) => {\n tile = d.draw_tile(tracks_data[i], ctx, drawing_modes[i], region, w_scale, seq_data);\n });\n\n // Don't cache, show if no tile.\n if (tile !== undefined) {\n track.tile_cache.set_elt(key, tile);\n track.show_tile(tile, w_scale);\n }\n\n tile_drawn.resolve(tile);\n });\n\n return tile_drawn;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function(result, mode, w_scale, canvas_width) {\n return this.visible_height_px;\n },\n\n /**\n * Draw line (bigwig) data onto tile.\n */\n _draw_line_track_tile: function(result, ctx, mode, region, w_scale) {\n // Set min/max if they are not already set.\n // FIXME: checking for different null/undefined/0 is messy; it would be nice to\n // standardize this.\n if ([undefined, null].indexOf(this.config.get_value(\"min_value\")) !== -1) {\n this.config.set_value(\"min_value\", 0);\n }\n if ([undefined, null, 0].indexOf(this.config.get_value(\"max_value\")) !== -1) {\n this.config.set_value(\"max_value\", _.max(_.map(result.data, d => d[1])) || 0);\n }\n\n var canvas = ctx.canvas;\n\n var painter = new painters.LinePainter(\n result.data,\n region.get(\"start\"),\n region.get(\"end\"),\n this.config.to_key_value_dict(),\n mode\n );\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new LineTrackTile(this, region, w_scale, canvas, result.data);\n },\n\n /**\n * Draw a track tile.\n * @param result result from server\n * @param ctx canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n */\n draw_tile: function(result, ctx, mode, region, w_scale, ref_seq) {},\n\n /**\n * Show track tile and perform associated actions. Showing tile may actually move\n * an existing tile rather than reshowing it.\n */\n show_tile: function(tile, w_scale) {\n var track = this;\n var tile_element = tile.html_elt;\n\n // -- Show/move tile element. --\n\n tile.predisplay_actions();\n\n // Position tile element based on current viewport.\n var left = Math.round((tile.low - (this.is_overview ? this.view.max_low : this.view.low)) * w_scale);\n if (this.left_offset) {\n left -= this.left_offset;\n }\n tile_element.css(\"left\", left);\n\n if (tile_element.hasClass(\"remove\")) {\n // Step (b) for (re)moving tiles. See _draw() function for description of algorithm\n // for removing tiles.\n tile_element.removeClass(\"remove\");\n } else {\n // Showing new tile.\n this.tiles_div.append(tile_element);\n }\n\n // -- Update track, tile heights based on new tile. --\n\n tile_element.css(\"height\", \"auto\");\n\n // Update max height based on current tile's height.\n // BUG/HACK: tile_element.height() returns a height that is always 2 pixels too big, so\n // -2 to get the correct height.\n this.max_height_px = Math.max(this.max_height_px, tile_element.height() - 2);\n\n // Update height for all tiles based on max height.\n tile_element\n .parent()\n .children()\n .css(\"height\", `${this.max_height_px}px`);\n\n // Update track height based on max height and visible height.\n var track_height = this.max_height_px;\n if (this.visible_height_px !== 0) {\n track_height = Math.min(this.max_height_px, this.visible_height_px);\n }\n this.tiles_div.css(\"height\", `${track_height}px`);\n },\n\n /**\n * Utility function that creates a label string describing the region and parameters of a track's tool.\n */\n tool_region_and_parameters_str: function(region) {\n var track = this;\n var region_str = region !== undefined ? region.toString() : \"all\";\n var param_str = _.values(track.tool.get_inputs_dict()).join(\", \");\n return ` - region=[${region_str}], parameters=[${param_str}]`;\n },\n\n /**\n * Returns true if data is compatible with a given mode.\n */\n data_and_mode_compatible: function(data, mode) {\n // Only handle modes that user can set.\n if (mode === \"Auto\") {\n return true;\n } else if (mode === \"Coverage\") {\n // Histogram mode requires bigwig data.\n return data.dataset_type === \"bigwig\";\n } else if (data.dataset_type === \"bigwig\" || data.extra_info === \"no_detail\") {\n // All other modes--Dense, Squish, Pack--require data + details.\n return false;\n } else {\n return true;\n }\n },\n\n /**\n * Returns true if entry can be subsetted.\n */\n can_subset: function(entry) {\n // Do not subset entries with a message or data with no detail.\n if (entry.message || entry.extra_info === \"no_detail\") {\n return false;\n } else if (entry.dataset_type === \"bigwig\") {\n // Subset only if data is single-bp resolution.\n return entry.data[1][0] - entry.data[0][0] === 1;\n }\n\n return true;\n },\n\n /**\n * Set up track to receive tool data.\n */\n init_for_tool_data: function() {\n // Set up track to fetch raw data rather than converted data.\n this.data_manager.set(\"data_type\", \"raw_data\");\n this.data_query_wait = 1000;\n this.dataset_check_type = \"state\";\n\n // FIXME: this is optional and is disabled for now because it creates\n // additional converter jobs without a clear benefit because indexing\n // such a small dataset provides little benefit.\n //\n // Set up one-time, post-draw to clear tool execution settings.\n //\n /*\n this.normal_postdraw_actions = this.postdraw_actions;\n this.postdraw_actions = function(tiles, width, w_scale, clear_after) {\n var self = this;\n\n // Do normal postdraw init.\n self.normal_postdraw_actions(tiles, width, w_scale, clear_after);\n\n // Tool-execution specific post-draw init:\n\n // Reset dataset check, wait time.\n self.dataset_check_type = 'converted_datasets_state';\n self.data_query_wait = DEFAULT_DATA_QUERY_WAIT;\n\n // Reset data URL when dataset indexing has completed/when not pending.\n var ss_deferred = new util.ServerStateDeferred({\n url: self.dataset_state_url,\n url_params: {dataset_id : self.dataset.id, hda_ldda: self.dataset.get('hda_ldda')},\n interval: self.data_query_wait,\n // Set up deferred to check dataset state until it is not pending.\n success_fn: function(result) { return result !== \"pending\"; }\n });\n $.when(ss_deferred.go()).then(function() {\n // Dataset is indexed, so use converted data.\n self.data_manager.set('data_type', 'data');\n });\n\n // Reset post-draw actions function.\n self.postdraw_actions = self.normal_postdraw_actions;\n };\n */\n }\n});\n\nvar LabelTrack = function(view, container) {\n Track.call(this, view, container, {\n resize: false,\n header: false\n });\n this.container_div.addClass(\"label-track\");\n};\nextend(LabelTrack.prototype, Track.prototype, {\n init: function() {\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {},\n\n _draw: function(options) {\n var view = this.view;\n var range = view.high - view.low;\n\n var tickDistance = Math.floor(Math.pow(10, Math.floor(Math.log(range) / Math.log(10))));\n\n var position = Math.floor(view.low / tickDistance) * tickDistance;\n var width = this.view.container.width();\n var new_div = $(\"
\").addClass(\"label-container\");\n while (position < view.high) {\n var screenPosition = Math.floor((position - view.low) / range * width);\n new_div.append(\n $(\"
\")\n .addClass(\"pos-label\")\n .text(util.commatize(position))\n .css({\n left: screenPosition\n })\n );\n position += tickDistance;\n }\n this.content_div.children(\":first\").remove();\n this.content_div.append(new_div);\n }\n});\n\n// FIXME: Composite tracks have code for showing composite tracks with line tracks and\n// composite tracks with line + feature tracks. It's probably best if different classes\n// are created for each type of composite track.\n\n/**\n * A tiled track composed of multiple other tracks. Composite tracks only work with\n * bigwig data for now.\n */\nvar CompositeTrack = function(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n\n // Init drawables; each drawable is a copy so that config/preferences\n // are independent of each other. Also init left offset.\n this.drawables = [];\n if (\"drawables\" in obj_dict) {\n var drawable;\n for (var i = 0; i < obj_dict.drawables.length; i++) {\n drawable = obj_dict.drawables[i];\n this.drawables[i] = object_from_template(drawable, view, null);\n\n // Track's left offset is the max of all tracks.\n if (drawable.left_offset > this.left_offset) {\n this.left_offset = drawable.left_offset;\n }\n }\n this.enabled = true;\n }\n\n // Set all feature tracks to use Coverage mode.\n _.each(this.drawables, d => {\n if (d instanceof FeatureTrack || d instanceof ReadTrack) {\n d.change_mode(\"Coverage\");\n }\n });\n\n this.update_icons();\n\n // HACK: needed for saving object for now. Need to generalize get_type() to all Drawables and use\n // that for object type.\n this.obj_type = \"CompositeTrack\";\n};\n\nextend(CompositeTrack.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }\n ]);\n },\n\n action_icons_def: [\n // Create composite track from group's tracks.\n {\n name: \"composite_icon\",\n title: \"Show individual tracks\",\n css_class: \"layers-stack\",\n on_click_fn: function(track) {\n $(\".tooltip\").remove();\n track.show_group();\n }\n }\n ].concat(TiledTrack.prototype.action_icons_def),\n\n // HACK: CompositeTrack should inherit from DrawableCollection as well.\n /**\n * Returns representation of object in a dictionary for easy saving.\n * Use from_dict to recreate object.\n */\n to_dict: DrawableCollection.prototype.to_dict,\n\n add_drawable: DrawableCollection.prototype.add_drawable,\n\n unpack_drawables: DrawableCollection.prototype.unpack_drawables,\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Action to take during resize.\n */\n on_resize: function() {\n // Propogate visible height to other tracks.\n var visible_height = this.visible_height_px;\n _.each(this.drawables, d => {\n d.visible_height_px = visible_height;\n });\n Track.prototype.on_resize.call(this);\n },\n\n /**\n * Change mode for all tracks.\n */\n change_mode: function(new_mode) {\n TiledTrack.prototype.change_mode.call(this, new_mode);\n for (var i = 0; i < this.drawables.length; i++) {\n this.drawables[i].change_mode(new_mode);\n }\n },\n\n /**\n * Initialize component tracks and draw composite track when all components are initialized.\n */\n init: function() {\n // Init components.\n var init_deferreds = [];\n for (var i = 0; i < this.drawables.length; i++) {\n init_deferreds.push(this.drawables[i].init());\n }\n\n // Draw composite when all tracks available.\n var track = this;\n $.when.apply($, init_deferreds).then(() => {\n track.enabled = true;\n track.request_draw();\n });\n },\n\n update_icons: function() {\n // For now, hide filters and tool.\n this.action_icons.filters_icon.hide();\n this.action_icons.tools_icon.hide();\n this.action_icons.param_space_viz_icon.hide();\n },\n\n can_draw: Drawable.prototype.can_draw,\n\n _get_drawables: function() {\n return this.drawables;\n },\n\n /**\n * Replace this track with group that includes individual tracks.\n */\n show_group: function() {\n // Create group with individual tracks.\n var group = new DrawableGroup(this.view, this.container, {\n name: this.config.get_value(\"name\")\n });\n\n var track;\n for (var i = 0; i < this.drawables.length; i++) {\n track = this.drawables[i];\n track.update_icons();\n group.add_drawable(track);\n track.container = group;\n group.content_div.append(track.container_div);\n }\n\n // Replace track with group.\n var index = this.container.replace_drawable(this, group, true);\n group.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions taken before drawing.\n */\n before_draw: function() {\n // FIXME: this is needed only if there are feature tracks in the composite track.\n // TiledTrack.prototype.before_draw.call(this);\n\n //\n // Set min, max for tracks to be largest min, max.\n //\n\n // Get smallest min, biggest max.\n var min = _.min(_.map(this.drawables, d => d.config.get_value(\"min_value\")));\n\n var max = _.max(_.map(this.drawables, d => d.config.get_value(\"max_value\")));\n\n this.config.set_value(\"min_value\", min);\n this.config.set_value(\"max_value\", max);\n\n // Set all tracks to smallest min, biggest max.\n _.each(this.drawables, d => {\n d.config.set_value(\"min_value\", min);\n d.config.set_value(\"max_value\", max);\n });\n },\n\n /**\n * Update minimum, maximum for component tracks.\n */\n update_all_min_max: function() {\n var track = this;\n var min_value = this.config.get_value(\"min_value\");\n var max_value = this.config.get_value(\"max_value\");\n _.each(this.drawables, d => {\n d.config.set_value(\"min_value\", min_value);\n d.config.set_value(\"max_value\", max_value);\n });\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n // All tiles must be the same height in order to draw LineTracks, so redraw tiles as needed.\n var max_height = -1;\n\n var i;\n for (i = 0; i < tiles.length; i++) {\n var height = tiles[i].html_elt.find(\"canvas\").height();\n if (height > max_height) {\n max_height = height;\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.html_elt.find(\"canvas\").height() !== max_height) {\n this.draw_helper(tile.region, w_scale, {\n force: true,\n height: max_height\n });\n tile.html_elt.remove();\n }\n }\n\n // Wrap function so that it can be called without object reference.\n var track = this;\n\n var t = () => {\n track.update_all_min_max();\n };\n\n // Add min, max labels.\n this._add_yaxis_label(\"min\", t);\n this._add_yaxis_label(\"max\", t);\n }\n});\n\n/**\n * Displays reference genome data.\n */\nvar ReferenceTrack = function(view) {\n TiledTrack.call(this, view, { content_div: view.top_labeltrack }, { resize: false, header: false });\n\n // Use offset to ensure that bases at tile edges are drawn.\n this.left_offset = view.canvas_manager.char_width_px;\n this.container_div.addClass(\"reference-track\");\n this.data_url = `${Galaxy.root}api/genomes/${this.view.dbkey}`;\n this.data_url_extra_params = { reference: true };\n this.data_manager = new visualization.GenomeReferenceDataManager({\n data_url: this.data_url,\n can_subset: this.can_subset\n });\n this.hide_contents();\n};\nextend(ReferenceTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"height\",\n type: \"int\",\n default_value: 13,\n hidden: true\n }\n ]);\n },\n\n init: function() {\n this.data_manager.clear();\n // Enable by default because there should always be data when drawing track.\n this.enabled = true;\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {},\n\n can_draw: Drawable.prototype.can_draw,\n\n /**\n * Draws and shows tile if reference data can be displayed; otherwise track is hidden.\n */\n draw_helper: function(region, w_scale, options) {\n var cur_visible = this.tiles_div.is(\":visible\");\n var new_visible;\n var tile = null;\n if (w_scale > this.view.canvas_manager.char_width_px) {\n this.tiles_div.show();\n new_visible = true;\n tile = TiledTrack.prototype.draw_helper.call(this, region, w_scale, options);\n } else {\n new_visible = false;\n this.tiles_div.hide();\n }\n\n // NOTE: viewport resizing conceptually belongs in postdraw_actions(), but currently\n // postdraw_actions is not called when reference track not shown due to no tiles. If\n // it is moved to postdraw_actions, resize must be called each time because cannot\n // easily detect showing/hiding.\n\n // If showing or hiding reference track, resize viewport.\n if (cur_visible !== new_visible) {\n this.view.resize_viewport();\n }\n\n return tile;\n },\n\n can_subset: function(entry) {\n return true;\n },\n\n /**\n * Draw ReferenceTrack tile.\n */\n draw_tile: function(data, ctx, mode, region, w_scale) {\n // Try to subset data.\n var subset = this.data_manager.subset_entry(data, region);\n\n var seq_data = subset.data;\n\n // Draw sequence data.\n var canvas = ctx.canvas;\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"center\";\n for (var c = 0, str_len = seq_data.length; c < str_len; c++) {\n ctx.fillStyle = this.view.get_base_color(seq_data[c]);\n ctx.fillText(seq_data[c], Math.floor(c * w_scale), 10);\n }\n return new Tile(this, region, w_scale, canvas, subset);\n }\n});\n\n/**\n * Track displays continuous/numerical data. Track expects position data in 1-based format, i.e. wiggle format.\n */\nvar LineTrack = function(view, container, obj_dict) {\n this.mode = \"Histogram\";\n TiledTrack.call(this, view, container, obj_dict);\n // Need left offset for drawing overlap near tile boundaries.\n this.left_offset = 30;\n\n // If server has byte-range support, use BBI data manager to read directly from the BBI file.\n // FIXME: there should be a flag to wait for this check to complete before loading the track.\n var self = this;\n $.when(supportsByteRanges(`${Galaxy.root}datasets/${this.dataset.id}/display`)).then(supportsByteRanges => {\n if (supportsByteRanges) {\n self.data_manager = new bbi.BBIDataManager({\n dataset: self.dataset\n });\n }\n });\n};\n\nextend(LineTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: CONTINUOUS_DATA_MODES,\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n { key: \"color\", label: \"Color\", type: \"color\" },\n {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"float\",\n default_value: undefined\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 30,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Actions to be taken before drawing.\n */\n // FIXME: can the default behavior be used; right now it breaks during resize.\n before_draw: function() {},\n\n /**\n * Draw track tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale) {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n },\n\n /**\n * Subset data only if data is at single-base pair resolution.\n */\n can_subset: function(entry) {\n return entry.data[1][0] - entry.data[0][0] === 1;\n },\n\n /**\n * Add min, max labels.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n // Add min, max labels.\n this._add_yaxis_label(\"max\");\n this._add_yaxis_label(\"min\");\n }\n});\n\n/**\n * Diagonal heatmap for showing interactions data.\n */\nvar DiagonalHeatmapTrack = function(view, container, obj_dict) {\n this.mode = \"Heatmap\";\n TiledTrack.call(this, view, container, obj_dict);\n};\n\nextend(DiagonalHeatmapTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Heatmap\"],\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"pos_color\",\n label: \"Positive Color\",\n type: \"color\",\n default_value: \"#FF8C00\"\n },\n {\n key: \"neg_color\",\n label: \"Negative Color\",\n type: \"color\",\n default_value: \"#4169E1\"\n },\n {\n key: \"min_value\",\n label: \"Min Value\",\n type: \"int\",\n default_value: undefined\n },\n {\n key: \"max_value\",\n label: \"Max Value\",\n type: \"int\",\n default_value: undefined\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 500,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {\n var track = this;\n return $.getJSON(\n track.dataset.url(),\n {\n data_type: \"data\",\n stats: true,\n chrom: track.view.chrom,\n low: 0,\n high: track.view.max_high,\n hda_ldda: track.dataset.get(\"hda_ldda\")\n },\n result => {\n var data = result.data;\n }\n );\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale) {\n // Paint onto canvas.\n var canvas = ctx.canvas;\n\n var painter = new painters.DiagonalHeatmapPainter(\n result.data,\n region.get(\"start\"),\n region.get(\"end\"),\n this.config.to_key_value_dict(),\n mode\n );\n\n painter.draw(ctx, canvas.width, canvas.height, w_scale);\n\n return new Tile(this, region, w_scale, canvas, result.data);\n }\n});\n\n/**\n * A track that displays features/regions. Track expects position data in BED format, i.e. 0-based, half-open.\n */\nvar FeatureTrack = function(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.container_div.addClass(\"feature-track\");\n this.summary_draw_height = 30;\n this.slotters = {};\n this.start_end_dct = {};\n this.left_offset = 200;\n\n // this.painter = painters.LinkedFeaturePainter;\n this.set_painter_from_config();\n};\nextend(FeatureTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"block_color\",\n label: \"Block color\",\n type: \"color\"\n },\n {\n key: \"reverse_strand_color\",\n label: \"Antisense strand color\",\n type: \"color\"\n },\n {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n },\n {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true,\n help: \"Show the number of items in each bin when drawing summary histogram\"\n },\n {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"connector_style\",\n label: \"Connector style\",\n type: \"select\",\n default_value: \"fishbones\",\n options: [\n {\n label: \"Line with arrows\",\n value: \"fishbone\"\n },\n { label: \"Arcs\", value: \"arcs\" }\n ]\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.set_painter_from_config();\n this.request_draw({ clear_tile_cache: true });\n },\n\n set_painter_from_config: function() {\n if (this.config.get_value(\"connector_style\") === \"arcs\") {\n this.painter = painters.ArcLinkedFeaturePainter;\n } else {\n this.painter = painters.LinkedFeaturePainter;\n }\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var track = this;\n var i;\n\n var line_track_tiles = _.filter(tiles, t => t instanceof LineTrackTile);\n\n //\n // Finish drawing of features that span multiple tiles. Features that span multiple tiles\n // are labeled incomplete on the tile level because they cannot be completely drawn.\n //\n if (line_track_tiles.length === 0) {\n // Gather incomplete features together.\n var all_incomplete_features = {};\n _.each(_.pluck(tiles, \"incomplete_features\"), inc_features => {\n _.each(inc_features, feature => {\n all_incomplete_features[feature[0]] = feature;\n });\n });\n\n // Draw incomplete features on each tile.\n var self = this;\n _.each(tiles, tile => {\n // Remove features already drawn on tile originally.\n var tile_incomplete_features = _.omit(\n all_incomplete_features,\n _.map(tile.incomplete_features, f => f[0])\n );\n\n // Remove features already drawn on tile in past postdraw actions.\n tile_incomplete_features = _.omit(tile_incomplete_features, _.keys(tile.other_tiles_features_drawn));\n\n // Draw tile's incomplete features.\n if (_.size(tile_incomplete_features) !== 0) {\n // To draw incomplete features, create new canvas, copy original canvas/tile onto new\n // canvas, and then draw incomplete features on the new canvas.\n var features = {\n data: _.values(tile_incomplete_features)\n };\n\n var new_canvas = self.view.canvas_manager.new_canvas();\n var new_canvas_ctx = new_canvas.getContext(\"2d\");\n new_canvas.height = Math.max(\n tile.canvas.height,\n self.get_canvas_height(features, tile.mode, tile.w_scale, 100)\n );\n new_canvas.width = tile.canvas.width;\n new_canvas_ctx.drawImage(tile.canvas, 0, 0);\n new_canvas_ctx.translate(track.left_offset, 0);\n var new_tile = self.draw_tile(\n features,\n new_canvas_ctx,\n tile.mode,\n tile.region,\n tile.w_scale,\n tile.seq_data\n );\n $(tile.canvas).replaceWith($(new_tile.canvas));\n tile.canvas = new_canvas;\n _.extend(tile.other_tiles_features_drawn, all_incomplete_features);\n }\n });\n }\n\n // If mode is Coverage and tiles do not share max, redraw tiles as necessary using new max.\n /*\n This code isn't used right now because Coverage mode uses predefined max in preferences.\n if (track.mode === \"Coverage\") {\n // Get global max.\n var global_max = -1;\n for (i = 0; i < tiles.length; i++) {\n var cur_max = tiles[i].max_val;\n if (cur_max > global_max) {\n global_max = cur_max;\n }\n }\n\n for (i = 0; i < tiles.length; i++) {\n var tile = tiles[i];\n if (tile.max_val !== global_max) {\n tile.html_elt.remove();\n track.draw_helper(tile.index, w_scale, { more_tile_data: { force: true, max: global_max } } );\n }\n }\n }\n */\n\n //\n // Update filter attributes, UI.\n //\n\n // Update filtering UI.\n if (track.filters_manager) {\n var filters = track.filters_manager.filters;\n var f;\n for (f = 0; f < filters.length; f++) {\n filters[f].update_ui_elt();\n }\n\n // Determine if filters are available; this is based on the tiles' data.\n // Criteria for filter to be available: (a) it is applicable to tile data and (b) filter min != filter max.\n var filters_available = false;\n\n var example_feature;\n var filter;\n for (i = 0; i < tiles.length; i++) {\n if (tiles[i].data.length) {\n example_feature = tiles[i].data[0];\n for (f = 0; f < filters.length; f++) {\n filter = filters[f];\n if (filter.applies_to(example_feature) && filter.min !== filter.max) {\n filters_available = true;\n break;\n }\n }\n }\n }\n\n // If filter availability changed, hide filter div if necessary and update menu.\n if (track.filters_available !== filters_available) {\n track.filters_available = filters_available;\n if (!track.filters_available) {\n track.filters_manager.hide();\n }\n track.update_icons();\n }\n }\n\n //\n // If not all features slotted, show icon for showing more rows (slots).\n //\n if (tiles[0] instanceof FeatureTrackTile) {\n var all_slotted = true;\n for (i = 0; i < tiles.length; i++) {\n if (!tiles[i].all_slotted) {\n all_slotted = false;\n break;\n }\n }\n this.action_icons.show_more_rows_icon.toggle(!all_slotted);\n } else {\n this.action_icons.show_more_rows_icon.hide();\n }\n },\n\n /**\n * Update track interface to show display mode being used.\n */\n update_auto_mode: function(mode) {\n if (this.mode === \"Auto\") {\n if (mode === \"no_detail\") {\n mode = \"feature spans\";\n }\n this.action_icons.mode_icon.attr(\"title\", `Set display mode (now: Auto/${mode})`);\n }\n },\n\n /**\n * Place features in slots for drawing (i.e. pack features).\n * this.slotters[level] is created in this method. this.slotters[level]\n * is a Slotter object. Returns the number of slots used to pack features.\n */\n incremental_slots: function(level, features, mode) {\n // Get/create incremental slots for level. If display mode changed,\n // need to create new slots.\n\n var dummy_context = this.view.canvas_manager.dummy_context;\n\n var slotter = this.slotters[level];\n if (!slotter || slotter.mode !== mode) {\n slotter = new slotting.FeatureSlotter(level, mode, MAX_FEATURE_DEPTH, x => dummy_context.measureText(x));\n this.slotters[level] = slotter;\n }\n\n return slotter.slot_features(features);\n },\n\n /**\n * Returns appropriate display mode based on data.\n */\n get_mode: function(data) {\n var mode;\n // HACK: use no_detail mode track is in overview to prevent overview from being too large.\n if (data.extra_info === \"no_detail\" || this.is_overview) {\n mode = \"no_detail\";\n } else {\n // Choose b/t Squish and Pack.\n // Proxy measures for using Squish:\n // (a) error message re: limiting number of features shown;\n // (b) X number of features shown;\n // (c) size of view shown.\n // TODO: cannot use (a) and (b) because it requires coordinating mode across tiles;\n // fix this so that tiles are redrawn as necessary to use the same mode.\n //if ( (result.message && result.message.match(/^Only the first [\\d]+/)) ||\n // (result.data && result.data.length > 2000) ||\n //var data = result.data;\n // if ( (data.length && data.length < 4) ||\n // (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) ) {\n if (this.view.high - this.view.low > MIN_SQUISH_VIEW_WIDTH) {\n mode = \"Squish\";\n } else {\n mode = \"Pack\";\n }\n }\n return mode;\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function(result, mode, w_scale, canvas_width) {\n if (mode === \"Coverage\" || result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // All other modes require slotting.\n var rows_required = this.incremental_slots(w_scale, result.data, mode);\n // HACK: use dummy painter to get required height. Painter should be extended so that get_required_height\n // works as a static function.\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return Math.max(this.min_height_px, dummy_painter.get_required_height(rows_required, canvas_width));\n }\n },\n\n /**\n * Draw FeatureTrack tile.\n * @param result result from server\n * @param cxt canvas context to draw on\n * @param mode mode to draw in\n * @param region region to draw on tile\n * @param w_scale pixels per base\n * @param ref_seq reference sequence data\n * @param cur_tile true if drawing is occurring on a currently visible tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale, ref_seq, cur_tile) {\n var track = this;\n var canvas = ctx.canvas;\n var tile_low = region.get(\"start\");\n var tile_high = region.get(\"end\");\n var left_offset = this.left_offset;\n\n // If data is line track data, draw line track tile.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, mode, region, w_scale);\n }\n\n // Handle row-by-row tracks\n\n // Preprocessing: filter features and determine whether all unfiltered features have been slotted.\n var filtered = [];\n\n var slots = this.slotters[w_scale].slots;\n var all_slotted = true;\n if (result.data) {\n var filters = this.filters_manager.filters;\n for (var i = 0, len = result.data.length; i < len; i++) {\n var feature = result.data[i];\n var hide_feature = false;\n var filter;\n for (var f = 0, flen = filters.length; f < flen; f++) {\n filter = filters[f];\n filter.update_attrs(feature);\n if (!filter.keep(feature)) {\n hide_feature = true;\n break;\n }\n }\n if (!hide_feature) {\n // Feature visible.\n filtered.push(feature);\n // Set flag if not slotted.\n if (!(feature[0] in slots)) {\n all_slotted = false;\n }\n }\n }\n }\n\n // Create painter.\n var filter_alpha_scaler = this.filters_manager.alpha_filter\n ? new FilterScaler(this.filters_manager.alpha_filter)\n : null;\n\n var filter_height_scaler = this.filters_manager.height_filter\n ? new FilterScaler(this.filters_manager.height_filter)\n : null;\n\n var painter = new this.painter(\n filtered,\n tile_low,\n tile_high,\n this.config.to_key_value_dict(),\n mode,\n filter_alpha_scaler,\n filter_height_scaler,\n // HACK: ref_seq only be defined for ReadTracks, and only the ReadPainter accepts that argument\n ref_seq,\n b => track.view.get_base_color(b)\n );\n\n var feature_mapper = null;\n\n ctx.fillStyle = this.config.get_value(\"block_color\");\n ctx.font = ctx.canvas.manager.default_font;\n ctx.textAlign = \"right\";\n\n if (result.data) {\n // Draw features.\n var draw_results = painter.draw(ctx, canvas.width, canvas.height, w_scale, slots);\n feature_mapper = draw_results.feature_mapper;\n incomplete_features = draw_results.incomplete_features;\n feature_mapper.translation = -left_offset;\n }\n\n // If not drawing on current tile, create new tile.\n if (!cur_tile) {\n return new FeatureTrackTile(\n track,\n region,\n w_scale,\n canvas,\n result.data,\n mode,\n result.message,\n all_slotted,\n feature_mapper,\n incomplete_features,\n ref_seq\n );\n }\n }\n});\n\n/**\n * Displays variant data.\n */\nvar VariantTrack = function(view, container, obj_dict) {\n TiledTrack.call(this, view, container, obj_dict);\n this.painter = painters.VariantPainter;\n this.summary_draw_height = 30;\n\n // Maximum resolution is ~45 pixels/base, so use this size left offset to ensure that full\n // variant is drawn when variant is at start of tile.\n this.left_offset = 30;\n};\n\nextend(VariantTrack.prototype, Drawable.prototype, TiledTrack.prototype, {\n display_modes: [\"Auto\", \"Coverage\", \"Dense\", \"Squish\", \"Pack\"],\n\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"color\",\n label: \"Histogram color\",\n type: \"color\"\n },\n {\n key: \"show_sample_data\",\n label: \"Show sample data\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"show_labels\",\n label: \"Show summary and sample labels\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"summary_height\",\n label: \"Locus summary height\",\n type: \"float\",\n default_value: 20\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n },\n\n /**\n * Draw tile.\n */\n draw_tile: function(result, ctx, mode, region, w_scale) {\n // Data could be coverage data or variant data.\n if (result.dataset_type === \"bigwig\") {\n return this._draw_line_track_tile(result, ctx, \"Histogram\", region, w_scale);\n } else {\n // result.dataset_type === 'variant'\n var view = this.view;\n\n var painter = new this.painter(\n result.data,\n region.get(\"start\"),\n region.get(\"end\"),\n this.config.to_key_value_dict(),\n mode,\n b => view.get_base_color(b)\n );\n\n painter.draw(ctx, ctx.canvas.width, ctx.canvas.height, w_scale);\n return new Tile(this, region, w_scale, ctx.canvas, result.data);\n }\n },\n\n /**\n * Returns canvas height needed to display data; return value is an integer that denotes the\n * number of pixels required.\n */\n get_canvas_height: function(result, mode, w_scale, canvas_width) {\n if (result.dataset_type === \"bigwig\") {\n return this.summary_draw_height;\n } else {\n // HACK: sample_names is not be defined when dataset definition is fetched before\n // dataset is complete (as is done when running tools). In that case, fall back on\n // # of samples in data. This can be fixed by re-requesting dataset definition\n // in init.\n var num_samples = this.dataset.get_metadata(\"sample_names\")\n ? this.dataset.get_metadata(\"sample_names\").length\n : 0;\n if (num_samples === 0 && result.data.length !== 0) {\n // Sample data is separated by commas, so this computes # of samples:\n num_samples = result.data[0][7].match(/,/g);\n if (num_samples === null) {\n num_samples = 1;\n } else {\n num_samples = num_samples.length + 1;\n }\n }\n\n var dummy_painter = new this.painter(null, null, null, this.config.to_key_value_dict(), mode);\n return dummy_painter.get_required_height(num_samples);\n }\n },\n\n /**\n * Additional initialization required before drawing track for the first time.\n */\n predraw_init: function() {\n var deferreds = [Track.prototype.predraw_init.call(this)];\n // FIXME: updating dataset metadata is only needed for visual analysis. Can\n // this be moved somewhere else?\n if (!this.dataset.get_metadata(\"sample_names\")) {\n deferreds.push(this.dataset.fetch());\n }\n return deferreds;\n },\n\n /**\n * Actions to be taken after draw has been completed. Draw is completed when all tiles have been\n * drawn/fetched and shown.\n */\n postdraw_actions: function(tiles, width, w_scale, clear_after) {\n TiledTrack.prototype.postdraw_actions.call(this, tiles, width, w_scale, clear_after);\n\n var line_track_tiles = _.filter(tiles, t => t instanceof LineTrackTile);\n\n // Add summary/sample labels if needed and not already included.\n var sample_names = this.dataset.get_metadata(\"sample_names\");\n if (\n line_track_tiles.length === 0 &&\n this.config.get_value(\"show_labels\") &&\n sample_names &&\n sample_names.length > 1\n ) {\n var font_size;\n\n // Add and/or style labels.\n if (this.container_div.find(\".yaxislabel.variant\").length === 0) {\n // Add summary and sample labels.\n\n // Add summary label to middle of summary area.\n font_size = this.config.get_value(\"summary_height\") / 2;\n this.tiles_div.prepend(\n $(\"
\")\n .text(\"Summary\")\n .addClass(\"yaxislabel variant top\")\n .css({\n \"font-size\": `${font_size}px`,\n top: `${(this.config.get_value(\"summary_height\") - font_size) / 2}px`\n })\n );\n\n // Show sample labels.\n if (this.config.get_value(\"show_sample_data\")) {\n var samples_div_html = sample_names.join(\"
\");\n\n this.tiles_div.prepend(\n $(\"
\")\n .html(samples_div_html)\n .addClass(\"yaxislabel variant top sample\")\n .css({\n top: this.config.get_value(\"summary_height\")\n })\n );\n }\n }\n\n // Style labels.\n\n // Match sample font size to mode.\n font_size = `${this.mode === \"Squish\" ? 5 : 10}px`;\n $(this.tiles_div)\n .find(\".sample\")\n .css({\n \"font-size\": font_size,\n \"line-height\": font_size\n });\n // Color labels to preference color.\n $(this.tiles_div)\n .find(\".yaxislabel\")\n .css(\"color\", this.config.get_value(\"label_color\"));\n } else {\n // Remove all labels.\n this.container_div.find(\".yaxislabel.variant\").remove();\n }\n }\n});\n\n/**\n * Track that displays mapped reads. Track expects position data in 1-based, closed format, i.e. SAM/BAM format.\n */\nvar ReadTrack = function(view, container, obj_dict) {\n FeatureTrack.call(this, view, container, obj_dict);\n this.painter = painters.ReadPainter;\n this.update_icons();\n};\n\nextend(ReadTrack.prototype, Drawable.prototype, TiledTrack.prototype, FeatureTrack.prototype, {\n build_config_params: function() {\n return _.union(Drawable.prototype.config_params, [\n {\n key: \"block_color\",\n label: \"Histogram color\",\n type: \"color\"\n },\n {\n key: \"detail_block_color\",\n label: \"Sense strand block color\",\n type: \"color\",\n default_value: \"#AAAAAA\"\n },\n {\n key: \"reverse_strand_color\",\n label: \"Antisense strand block color\",\n type: \"color\",\n default_value: \"#DDDDDD\"\n },\n {\n key: \"label_color\",\n label: \"Label color\",\n type: \"color\",\n default_value: \"black\"\n },\n {\n key: \"show_insertions\",\n label: \"Show insertions\",\n type: \"bool\",\n default_value: false\n },\n {\n key: \"show_differences\",\n label: \"Show differences only\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"show_counts\",\n label: \"Show summary counts\",\n type: \"bool\",\n default_value: true\n },\n {\n key: \"mode\",\n type: \"string\",\n default_value: this.mode,\n hidden: true\n },\n {\n key: \"min_value\",\n label: \"Histogram minimum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"max_value\",\n label: \"Histogram maximum\",\n type: \"float\",\n default_value: undefined,\n help: \"clear value to set automatically\"\n },\n {\n key: \"height\",\n type: \"int\",\n default_value: 0,\n hidden: true\n }\n ]);\n },\n\n config_onchange: function() {\n this.set_name(this.config.get_value(\"name\"));\n this.request_draw({ clear_tile_cache: true });\n }\n});\n\n/**\n * Objects that can be added to a view.\n */\nvar addable_objects = {\n CompositeTrack: CompositeTrack,\n DrawableGroup: DrawableGroup,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n FeatureTrack: FeatureTrack,\n LineTrack: LineTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n // For backward compatibility, map vcf track to variant.\n VcfTrack: VariantTrack\n};\n\n/**\n * Create new object from a template. A template can be either an object dictionary or an\n * object itself.\n */\nvar object_from_template = (template, view, container) => {\n if (\"copy\" in template) {\n // Template is an object.\n return template.copy(container);\n } else {\n // Template is a dictionary.\n var drawable_type = template.obj_type;\n // For backward compatibility:\n if (!drawable_type) {\n drawable_type = template.track_type;\n }\n return new addable_objects[drawable_type](view, container, template);\n }\n};\n\nexport default {\n TracksterView: TracksterView,\n DrawableGroup: DrawableGroup,\n LineTrack: LineTrack,\n FeatureTrack: FeatureTrack,\n DiagonalHeatmapTrack: DiagonalHeatmapTrack,\n ReadTrack: ReadTrack,\n VariantTrack: VariantTrack,\n CompositeTrack: CompositeTrack,\n object_from_template: object_from_template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/tracks.js","import * as _ from \"libs/underscore\";\n/**\n * View for track/group header.\n */\nvar TrackHeaderView = Backbone.View.extend({\n className: \"track-header\",\n\n initialize: function() {\n // Watch and update name changes.\n this.model.config.get(\"name\").on(\"change:value\", this.update_name, this);\n this.render();\n },\n\n render: function() {\n this.$el.append($(\"
\").addClass(this.model.drag_handle_class));\n this.$el.append(\n $(\"
\")\n .addClass(\"track-name\")\n .text(this.model.config.get_value(\"name\"))\n );\n\n // Icons container.\n this.action_icons = {};\n this.render_action_icons();\n\n // Suppress double clicks in header so that they do not impact viz under header.\n this.$el.dblclick(e => {\n e.stopPropagation();\n });\n\n // Needed for floating elts in header.\n this.$el.append($(\"
\"));\n },\n\n update_name: function() {\n this.$el.find(\".track-name\").text(this.model.config.get_value(\"name\"));\n },\n\n render_action_icons: function() {\n var self = this;\n this.icons_div = $(\"
\")\n .addClass(\"track-icons\")\n .hide()\n .appendTo(this.$el);\n _.each(this.model.action_icons_def, icon_dict => {\n self.add_action_icon(\n icon_dict.name,\n icon_dict.title,\n icon_dict.css_class,\n icon_dict.on_click_fn,\n icon_dict.prepend,\n icon_dict.hide\n );\n });\n\n // Set up behavior for modes popup.\n this.set_display_modes(this.model.display_modes);\n },\n\n /**\n * Add an action icon to this object. Appends icon unless prepend flag is specified.\n */\n add_action_icon: function(name, title, css_class, on_click_fn, prepend, hide) {\n var self = this;\n this.action_icons[name] = $(\"\")\n .attr(\"title\", title)\n .addClass(\"icon-button\")\n .addClass(css_class)\n .tooltip()\n .click(() => {\n on_click_fn(self.model);\n })\n .appendTo(this.icons_div);\n if (hide) {\n this.action_icons[name].hide();\n }\n },\n\n /**\n * Set track's modes and update mode icon popup.\n */\n set_display_modes: function(new_modes, init_mode) {\n if (!new_modes) {\n return;\n }\n\n // HACK: move this out of view and into track.\n\n // Set modes, init mode.\n this.model.display_modes = new_modes;\n this.model.mode = init_mode || this.model.config.get_value(\"mode\") || this.model.display_modes[0];\n\n this.action_icons.mode_icon.attr(\"title\", `Set display mode (now: ${this.mode})`);\n\n // Setup popup menu for changing modes.\n var self = this;\n\n var track = this.model;\n var mode_mapping = {};\n for (var i = 0, len = track.display_modes.length; i < len; i++) {\n var mode = track.display_modes[i];\n mode_mapping[mode] = (mode => () => {\n track.change_mode(mode);\n // HACK: the popup menu messes with the track's hover event, so manually show/hide\n // icons div for now.\n //self.icons_div.show();\n //track.container_div.mouseleave(function() { track.icons_div.hide(); } );\n })(mode);\n }\n\n make_popupmenu(this.action_icons.mode_icon, mode_mapping);\n }\n});\n\nexport default {\n TrackHeaderView: TrackHeaderView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/viz_views.js","import * as _ from \"libs/underscore\";\nvar extend = _.extend;\n\n// HACK: LABEL_SPACING is currently duplicated between here and painters\nvar LABEL_SPACING = 2;\n\nvar PACK_SPACING = 5;\n\n/**\n * Hold slotting information for a feature.\n */\nvar SlottedInfo = function(slot, feature) {\n this.slot = slot;\n this.feature = feature;\n};\n\n/**\n * FeatureSlotter determines slots in which to draw features for vertical\n * packing.\n *\n * This implementation is incremental, any feature assigned a slot will be\n * retained for slotting future features.\n */\nvar FeatureSlotter = function(w_scale, mode, max_rows, measureText) {\n this.slots = {};\n this.start_end_dct = {};\n this.w_scale = w_scale;\n this.mode = mode;\n this.include_label = mode === \"Pack\";\n this.max_rows = max_rows;\n this.measureText = measureText;\n};\n\n/**\n * Slot a set of features, `this.slots` will be updated with slots by id, and\n * the largest slot required for the passed set of features is returned\n */\nextend(FeatureSlotter.prototype, {\n /**\n * Get drawing coordinate for a feature.\n */\n _get_draw_coords: function(feature) {\n // Get initial draw coordinates using w_scale.\n var draw_start = Math.floor(feature[1] * this.w_scale);\n\n var draw_end = Math.ceil(feature[2] * this.w_scale);\n var f_name = feature[3];\n var text_align;\n\n // Update start, end drawing locations to include feature name.\n // Try to put the name on the left, if not, put on right.\n if (f_name !== undefined && this.include_label) {\n // Add gap for label spacing and extra pack space padding\n // TODO: Fix constants\n var text_len = this.measureText(f_name).width + (LABEL_SPACING + PACK_SPACING);\n if (draw_start - text_len >= 0) {\n draw_start -= text_len;\n text_align = \"left\";\n } else {\n draw_end += text_len;\n text_align = \"right\";\n }\n }\n\n /*\n if (slot_num < 0) {\n \n TODO: this is not yet working --\n console.log(feature_uid, \"looking for slot with text on the right\");\n // Slot not found. If text was on left, try on right and see\n // if slot can be found.\n // TODO: are there any checks we need to do to ensure that text\n // will fit on tile?\n if (text_align === \"left\") {\n draw_start -= text_len;\n draw_end -= text_len;\n text_align = \"right\";\n slot_num = find_slot(draw_start, draw_end);\n }\n if (slot_num >= 0) {\n console.log(feature_uid, \"found slot with text on the right\");\n }\n\n }\n */\n\n return [draw_start, draw_end];\n },\n\n /**\n * Find the first slot such that current feature doesn't overlap any other features in that slot.\n * Returns -1 if no slot was found.\n */\n _find_slot: function(draw_coords) {\n // TODO: Use a data structure for faster searching of available slots.\n var draw_start = draw_coords[0];\n\n var draw_end = draw_coords[1];\n for (var slot_num = 0; slot_num <= this.max_rows; slot_num++) {\n var has_overlap = false;\n var slot = this.start_end_dct[slot_num];\n if (slot !== undefined) {\n // Iterate through features already in slot to see if current feature will fit.\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n var s_e = slot[k];\n if (draw_end > s_e[0] && draw_start < s_e[1]) {\n // There is overlap\n has_overlap = true;\n break;\n }\n }\n }\n if (!has_overlap) {\n return slot_num;\n }\n }\n return -1;\n },\n\n /**\n * Slot features.\n */\n slot_features: function(features) {\n var start_end_dct = this.start_end_dct;\n var undone = [];\n var highest_slot = 0;\n var feature;\n var feature_uid;\n\n // Loop through features to (a) find those that are not yet slotted and (b) update\n // those that are slotted if new information is availabe. For (a), features already\n // slotted (based on slotting from other tiles) will retain their current slot.\n for (var i = 0, len = features.length; i < len; i++) {\n feature = features[i];\n feature_uid = feature[0];\n var slotted_info = this.slots[feature_uid];\n\n // Separate and handle slotted vs. unslotted features.\n if (slotted_info) {\n // Feature is slotted; if feature now has larger start/end coordinates,\n // update drawing coordinates.\n if (feature[1] < slotted_info.feature[1] || slotted_info.feature[2] < feature[2]) {\n // Feature has changed (e.g. a single read now has its pair), so recalculate its\n // drawing coordinates.\n var old_draw_coords = this._get_draw_coords(slotted_info.feature);\n\n var new_draw_coords = this._get_draw_coords(feature);\n var slotted_coords = this.start_end_dct[slotted_info.slot];\n for (var k = 0; k < slotted_coords.length; k++) {\n var dc = slotted_coords[k];\n if (dc[0] === old_draw_coords[0] && dc[1] === old_draw_coords[1]) {\n // Replace old drawing coordinates with new ones.\n slotted_coords[k] = new_draw_coords;\n }\n }\n }\n highest_slot = Math.max(highest_slot, this.slots[feature_uid].slot);\n } else {\n undone.push(i);\n }\n }\n\n // Slot unslotted features.\n\n // Do slotting.\n for (var i = 0, len = undone.length; i < len; i++) {\n feature = features[undone[i]];\n feature_uid = feature[0];\n var draw_coords = this._get_draw_coords(feature);\n\n // Find slot.\n var slot_num = this._find_slot(draw_coords);\n\n // Do slotting.\n if (slot_num >= 0) {\n // Add current feature to slot.\n if (start_end_dct[slot_num] === undefined) {\n start_end_dct[slot_num] = [];\n }\n start_end_dct[slot_num].push(draw_coords);\n this.slots[feature_uid] = new SlottedInfo(slot_num, feature);\n highest_slot = Math.max(highest_slot, slot_num);\n }\n }\n\n // Debugging: view slots data.\n /*\n for (var i = 0; i < MAX_FEATURE_DEPTH; i++) {\n var slot = start_end_dct[i];\n if (slot !== undefined) {\n console.log(i, \"*************\");\n for (var k = 0, k_len = slot.length; k < k_len; k++) {\n console.log(\"\\t\", slot[k][0], slot[k][1]);\n }\n }\n }\n */\n return highest_slot + 1;\n }\n});\n\nexport default {\n FeatureSlotter: FeatureSlotter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/slotting.js","import * as _ from \"libs/underscore\";\n\n/**\n * Compute the type of overlap between two regions. They are assumed to be on the same chrom/contig.\n * The overlap is computed relative to the second region; hence, OVERLAP_START indicates that the first\n * region overlaps the start (but not the end) of the second region.\n * NOTE: Coordinates are assumed to be in BED format: half open (start is closed, end is open).\n */\nvar BEFORE = 1001;\n\nvar CONTAINS = 1002;\nvar OVERLAP_START = 1003;\nvar OVERLAP_END = 1004;\nvar CONTAINED_BY = 1005;\nvar AFTER = 1006;\nvar compute_overlap = (first_region, second_region) => {\n var first_start = first_region[0];\n var first_end = first_region[1];\n var second_start = second_region[0];\n var second_end = second_region[1];\n var overlap;\n if (first_start < second_start) {\n if (first_end <= second_start) {\n overlap = BEFORE;\n } else if (first_end <= second_end) {\n overlap = OVERLAP_START;\n } else {\n // first_end > second_end\n overlap = CONTAINS;\n }\n } else {\n // first_start >= second_start\n if (first_start > second_end) {\n overlap = AFTER;\n } else if (first_end <= second_end) {\n overlap = CONTAINED_BY;\n } else {\n overlap = OVERLAP_END;\n }\n }\n\n return overlap;\n};\n\n/**\n * Returns true if regions overlap.\n */\nvar is_overlap = (first_region, second_region) => {\n var overlap = compute_overlap(first_region, second_region);\n return overlap !== BEFORE && overlap !== AFTER;\n};\n\n/**\n * Draw a dashed line on a canvas using filled rectangles. This function is based on:\n * http://vetruvet.blogspot.com/2010/10/drawing-dashed-lines-on-html5-canvas.html\n * However, that approach uses lines, which don't seem to render as well, so use\n * rectangles instead.\n */\nvar dashedLine = (ctx, x1, y1, x2, y2, dashLen) => {\n if (dashLen === undefined) {\n dashLen = 4;\n }\n var dX = x2 - x1;\n var dY = y2 - y1;\n var dashes = Math.floor(Math.sqrt(dX * dX + dY * dY) / dashLen);\n var dashX = dX / dashes;\n var dashY = dY / dashes;\n var q;\n\n for (q = 0; q < dashes; q++, x1 += dashX, y1 += dashY) {\n if (q % 2 !== 0) {\n continue;\n }\n ctx.fillRect(x1, y1, dashLen, 1);\n }\n};\n\n/**\n * Draw an isosceles triangle that points down.\n */\nvar drawDownwardEquilateralTriangle = function(ctx, down_vertex_x, down_vertex_y, side_len) {\n // Compute other two points of triangle.\n var x1 = down_vertex_x - side_len / 2;\n\n var x2 = down_vertex_x + side_len / 2;\n var y = down_vertex_y - Math.sqrt(side_len * 3 / 2);\n\n // Draw and fill.\n ctx.beginPath();\n ctx.moveTo(x1, y);\n ctx.lineTo(x2, y);\n ctx.lineTo(down_vertex_x, down_vertex_y);\n ctx.lineTo(x1, y);\n\n ctx.strokeStyle = this.fillStyle;\n ctx.fill();\n ctx.stroke();\n ctx.closePath();\n};\n\n/**\n * Base class for all scalers. Scalers produce values that are used to change (scale) drawing attributes.\n */\nvar Scaler = function(default_val) {\n this.default_val = default_val ? default_val : 1;\n};\n\n/**\n * Produce a scaling value.\n */\nScaler.prototype.gen_val = function(input) {\n return this.default_val;\n};\n\n/**\n * Results from painter.draw()\n */\nvar DrawResults = function(options) {\n this.incomplete_features = options.incomplete_features;\n this.feature_mapper = options.feature_mapper;\n};\n\n/**\n * Base class for painters\n *\n * -- Mode and prefs are both optional\n */\nvar Painter = function(data, view_start, view_end, prefs, mode) {\n // Data and data properties\n this.data = data;\n // View\n this.view_start = view_start;\n this.view_end = view_end;\n // Drawing prefs\n this.prefs = _.extend({}, this.default_prefs, prefs);\n this.mode = mode;\n};\n\nPainter.prototype.default_prefs = {};\n\n/**\n * Draw on the context using a rectangle of width x height using scale w_scale.\n */\nPainter.prototype.draw = (ctx, width, height, w_scale) => {};\n\n/**\n * Get starting drawing position, which is offset a half-base left of coordinate.\n */\nPainter.prototype.get_start_draw_pos = function(chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, -0.5);\n};\n\n/**\n * Get end drawing position, which is offset a half-base right of coordinate.\n */\nPainter.prototype.get_end_draw_pos = function(chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0.5);\n};\n\n/**\n * Get drawing position.\n */\nPainter.prototype.get_draw_pos = function(chrom_pos, w_scale) {\n return this._chrom_pos_to_draw_pos(chrom_pos, w_scale, 0);\n};\n\n/**\n * Convert chromosome position to drawing position.\n */\nPainter.prototype._chrom_pos_to_draw_pos = function(chrom_pos, w_scale, offset) {\n return Math.floor(w_scale * (Math.max(0, chrom_pos - this.view_start) + offset));\n};\n\nvar LinePainter = function(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n};\n\nLinePainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Histogram\",\n color: \"#000\",\n overflow_color: \"#F66\"\n};\n\nLinePainter.prototype.draw = function(ctx, width, height, w_scale) {\n var in_path = false;\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var vertical_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n\n ctx.save();\n\n // Pixel position of 0 on the y axis\n var y_zero = Math.round(height + min_value / vertical_range * height);\n\n // Horizontal line to denote x-axis\n if (mode !== \"Intensity\") {\n ctx.fillStyle = \"#aaa\";\n ctx.fillRect(0, y_zero, width, 1);\n }\n\n ctx.beginPath();\n var x_scaled;\n var y;\n var delta_x_pxs;\n if (data.length > 1) {\n delta_x_pxs = _.map(data.slice(0, -1), (d, i) => Math.ceil((data[i + 1][0] - data[i][0]) * w_scale));\n } else {\n delta_x_pxs = [10];\n }\n\n // Painter color can be in either block_color (FeatureTrack) or color pref (LineTrack).\n var painter_color = this.prefs.block_color || this.prefs.color;\n\n var // Extract RGB from preference color.\n pref_color = parseInt(painter_color.slice(1), 16);\n\n var pref_r = (pref_color & 0xff0000) >> 16;\n var pref_g = (pref_color & 0x00ff00) >> 8;\n var pref_b = pref_color & 0x0000ff;\n var top_overflow = false;\n var bot_overflow = false;\n\n // Paint track.\n var delta_x_px;\n for (var i = 0, len = data.length; i < len; i++) {\n // Reset attributes for next point.\n ctx.fillStyle = ctx.strokeStyle = painter_color;\n top_overflow = bot_overflow = false;\n delta_x_px = delta_x_pxs[i];\n\n x_scaled = Math.floor((data[i][0] - view_start - 0.5) * w_scale);\n y = data[i][1];\n\n // Process Y (scaler) value.\n if (y === null) {\n if (in_path && mode === \"Filled\") {\n ctx.lineTo(x_scaled, height_px);\n }\n in_path = false;\n continue;\n }\n\n // Bound Y value by min, max.\n if (y < min_value) {\n bot_overflow = true;\n y = min_value;\n } else if (y > max_value) {\n top_overflow = true;\n y = max_value;\n }\n\n // Draw point.\n if (mode === \"Histogram\") {\n // y becomes the bar height in pixels, which is the negated for canvas coords\n y = Math.round(y / vertical_range * height_px);\n ctx.fillRect(x_scaled, y_zero, delta_x_px, -y);\n } else if (mode === \"Intensity\") {\n var saturation = (y - min_value) / vertical_range;\n\n var // Range is [pref_color, 255] where saturation = 0 --> 255 and saturation = 1 --> pref color\n new_r = Math.round(pref_r + (255 - pref_r) * (1 - saturation));\n\n var new_g = Math.round(pref_g + (255 - pref_g) * (1 - saturation));\n var new_b = Math.round(pref_b + (255 - pref_b) * (1 - saturation));\n ctx.fillStyle = `rgb(${new_r},${new_g},${new_b})`;\n ctx.fillRect(x_scaled, 0, delta_x_px, height_px);\n } else {\n // mode is Coverage/Line or Filled.\n\n // Scale Y value.\n y = Math.round(height_px - (y - min_value) / vertical_range * height_px);\n if (in_path) {\n ctx.lineTo(x_scaled, y);\n } else {\n in_path = true;\n if (mode === \"Filled\") {\n ctx.moveTo(x_scaled, height_px);\n ctx.lineTo(x_scaled, y);\n } else {\n ctx.moveTo(x_scaled, y);\n // Use this approach (note: same as for filled) to draw line from 0 to\n // first data point.\n //ctx.moveTo(x_scaled, height_px);\n //ctx.lineTo(x_scaled, y);\n }\n }\n }\n\n // Draw lines at boundaries if overflowing min or max\n ctx.fillStyle = this.prefs.overflow_color;\n if (top_overflow || bot_overflow) {\n var overflow_x;\n if (mode === \"Histogram\" || mode === \"Intensity\") {\n overflow_x = delta_x_px;\n } else {\n // Line and Filled, which are points\n x_scaled -= 2; // Move it over to the left so it's centered on the point\n overflow_x = 4;\n }\n if (top_overflow) {\n ctx.fillRect(x_scaled, 0, overflow_x, 3);\n }\n if (bot_overflow) {\n ctx.fillRect(x_scaled, height_px - 3, overflow_x, 3);\n }\n }\n ctx.fillStyle = painter_color;\n }\n if (mode === \"Filled\") {\n if (in_path) {\n ctx.lineTo(x_scaled, y_zero);\n ctx.lineTo(0, y_zero);\n }\n ctx.fill();\n } else {\n ctx.stroke();\n }\n\n ctx.restore();\n};\n\n/**\n * Mapper that contains information about feature locations and data.\n */\nvar FeaturePositionMapper = function(slot_height) {\n this.feature_positions = {};\n this.slot_height = slot_height;\n this.translation = 0;\n this.y_translation = 0;\n};\n\n/**\n * Map feature data to a position defined by .\n */\nFeaturePositionMapper.prototype.map_feature_data = function(feature_data, slot, x_start, x_end) {\n if (!this.feature_positions[slot]) {\n this.feature_positions[slot] = [];\n }\n this.feature_positions[slot].push({\n data: feature_data,\n x_start: x_start,\n x_end: x_end\n });\n};\n\n/**\n * Get feature data for position \n */\nFeaturePositionMapper.prototype.get_feature_data = function(x, y) {\n // Find slot using Y.\n var slot = Math.floor((y - this.y_translation) / this.slot_height);\n\n var feature_dict;\n\n // May not be over a slot due to padding, margin, etc.\n if (!this.feature_positions[slot]) {\n return null;\n }\n\n // Find feature using X.\n x += this.translation;\n for (var i = 0; i < this.feature_positions[slot].length; i++) {\n feature_dict = this.feature_positions[slot][i];\n if (x >= feature_dict.x_start && x <= feature_dict.x_end) {\n return feature_dict.data;\n }\n }\n};\n\n/**\n * Abstract object for painting feature tracks. Subclasses must implement draw_element() for painting to work.\n * Painter uses a 0-based, half-open coordinate system; start coordinate is closed--included--and the end is open.\n * This coordinate system matches the BED format.\n */\nvar FeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.alpha_scaler = alpha_scaler ? alpha_scaler : new Scaler();\n this.height_scaler = height_scaler ? height_scaler : new Scaler();\n this.max_label_length = 200;\n};\n\nFeaturePainter.prototype.default_prefs = {\n block_color: \"#FFF\",\n connector_color: \"#FFF\"\n};\n\n_.extend(FeaturePainter.prototype, {\n get_required_height: function(rows_required, width) {\n // y_scale is the height per row\n var required_height = this.get_row_height();\n\n var y_scale = required_height;\n var mode = this.mode;\n // If using a packing mode, need to multiply by the number of slots used\n if (mode === \"no_detail\" || mode === \"Squish\" || mode === \"Pack\") {\n required_height = rows_required * y_scale;\n }\n return required_height + this.get_top_padding(width);\n },\n\n /** Extra padding before first row of features */\n get_top_padding: function(width) {\n return 0;\n },\n\n /**\n * Draw data on ctx using slots and within the rectangle defined by width and height. Returns\n * a FeaturePositionMapper object with information about where features were drawn.\n */\n draw: function(ctx, width, height, w_scale, slots) {\n var data = this.data;\n var view_start = this.view_start;\n var view_end = this.view_end;\n\n ctx.save();\n\n ctx.fillStyle = this.prefs.block_color;\n ctx.textAlign = \"right\";\n\n var y_scale = this.get_row_height();\n var feature_mapper = new FeaturePositionMapper(y_scale);\n var x_draw_coords;\n var incomplete_features = [];\n\n for (var i = 0, len = data.length; i < len; i++) {\n var feature = data[i];\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n\n var // Slot valid only if features are slotted and this feature is slotted;\n // feature may not be due to lack of space.\n slot = slots && slots[feature_uid] !== undefined ? slots[feature_uid].slot : null;\n\n // Draw feature if (a) mode is dense or feature is slotted (as it must be for all non-dense modes) and\n // (b) there's overlap between the feature and drawing region.\n if ((this.mode === \"Dense\" || slot !== null) && (feature_start < view_end && feature_end > view_start)) {\n x_draw_coords = this.draw_element(\n ctx,\n this.mode,\n feature,\n slot,\n view_start,\n view_end,\n w_scale,\n y_scale,\n width\n );\n feature_mapper.map_feature_data(feature, slot, x_draw_coords[0], x_draw_coords[1]);\n\n // Add to incomplete features if it's not drawn completely in region.\n if (feature_start < view_start || feature_end > view_end) {\n incomplete_features.push(feature);\n }\n }\n }\n\n ctx.restore();\n\n feature_mapper.y_translation = this.get_top_padding(width);\n return new DrawResults({\n incomplete_features: incomplete_features,\n feature_mapper: feature_mapper\n });\n },\n\n /**\n * Abstract function for drawing an individual feature.\n */\n draw_element: function(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n return [0, 0];\n }\n});\n\n// Constants specific to feature tracks moved here (HACKING, these should\n// basically all be configuration options)\nvar DENSE_TRACK_HEIGHT = 10;\n\nvar NO_DETAIL_TRACK_HEIGHT = 3;\nvar SQUISH_TRACK_HEIGHT = 5;\nvar PACK_TRACK_HEIGHT = 10;\nvar NO_DETAIL_FEATURE_HEIGHT = 1;\nvar DENSE_FEATURE_HEIGHT = 9;\nvar SQUISH_FEATURE_HEIGHT = 3;\nvar PACK_FEATURE_HEIGHT = 9;\nvar LABEL_SPACING = 2;\nvar CONNECTOR_COLOR = \"#ccc\";\n\nvar LinkedFeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Whether to draw a single connector in the background that spans the entire feature (the intron fishbone)\n this.draw_background_connector = true;\n // Whether to call draw_connector for every pair of blocks\n this.draw_individual_connectors = false;\n};\n\n_.extend(LinkedFeaturePainter.prototype, FeaturePainter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"no_detail\") {\n height = NO_DETAIL_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Draw a feature. Returns an array with feature's start and end X coordinates.\n */\n draw_element: function(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n var feature_uid = feature[0];\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n var feature_strand = feature[4];\n\n var // -0.5 to offset region between bases.\n f_start = Math.floor(Math.max(0, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var draw_start = f_start;\n var draw_end = f_end;\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale + this.get_top_padding(width);\n\n var thickness;\n var y_start;\n var thick_start = null;\n var thick_end = null;\n\n var // TODO: is there any reason why block, label color cannot be set at the Painter level?\n // For now, assume '.' === '+'\n block_color =\n !feature_strand || feature_strand === \"+\" || feature_strand === \".\"\n ? this.prefs.block_color\n : this.prefs.reverse_strand_color;\n\n var label_color = this.prefs.label_color;\n\n // Set global alpha.\n ctx.globalAlpha = this.alpha_scaler.gen_val(feature);\n\n // In dense mode, put all data in top slot.\n if (mode === \"Dense\") {\n slot = 1;\n }\n\n if (mode === \"no_detail\") {\n // No details for feature, so only one way to display.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 5, f_end - f_start, NO_DETAIL_FEATURE_HEIGHT);\n } else {\n // Mode is either Squish or Pack:\n // Feature details.\n var feature_ts = feature[5];\n\n var feature_te = feature[6];\n var feature_blocks = feature[7];\n\n var // Whether we are drawing full height or squished features\n full_height = true;\n\n if (feature_ts && feature_te) {\n thick_start = Math.floor(Math.max(0, (feature_ts - tile_low) * w_scale));\n thick_end = Math.ceil(Math.min(width, Math.max(0, (feature_te - tile_low) * w_scale)));\n }\n\n // Set vars that depend on mode.\n var thin_height;\n\n var thick_height;\n if (mode === \"Squish\") {\n thin_height = 1;\n thick_height = SQUISH_FEATURE_HEIGHT;\n full_height = false;\n } else if (mode === \"Dense\") {\n thin_height = 5;\n thick_height = DENSE_FEATURE_HEIGHT;\n } else {\n // mode === \"Pack\"\n thin_height = 5;\n thick_height = PACK_FEATURE_HEIGHT;\n }\n\n // Draw feature/feature blocks + connectors.\n if (!feature_blocks) {\n // If there are no blocks, treat the feature as one big exon.\n ctx.fillStyle = block_color;\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n // If strand is specified, draw arrows over feature\n if (feature_strand && full_height) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n ctx.fillRect(f_start, y_start + 1, f_end - f_start, thick_height);\n }\n } else {\n //\n // There are feature blocks and mode is either Squish or Pack.\n //\n // Approach: (a) draw whole feature as connector/intron and (b) draw blocks as\n // needed. This ensures that whole feature, regardless of whether it starts with\n // a block, is visible.\n //\n\n // Compute y axis start position and height\n var cur_y_start;\n\n var cur_height;\n if (mode === \"Squish\" || mode === \"Dense\") {\n cur_y_start = y_start + Math.floor(SQUISH_FEATURE_HEIGHT / 2) + 1;\n cur_height = 1;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n cur_y_start = y_start;\n cur_height = thick_height;\n } else {\n cur_y_start += SQUISH_FEATURE_HEIGHT / 2 + 1;\n cur_height = 1;\n }\n }\n\n // Draw whole feature as connector/intron.\n if (this.draw_background_connector) {\n if (mode === \"Squish\" || mode === \"Dense\") {\n ctx.fillStyle = CONNECTOR_COLOR;\n } else {\n // mode === \"Pack\"\n if (feature_strand) {\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand\");\n }\n } else {\n ctx.fillStyle = CONNECTOR_COLOR;\n }\n }\n ctx.fillRect(f_start, cur_y_start, f_end - f_start, cur_height);\n }\n\n // Draw blocks.\n var start_and_height;\n for (var k = 0, k_len = feature_blocks.length; k < k_len; k++) {\n var block = feature_blocks[k];\n\n var // -0.5 to offset block between bases.\n block_start = Math.floor(Math.max(0, (block[0] - tile_low - 0.5) * w_scale));\n\n var block_end = Math.ceil(Math.min(width, Math.max((block[1] - tile_low - 0.5) * w_scale)));\n\n var last_block_start;\n var last_block_end;\n\n // Skip drawing if block not on tile.\n if (block_start > block_end) {\n continue;\n }\n\n // Draw thin block.\n ctx.fillStyle = block_color;\n ctx.fillRect(\n block_start,\n y_start + (thick_height - thin_height) / 2 + 1,\n block_end - block_start,\n thin_height\n );\n\n // If block intersects with thick region, draw block as thick.\n // - No thick is sometimes encoded as thick_start == thick_end, so don't draw in that case\n if (\n thick_start !== undefined &&\n feature_te > feature_ts &&\n !(block_start > thick_end || block_end < thick_start)\n ) {\n var block_thick_start = Math.max(block_start, thick_start);\n\n var block_thick_end = Math.min(block_end, thick_end);\n ctx.fillRect(block_thick_start, y_start + 1, block_thick_end - block_thick_start, thick_height);\n if (feature_blocks.length === 1 && mode === \"Pack\") {\n // Exactly one block means we have no introns, but do have a distinct \"thick\" region,\n // draw arrows over it if in pack mode.\n if (feature_strand === \"+\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"right_strand_inv\");\n } else if (feature_strand === \"-\") {\n ctx.fillStyle = ctx.canvas.manager.get_pattern(\"left_strand_inv\");\n }\n // If region is wide enough in pixels, pad a bit\n if (block_thick_start + 14 < block_thick_end) {\n block_thick_start += 2;\n block_thick_end -= 2;\n }\n ctx.fillRect(\n block_thick_start,\n y_start + 1,\n block_thick_end - block_thick_start,\n thick_height\n );\n }\n }\n // Draw individual connectors if required\n if (this.draw_individual_connectors && last_block_start) {\n this.draw_connector(ctx, last_block_start, last_block_end, block_start, block_end, y_start);\n }\n last_block_start = block_start;\n last_block_end = block_end;\n }\n\n // FIXME: Height scaling only works in Pack mode right now.\n if (mode === \"Pack\") {\n // Reset alpha so height scaling is not impacted by alpha scaling.\n ctx.globalAlpha = 1;\n\n // Height scaling: draw white lines to reduce height according to height scale factor.\n ctx.fillStyle = \"white\"; // TODO: set this to background color.\n var hscale_factor = this.height_scaler.gen_val(feature);\n\n var // Ceil ensures that min height is >= 1.\n new_height = Math.ceil(thick_height * hscale_factor);\n\n var ws_height = Math.round((thick_height - new_height) / 2);\n if (hscale_factor !== 1) {\n ctx.fillRect(f_start, cur_y_start + 1, f_end - f_start, ws_height);\n ctx.fillRect(f_start, cur_y_start + thick_height - ws_height + 1, f_end - f_start, ws_height);\n }\n }\n }\n\n // Reset alpha so that label is not transparent.\n ctx.globalAlpha = 1;\n\n // Draw label for Pack mode.\n if (feature_name && mode === \"Pack\" && feature_start > tile_low) {\n ctx.fillStyle = label_color;\n // FIXME: assumption here that the entire view starts at 0\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_end += ctx.measureText(feature_name).width + LABEL_SPACING;\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 8, this.max_label_length);\n draw_start -= ctx.measureText(feature_name).width + LABEL_SPACING;\n }\n //ctx.fillStyle = block_color;\n }\n }\n\n // Reset global alpha.\n ctx.globalAlpha = 1;\n\n return [draw_start, draw_end];\n }\n});\n\nvar ReadPainter = function(\n data,\n view_start,\n view_end,\n prefs,\n mode,\n alpha_scaler,\n height_scaler,\n ref_seq,\n base_color_fn\n) {\n FeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n this.ref_seq = ref_seq ? ref_seq.data : null;\n this.base_color_fn = base_color_fn;\n};\n\n_.extend(ReadPainter.prototype, FeaturePainter.prototype, {\n /**\n * Returns height based on mode.\n */\n get_row_height: function() {\n var height;\n var mode = this.mode;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n if (this.prefs.show_insertions) {\n height *= 2;\n }\n }\n return height;\n },\n\n /**\n * Parse CIGAR string to get (a) a list of contiguous drawing blocks (MD=X) and\n * (b) an array of [ op_index, op_len ] pairs where op_index is an index into the\n * string 'MIDNSHP=X' Return value is a dictionary with two entries, blocks and cigar\n */\n _parse_cigar: function(cigar_str) {\n var cigar_ops = \"MIDNSHP=X\";\n\n // Parse cigar.\n var blocks = [[0, 0]];\n\n var cur_block = blocks[0];\n var base_pos = 0;\n\n var // Parse cigar operations out and update/create blocks as needed.\n parsed_cigar = _.map(cigar_str.match(/[0-9]+[MIDNSHP=X]/g), op => {\n // Get operation length, character.\n var op_len = parseInt(op.slice(0, -1), 10),\n op_char = op.slice(-1);\n\n // Update drawing block.\n if (op_char === \"N\") {\n // At skip, so need to start new block if current block represents\n // drawing area.\n if (cur_block[1] !== 0) {\n cur_block = [base_pos + op_len, base_pos + op_len];\n blocks.push(cur_block);\n }\n } else if (\"ISHP\".indexOf(op_char) === -1) {\n // Operation is M,D,=,X.\n cur_block[1] += op_len;\n base_pos += op_len;\n }\n\n // Return parsed cigar.\n return [cigar_ops.indexOf(op_char), op_len];\n });\n\n return {\n blocks: blocks,\n cigar: parsed_cigar\n };\n },\n\n /**\n * Draw a single read from reference-based read sequence and cigar.\n */\n draw_read: function(ctx, mode, w_scale, y_start, tile_low, tile_high, feature_start, cigar, strand, read_seq) {\n // Helper function to update base and sequnence offsets.\n var update_base_offset = (offset, cig_op, cig_len) => {\n if (\"M=NXD\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var update_seq_offset = (offset, cig_op, cig_len) => {\n if (\"IX\".indexOf(cig_op) !== -1) {\n offset += cig_len;\n }\n return offset;\n };\n\n var // Gets drawing coordinate for a sequence coordinate. Assumes closure variables w_scale and tile_low.\n get_draw_coord = (\n sequence_coord // -0.5 to offset sequence between bases.\n ) => Math.floor(Math.max(0, (sequence_coord - tile_low - 0.5) * w_scale));\n\n ctx.textAlign = \"center\";\n var tile_region = [tile_low, tile_high];\n var base_offset = 0;\n var seq_offset = 0;\n var gap = Math.round(w_scale / 2);\n var char_width_px = ctx.canvas.manager.char_width_px;\n\n var block_color = strand === \"+\" ? this.prefs.detail_block_color : this.prefs.reverse_strand_color;\n\n var pack_mode = mode === \"Pack\";\n\n var draw_height = pack_mode ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var rect_y = y_start + 1;\n var paint_utils = new ReadPainterUtils(ctx, draw_height, w_scale, mode);\n var drawing_blocks = [];\n var s_start;\n var s_end;\n\n // Keep list of items that need to be drawn on top of initial drawing layer.\n var draw_last = [];\n\n // Parse cigar and get drawing blocks.\n var t = this._parse_cigar(cigar);\n cigar = t.cigar;\n drawing_blocks = t.blocks;\n\n // Draw blocks.\n for (var i = 0; i < drawing_blocks.length; i++) {\n var block = drawing_blocks[i];\n\n if (is_overlap([feature_start + block[0], feature_start + block[1]], tile_region)) {\n s_start = get_draw_coord(feature_start + block[0]);\n s_end = get_draw_coord(feature_start + block[1]);\n\n // Make sure that block is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read base as rectangle.\n ctx.fillStyle = block_color;\n ctx.fillRect(s_start, rect_y, s_end - s_start, draw_height);\n }\n }\n\n // Draw read features.\n for (var cig_id = 0, len = cigar.length; cig_id < len; cig_id++) {\n var cig = cigar[cig_id];\n var cig_op = \"MIDNSHP=X\"[cig[0]];\n var cig_len = cig[1];\n\n var seq_start = feature_start + base_offset;\n s_start = get_draw_coord(seq_start);\n s_end = get_draw_coord(seq_start + cig_len);\n\n // Skip feature if it's not in tile.\n if (!is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n // Update offsets.\n base_offset = update_base_offset(base_offset, cig_op, cig_len);\n seq_offset = update_seq_offset(seq_offset, cig_op, cig_len);\n continue;\n }\n\n // Make sure that read is drawn even if it too small to be rendered officially; in this case,\n // read is drawn at 1px.\n // TODO: need to ensure that s_start, s_end are calculated the same for both slotting\n // and drawing.\n if (s_start === s_end) {\n s_end += 1;\n }\n\n // Draw read feature.\n switch (cig_op) {\n case \"H\": // Hard clipping.\n case \"S\": // Soft clipping.\n case \"P\": // Padding.\n // Sequence not present and not related to alignment; do nothing.\n break;\n case \"M\": // \"Match\".\n // Because it's not known whether there is a match, ignore.\n base_offset += cig_len;\n break;\n case \"=\": // Match with reference.\n case \"X\": // Mismatch with reference.\n //\n // Draw sequence and/or variants.\n //\n\n // Get sequence to draw.\n var cur_seq = \"\";\n if (cig_op === \"X\") {\n // Get sequence from read_seq.\n cur_seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n } else if (this.ref_seq) {\n // && cig_op === '='\n // Use reference sequence.\n cur_seq = this.ref_seq.slice(\n // If read starts after tile start, slice at read start.\n Math.max(0, seq_start - tile_low),\n // If read ends before tile end, slice at read end.\n Math.min(seq_start - tile_low + cig_len, tile_high - tile_low)\n );\n }\n\n // Draw sequence. Because cur_seq starts and read/tile start, go to there to start writing.\n var start_pos = Math.max(seq_start, tile_low);\n for (var c = 0; c < cur_seq.length; c++) {\n // Draw base if showing all (i.e. not showing differences) or there is a mismatch.\n if ((cur_seq && !this.prefs.show_differences) || cig_op === \"X\") {\n // Draw base.\n var c_start = Math.floor(Math.max(0, (start_pos + c - tile_low) * w_scale));\n ctx.fillStyle = this.base_color_fn(cur_seq[c]);\n if (pack_mode && w_scale > char_width_px) {\n ctx.fillText(cur_seq[c], c_start, y_start + 9);\n } else if (w_scale > 0.05) {\n // Require a minimum w_scale so that variants are only drawn when somewhat zoomed in.\n ctx.fillRect(c_start - gap, rect_y, Math.max(1, Math.round(w_scale)), draw_height);\n }\n }\n }\n\n // Move forward in sequence only if sequence used to get mismatches.\n if (cig_op === \"X\") {\n seq_offset += cig_len;\n }\n base_offset += cig_len;\n\n break;\n case \"N\": // Skipped bases.\n ctx.fillStyle = CONNECTOR_COLOR;\n ctx.fillRect(s_start, rect_y + (draw_height - 1) / 2, s_end - s_start, 1);\n // No change in seq_offset because sequence not used when skipping.\n base_offset += cig_len;\n break;\n case \"D\": // Deletion.\n paint_utils.draw_deletion(s_start, rect_y, cig_len);\n base_offset += cig_len;\n break;\n case \"I\": // Insertion.\n // Check to see if sequence should be drawn at all by looking at the overlap between\n // the sequence region and the tile region.\n var insert_x_coord = s_start - gap;\n\n if (is_overlap([seq_start, seq_start + cig_len], tile_region)) {\n var seq = read_seq.slice(seq_offset, seq_offset + cig_len);\n // Insertion point is between the sequence start and the previous base: (-gap) moves\n // back from sequence start to insertion point.\n if (this.prefs.show_insertions) {\n //\n // Show inserted sequence above, centered on insertion point.\n //\n\n // Draw sequence.\n // X center is offset + start - \n var x_center = s_start - (s_end - s_start) / 2;\n if (\n (mode === \"Pack\" || this.mode === \"Auto\") &&\n read_seq !== undefined &&\n w_scale > char_width_px\n ) {\n // Draw sequence container.\n ctx.fillStyle = \"yellow\";\n ctx.fillRect(x_center - gap, y_start - 9, s_end - s_start, 9);\n draw_last[draw_last.length] = {\n type: \"triangle\",\n data: [insert_x_coord, y_start + 4, 5]\n };\n ctx.fillStyle = CONNECTOR_COLOR;\n // Based on overlap b/t sequence and tile, get sequence to be drawn.\n switch (compute_overlap([seq_start, seq_start + cig_len], tile_region)) {\n case OVERLAP_START:\n seq = seq.slice(tile_low - seq_start);\n break;\n case OVERLAP_END:\n seq = seq.slice(0, seq_start - tile_high);\n break;\n case CONTAINED_BY:\n // All of sequence drawn.\n break;\n case CONTAINS:\n seq = seq.slice(tile_low - seq_start, seq_start - tile_high);\n break;\n }\n // Draw sequence.\n for (var c = 0, str_len = seq.length; c < str_len; c++) {\n var c_start = Math.floor(Math.max(0, (seq_start + c - tile_low) * w_scale));\n ctx.fillText(seq[c], c_start - (s_end - s_start) / 2, y_start);\n }\n } else {\n // Draw block.\n ctx.fillStyle = \"yellow\";\n // TODO: This is a pretty hack-ish way to fill rectangle based on mode.\n ctx.fillRect(\n x_center,\n y_start + (this.mode !== \"Dense\" ? 2 : 5),\n s_end - s_start,\n mode !== \"Dense\" ? SQUISH_FEATURE_HEIGHT : DENSE_FEATURE_HEIGHT\n );\n }\n } else {\n if (\n (mode === \"Pack\" || this.mode === \"Auto\") &&\n read_seq !== undefined &&\n w_scale > char_width_px\n ) {\n // Show insertions with a single number at the insertion point.\n draw_last.push({\n type: \"text\",\n data: [seq.length, insert_x_coord, y_start + 9]\n });\n } else {\n // TODO: probably can merge this case with code above.\n }\n }\n }\n seq_offset += cig_len;\n // No change to base offset because insertions are drawn above sequence/read.\n break;\n }\n }\n\n //\n // Draw last items.\n //\n ctx.fillStyle = \"yellow\";\n var item;\n var type;\n var data;\n for (var i = 0; i < draw_last.length; i++) {\n item = draw_last[i];\n type = item.type;\n data = item.data;\n if (type === \"text\") {\n ctx.save();\n ctx.font = `bold ${ctx.font}`;\n ctx.fillText(data[0], data[1], data[2]);\n ctx.restore();\n } else if (type === \"triangle\") {\n drawDownwardEquilateralTriangle(ctx, data[0], data[1], data[2]);\n }\n }\n },\n\n /**\n * Draw a complete read pair\n */\n draw_element: function(ctx, mode, feature, slot, tile_low, tile_high, w_scale, y_scale, width) {\n // All features need a start, end, and vertical center.\n var feature_uid = feature[0];\n\n var feature_start = feature[1];\n var feature_end = feature[2];\n var feature_name = feature[3];\n\n var // -0.5 to put element between bases.\n f_start = Math.floor(Math.max(-0.5 * w_scale, (feature_start - tile_low - 0.5) * w_scale));\n\n var f_end = Math.ceil(Math.min(width, Math.max(0, (feature_end - tile_low - 0.5) * w_scale)));\n\n var y_start = (mode === \"Dense\" ? 0 : 0 + slot) * y_scale;\n\n var draw_height = mode === \"Pack\" ? PACK_FEATURE_HEIGHT : SQUISH_FEATURE_HEIGHT;\n\n var label_color = this.prefs.label_color;\n\n // Draw read.\n if (feature[5] instanceof Array) {\n // Read is paired.\n var connector = true;\n\n // Draw left/forward read.\n if (feature[4][1] >= tile_low && feature[4][0] <= tile_high && feature[4][2]) {\n this.draw_read(\n ctx,\n mode,\n w_scale,\n y_start,\n tile_low,\n tile_high,\n feature[4][0],\n feature[4][2],\n feature[4][3],\n feature[4][4]\n );\n } else {\n connector = false;\n }\n\n // Draw right/reverse read.\n if (feature[5][1] >= tile_low && feature[5][0] <= tile_high && feature[5][2]) {\n this.draw_read(\n ctx,\n mode,\n w_scale,\n y_start,\n tile_low,\n tile_high,\n feature[5][0],\n feature[5][2],\n feature[5][3],\n feature[5][4]\n );\n } else {\n connector = false;\n }\n\n // Draw connector if both reads were drawn.\n // TODO: currently, there is no way to connect reads drawn on different tiles; to connect reads on different tiles, data manager\n // code is needed to join mate pairs from different regions. Alternatively, requesting multiple regions of data at once would\n // make it possible to put together more easily.\n // -0.5 to position connector correctly between reads.\n var b1_end = Math.ceil(\n Math.min(width, Math.max(-0.5 * w_scale, (feature[4][1] - tile_low - 0.5) * w_scale))\n );\n\n var b2_start = Math.floor(Math.max(-0.5 * w_scale, (feature[5][0] - tile_low - 0.5) * w_scale));\n\n if (connector && b2_start > b1_end) {\n ctx.fillStyle = CONNECTOR_COLOR;\n var line_height = y_start + 1 + (draw_height - 1) / 2;\n dashedLine(ctx, b1_end, line_height, b2_start, line_height);\n }\n } else {\n // Read is single.\n this.draw_read(\n ctx,\n mode,\n w_scale,\n y_start,\n tile_low,\n tile_high,\n feature_start,\n feature[4],\n feature[5],\n feature[6]\n );\n }\n if (mode === \"Pack\" && feature_start >= tile_low && feature_name !== \".\") {\n // Draw label.\n ctx.fillStyle = this.prefs.label_color;\n if (tile_low === 0 && f_start - ctx.measureText(feature_name).width < 0) {\n ctx.textAlign = \"left\";\n ctx.fillText(feature_name, f_end + LABEL_SPACING, y_start + 9, this.max_label_length);\n } else {\n ctx.textAlign = \"right\";\n ctx.fillText(feature_name, f_start - LABEL_SPACING, y_start + 9, this.max_label_length);\n }\n }\n\n // FIXME: provide actual coordinates for drawn read.\n return [0, 0];\n }\n});\n\nvar ArcLinkedFeaturePainter = function(data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler) {\n LinkedFeaturePainter.call(this, data, view_start, view_end, prefs, mode, alpha_scaler, height_scaler);\n // Need to know the longest feature length for adding spacing\n this.longest_feature_length = this.calculate_longest_feature_length();\n this.draw_background_connector = false;\n this.draw_individual_connectors = true;\n};\n\n_.extend(ArcLinkedFeaturePainter.prototype, FeaturePainter.prototype, LinkedFeaturePainter.prototype, {\n calculate_longest_feature_length: function() {\n var longest_feature_length = 0;\n for (var i = 0, len = this.data.length; i < len; i++) {\n var feature = this.data[i];\n var feature_start = feature[1];\n var feature_end = feature[2];\n longest_feature_length = Math.max(longest_feature_length, feature_end - feature_start);\n }\n return longest_feature_length;\n },\n\n get_top_padding: function(width) {\n var view_range = this.view_end - this.view_start;\n var w_scale = width / view_range;\n return Math.min(128, Math.ceil(this.longest_feature_length / 2 * w_scale));\n },\n\n draw_connector: function(ctx, block1_start, block1_end, block2_start, block2_end, y_start) {\n // Arc drawing -- from closest endpoints\n var x_center = (block1_end + block2_start) / 2;\n\n var radius = block2_start - x_center;\n\n // For full half circles\n var angle1 = Math.PI;\n\n var angle2 = 0;\n if (radius > 0) {\n ctx.beginPath();\n ctx.arc(x_center, y_start, block2_start - x_center, Math.PI, 0);\n ctx.stroke();\n }\n }\n});\n\n// Color stuff from less.js\n\nvar Color = function(rgb, a) {\n /**\n * The end goal here, is to parse the arguments\n * into an integer triplet, such as `128, 255, 0`\n *\n * This facilitates operations and conversions.\n */\n if (Array.isArray(rgb)) {\n this.rgb = rgb;\n } else if (rgb.length == 6) {\n this.rgb = rgb.match(/.{2}/g).map(c => parseInt(c, 16));\n } else if (rgb.length == 7) {\n this.rgb = rgb\n .substring(1, 7)\n .match(/.{2}/g)\n .map(c => parseInt(c, 16));\n } else {\n this.rgb = rgb.split(\"\").map(c => parseInt(c + c, 16));\n }\n this.alpha = typeof a === \"number\" ? a : 1;\n};\nColor.prototype = {\n eval: function() {\n return this;\n },\n\n //\n // If we have some transparency, the only way to represent it\n // is via `rgba`. Otherwise, we use the hex representation,\n // which has better compatibility with older browsers.\n // Values are capped between `0` and `255`, rounded and zero-padded.\n //\n toCSS: function() {\n if (this.alpha < 1.0) {\n return `rgba(${this.rgb\n .map(c => Math.round(c))\n .concat(this.alpha)\n .join(\", \")})`;\n } else {\n return `#${this.rgb\n .map(i => {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? `0${i}` : i;\n })\n .join(\"\")}`;\n }\n },\n\n toHSL: function() {\n var r = this.rgb[0] / 255;\n var g = this.rgb[1] / 255;\n var b = this.rgb[2] / 255;\n var a = this.alpha;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n var d = max - min;\n\n if (max === min) {\n h = s = 0;\n } else {\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: h * 360, s: s, l: l, a: a };\n },\n\n toARGB: function() {\n var argb = [Math.round(this.alpha * 255)].concat(this.rgb);\n return `#${argb\n .map(i => {\n i = Math.round(i);\n i = (i > 255 ? 255 : i < 0 ? 0 : i).toString(16);\n return i.length === 1 ? `0${i}` : i;\n })\n .join(\"\")}`;\n },\n\n mix: function(color2, weight) {\n var color1 = this;\n\n var p = weight; // .value / 100.0;\n var w = p * 2 - 1;\n var a = color1.toHSL().a - color2.toHSL().a;\n\n var w1 = ((w * a == -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n var w2 = 1 - w1;\n\n var rgb = [\n color1.rgb[0] * w1 + color2.rgb[0] * w2,\n color1.rgb[1] * w1 + color2.rgb[1] * w2,\n color1.rgb[2] * w1 + color2.rgb[2] * w2\n ];\n\n var alpha = color1.alpha * p + color2.alpha * (1 - p);\n\n return new Color(rgb, alpha);\n }\n};\n\n// End colors from less.js\n\nvar LinearRamp = function(start_color, end_color, start_value, end_value) {\n /**\n * Simple linear gradient\n */\n this.start_color = new Color(start_color);\n this.end_color = new Color(end_color);\n this.start_value = start_value;\n this.end_value = end_value;\n this.value_range = end_value - start_value;\n};\n\nLinearRamp.prototype.map_value = function(value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n value = (value - this.start_value) / this.value_range;\n // HACK: just red for now\n // return \"hsl(0,100%,\" + (value * 100) + \"%)\"\n return this.start_color.mix(this.end_color, 1 - value).toCSS();\n};\n\nvar SplitRamp = function(start_color, middle_color, end_color, start_value, end_value) {\n /**\n * Two gradients split away from 0\n */\n this.positive_ramp = new LinearRamp(middle_color, end_color, 0, end_value);\n this.negative_ramp = new LinearRamp(middle_color, start_color, 0, -start_value);\n this.start_value = start_value;\n this.end_value = end_value;\n};\n\nSplitRamp.prototype.map_value = function(value) {\n value = Math.max(value, this.start_value);\n value = Math.min(value, this.end_value);\n if (value >= 0) {\n return this.positive_ramp.map_value(value);\n } else {\n return this.negative_ramp.map_value(-value);\n }\n};\n\nvar DiagonalHeatmapPainter = function(data, view_start, view_end, prefs, mode) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n var i;\n var len;\n\n if (this.prefs.min_value === undefined) {\n var min_value = Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n min_value = Math.min(min_value, this.data[i][6]);\n }\n this.prefs.min_value = min_value;\n }\n if (this.prefs.max_value === undefined) {\n var max_value = -Infinity;\n for (i = 0, len = this.data.length; i < len; i++) {\n max_value = Math.max(max_value, this.data[i][6]);\n }\n this.prefs.max_value = max_value;\n }\n};\n\nDiagonalHeatmapPainter.prototype.default_prefs = {\n min_value: undefined,\n max_value: undefined,\n mode: \"Heatmap\",\n pos_color: \"#FF8C00\",\n neg_color: \"#4169E1\"\n};\n\nDiagonalHeatmapPainter.prototype.draw = function(ctx, width, height, w_scale) {\n var min_value = this.prefs.min_value;\n var max_value = this.prefs.max_value;\n var value_range = max_value - min_value;\n var height_px = height;\n var view_start = this.view_start;\n var mode = this.mode;\n var data = this.data;\n var invsqrt2 = 1 / Math.sqrt(2);\n\n var ramp = new SplitRamp(this.prefs.neg_color, \"#FFFFFF\", this.prefs.pos_color, min_value, max_value);\n\n var d;\n var s1;\n var e1;\n var s2;\n var e2;\n var value;\n\n var scale = p => (p - view_start) * w_scale;\n\n ctx.save();\n\n // Draw into triangle, then rotate and scale\n ctx.rotate(-45 * Math.PI / 180);\n ctx.scale(invsqrt2, invsqrt2);\n\n // Paint track.\n for (var i = 0, len = data.length; i < len; i++) {\n d = data[i];\n\n s1 = scale(d[1]);\n e1 = scale(d[2]);\n s2 = scale(d[4]);\n e2 = scale(d[5]);\n value = d[6];\n\n ctx.fillStyle = ramp.map_value(value);\n ctx.fillRect(s1, s2, e1 - s1, e2 - s2);\n }\n\n ctx.restore();\n};\n\n/**\n * Utilities for painting reads.\n */\nvar ReadPainterUtils = function(ctx, row_height, px_per_base, mode) {\n this.ctx = ctx;\n this.row_height = row_height;\n this.px_per_base = px_per_base;\n this.draw_details = (mode === \"Pack\" || mode === \"Auto\") && px_per_base >= ctx.canvas.manager.char_width_px;\n this.delete_details_thickness = 0.2;\n};\n\n_.extend(ReadPainterUtils.prototype, {\n /**\n * Draw deletion of base(s).\n * @param draw_detail if true, drawing in detail and deletion is drawn more subtly\n */\n draw_deletion: function(x, y, len) {\n this.ctx.fillStyle = \"black\";\n var thickness = (this.draw_details ? this.delete_details_thickness : 1) * this.row_height;\n y += 0.5 * (this.row_height - thickness);\n this.ctx.fillRect(x, y, len * this.px_per_base, thickness);\n }\n});\n\n/**\n * Paints variant data onto canvas.\n */\nvar VariantPainter = function(data, view_start, view_end, prefs, mode, base_color_fn) {\n Painter.call(this, data, view_start, view_end, prefs, mode);\n this.base_color_fn = base_color_fn;\n this.divider_height = 1;\n};\n\n_.extend(VariantPainter.prototype, Painter.prototype, {\n /**\n * Height of a single row, depends on mode\n */\n get_row_height: function() {\n var mode = this.mode;\n var height;\n if (mode === \"Dense\") {\n height = DENSE_TRACK_HEIGHT;\n } else if (mode === \"Squish\") {\n height = SQUISH_TRACK_HEIGHT;\n } else {\n // mode === \"Pack\"\n height = PACK_TRACK_HEIGHT;\n }\n return height;\n },\n\n /**\n * Returns required height to draw a particular number of samples in a given mode.\n */\n get_required_height: function(num_samples) {\n // FIXME: for single-sample data, height should be summary_height when zoomed out and\n // row_height when zoomed in.\n var height = this.prefs.summary_height;\n\n // If showing sample data, height is summary + divider + samples.\n if (num_samples > 1 && this.prefs.show_sample_data) {\n height += this.divider_height + num_samples * this.get_row_height();\n }\n return height;\n },\n\n /**\n * Draw on the context using a rectangle of width x height with scale w_scale.\n */\n draw: function(ctx, width, height, w_scale) {\n ctx.save();\n\n var /**\n * Returns dictionary of information about an indel; returns empty if there no indel. Assumes indel is left-aligned.\n * Dict attributes:\n * -type: 'insertion' or 'deletion'\n * -start: where the deletion starts relative to reference start\n * -len: how long the deletion is\n */\n get_indel_info = (ref, alt) => {\n var ref_len = ref.length;\n var alt_len = alt.length;\n var start = 0;\n var len = 1;\n var type = null;\n if (alt === \"-\") {\n type = \"deletion\";\n len = ref.length;\n } else if (ref.indexOf(alt) === 0 && ref_len > alt_len) {\n type = \"deletion\";\n len = ref_len - alt_len;\n start = alt_len;\n } else if (alt.indexOf(ref) === 0 && ref_len < alt_len) {\n // Insertion.\n type = \"insertion\";\n len = alt_len - ref_len;\n start = alt_len;\n }\n\n return type !== null ? { type: type, start: start, len: len } : {};\n };\n\n // Draw.\n var locus_data;\n\n var pos;\n var id;\n var ref;\n var alt;\n var qual;\n var filter;\n var sample_gts;\n var allele_counts;\n var variant;\n var draw_x_start;\n var draw_y_start;\n var genotype;\n\n var // Always draw variants at least 1 pixel wide.\n base_px = Math.max(1, Math.floor(w_scale));\n\n var // Determine number of samples.\n num_samples = this.data.length ? this.data[0][7].split(\",\").length : 0;\n\n var row_height = this.mode === \"Squish\" ? SQUISH_TRACK_HEIGHT : PACK_TRACK_HEIGHT;\n\n var // If zoomed out, fill the whole row with feature to make it easier to read;\n // when zoomed in, use feature height so that there are gaps in sample rows.\n feature_height =\n w_scale < 0.1 ? row_height : this.mode === \"Squish\" ? SQUISH_FEATURE_HEIGHT : PACK_FEATURE_HEIGHT;\n\n var draw_summary = true;\n\n var paint_utils = new ReadPainterUtils(ctx, row_height, w_scale, this.mode);\n\n var j;\n\n // If there's a single sample, update drawing variables.\n if (num_samples === 1) {\n row_height = feature_height =\n w_scale < ctx.canvas.manager.char_width_px ? this.prefs.summary_height : row_height;\n paint_utils.row_height = row_height;\n // No summary when there's a single sample.\n draw_summary = false;\n }\n\n // Draw divider between summary and samples.\n if (this.prefs.show_sample_data && draw_summary) {\n ctx.fillStyle = \"#F3F3F3\";\n ctx.globalAlpha = 1;\n ctx.fillRect(0, this.prefs.summary_height - this.divider_height, width, this.divider_height);\n }\n\n // Draw variants.\n ctx.textAlign = \"center\";\n for (var i = 0; i < this.data.length; i++) {\n // Get locus data.\n locus_data = this.data[i];\n pos = locus_data[1];\n ref = locus_data[3];\n alt = [locus_data[4].split(\",\")];\n sample_gts = locus_data[7].split(\",\");\n allele_counts = locus_data.slice(8);\n\n // Process alterate values to derive information about each alt.\n alt = _.map(_.flatten(alt), a => {\n var alt_info = {\n type: \"snp\",\n value: a,\n start: 0\n };\n\n var indel_info = get_indel_info(ref, a);\n\n return _.extend(alt_info, indel_info);\n });\n\n // Only draw locus data if it's in viewing region.\n if (pos < this.view_start || pos > this.view_end) {\n continue;\n }\n\n // Draw summary for alleles.\n if (draw_summary) {\n ctx.fillStyle = \"#999999\";\n ctx.globalAlpha = 1;\n for (j = 0; j < alt.length; j++) {\n // Draw background for summary.\n draw_x_start = this.get_start_draw_pos(pos + alt[j].start, w_scale);\n ctx.fillRect(draw_x_start, 0, base_px, this.prefs.summary_height);\n draw_y_start = this.prefs.summary_height;\n // Draw allele fractions onto summary.\n for (j = 0; j < alt.length; j++) {\n ctx.fillStyle = alt[j].type === \"deletion\" ? \"black\" : this.base_color_fn(alt[j].value);\n var allele_frac = allele_counts / sample_gts.length;\n var draw_height = Math.ceil(this.prefs.summary_height * allele_frac);\n ctx.fillRect(draw_x_start, draw_y_start - draw_height, base_px, draw_height);\n draw_y_start -= draw_height;\n }\n }\n }\n\n // Done drawing if not showing samples data.\n if (!this.prefs.show_sample_data) {\n continue;\n }\n\n // Draw sample genotype(s).\n draw_y_start = draw_summary ? this.prefs.summary_height + this.divider_height : 0;\n for (j = 0; j < sample_gts.length; j++, draw_y_start += row_height) {\n genotype = sample_gts[j] ? sample_gts[j].split(/\\/|\\|/) : [\"0\", \"0\"];\n\n // Get variant to draw and set drawing properties.\n variant = null;\n if (genotype[0] === genotype[1]) {\n if (genotype[0] === \".\") {\n // TODO: draw uncalled variant.\n } else if (genotype[0] !== \"0\") {\n // Homozygous for variant.\n variant = alt[parseInt(genotype[0], 10) - 1];\n ctx.globalAlpha = 1;\n }\n // else reference\n } else {\n // Heterozygous for variant.\n variant = genotype[0] !== \"0\" ? genotype[0] : genotype[1];\n variant = alt[parseInt(variant, 10) - 1];\n ctx.globalAlpha = 0.5;\n }\n\n // If there's a variant, draw it.\n if (variant) {\n draw_x_start = this.get_start_draw_pos(pos + variant.start, w_scale);\n if (variant.type === \"snp\") {\n var snp = variant.value;\n ctx.fillStyle = this.base_color_fn(snp);\n if (paint_utils.draw_details) {\n ctx.fillText(snp, this.get_draw_pos(pos, w_scale), draw_y_start + row_height);\n } else {\n ctx.fillRect(draw_x_start, draw_y_start + 1, base_px, feature_height);\n }\n } else if (variant.type === \"deletion\") {\n paint_utils.draw_deletion(draw_x_start, draw_y_start + 1, variant.len);\n } else {\n // TODO: handle insertions.\n }\n }\n }\n }\n\n ctx.restore();\n }\n});\n\nexport default {\n Scaler: Scaler,\n LinePainter: LinePainter,\n LinkedFeaturePainter: LinkedFeaturePainter,\n ReadPainter: ReadPainter,\n ArcLinkedFeaturePainter: ArcLinkedFeaturePainter,\n DiagonalHeatmapPainter: DiagonalHeatmapPainter,\n VariantPainter: VariantPainter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/painters.js","import * as _ from \"libs/underscore\";\nvar extend = _.extend;\n\n/**\n * Filters that enable users to show/hide data points dynamically.\n */\nvar Filter = function(obj_dict) {\n this.manager = null;\n this.name = obj_dict.name;\n // Index into payload to filter.\n this.index = obj_dict.index;\n this.tool_id = obj_dict.tool_id;\n // Name to use for filter when building expression for tool.\n this.tool_exp_name = obj_dict.tool_exp_name;\n};\n\nextend(Filter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function() {\n return {\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n };\n }\n});\n\n/**\n * Creates an action icon.\n */\nvar create_action_icon = (title, css_class, on_click_fn) =>\n $(\"\")\n .attr(\"href\", \"javascript:void(0);\")\n .attr(\"title\", title)\n .addClass(\"icon-button\")\n .addClass(css_class)\n .tooltip()\n .click(on_click_fn);\n\n/**\n * Number filters have a min, max as well as a low, high; low and high are used\n */\nvar NumberFilter = function(obj_dict) {\n //\n // Attribute init.\n //\n Filter.call(this, obj_dict);\n // Filter low/high. These values are used to filter elements.\n this.low = \"low\" in obj_dict ? obj_dict.low : -Number.MAX_VALUE;\n this.high = \"high\" in obj_dict ? obj_dict.high : Number.MAX_VALUE;\n // Slide min/max. These values are used to set/update slider.\n this.min = \"min\" in obj_dict ? obj_dict.min : Number.MAX_VALUE;\n this.max = \"max\" in obj_dict ? obj_dict.max : -Number.MAX_VALUE;\n // UI elements associated with filter.\n this.container = null;\n this.slider = null;\n this.slider_label = null;\n\n //\n // Create HTML.\n //\n\n // Function that supports inline text editing of slider values.\n // Enable users to edit parameter's value via a text box.\n var edit_slider_values = (container, span, slider) => {\n container.click(function() {\n var cur_value = span.text();\n var max = parseFloat(slider.slider(\"option\", \"max\"));\n\n var input_size = max <= 1 ? 4 : max <= 1000000 ? max.toString().length : 6;\n\n var multi_value = false;\n var slider_row = $(this).parents(\".slider-row\");\n\n // Row now has input.\n slider_row.addClass(\"input\");\n\n // Increase input size if there are two values.\n if (slider.slider(\"option\", \"values\")) {\n input_size = 2 * input_size + 1;\n multi_value = true;\n }\n span.text(\"\");\n // Temporary input for changing value.\n $(\"\")\n .attr(\"size\", input_size)\n .attr(\"maxlength\", input_size)\n .attr(\"value\", cur_value)\n .appendTo(span)\n .focus()\n .select()\n .click(e => {\n // Don't want click to propogate up to values_span and restart everything.\n e.stopPropagation();\n })\n .blur(function() {\n $(this).remove();\n span.text(cur_value);\n slider_row.removeClass(\"input\");\n })\n .keyup(function(e) {\n if (e.keyCode === 27) {\n // Escape key.\n $(this).trigger(\"blur\");\n } else if (e.keyCode === 13) {\n //\n // Enter/return key initiates callback. If new value(s) are in slider range,\n // change value (which calls slider's change() function).\n //\n var slider_min = slider.slider(\"option\", \"min\");\n\n var slider_max = slider.slider(\"option\", \"max\");\n\n var invalid = a_val => isNaN(a_val) || a_val > slider_max || a_val < slider_min;\n\n var new_value = $(this).val();\n if (!multi_value) {\n new_value = parseFloat(new_value);\n if (invalid(new_value)) {\n alert(`Parameter value must be in the range [${slider_min}-${slider_max}]`);\n return $(this);\n }\n } else {\n // Multi value.\n new_value = new_value.split(\"-\");\n new_value = [parseFloat(new_value[0]), parseFloat(new_value[1])];\n if (invalid(new_value[0]) || invalid(new_value[1])) {\n alert(`Parameter value must be in the range [${slider_min}-${slider_max}]`);\n return $(this);\n }\n }\n\n // Updating the slider also updates slider values and removes input.\n slider.slider(multi_value ? \"values\" : \"value\", new_value);\n slider_row.removeClass(\"input\");\n }\n });\n });\n };\n\n var filter = this;\n\n filter.parent_div = $(\"
\").addClass(\"filter-row slider-row\");\n\n // Set up filter label (name, values).\n var filter_label = $(\"
\")\n .addClass(\"elt-label\")\n .appendTo(filter.parent_div);\n\n var name_span = $(\"\")\n .addClass(\"slider-name\")\n .text(`${filter.name} `)\n .appendTo(filter_label);\n\n var values_span = $(\"\").text(`${this.low}-${this.high}`);\n\n var values_span_container = $(\"\")\n .addClass(\"slider-value\")\n .appendTo(filter_label)\n .append(\"[\")\n .append(values_span)\n .append(\"]\");\n\n filter.values_span = values_span;\n\n // Set up slider for filter.\n var slider_div = $(\"
\")\n .addClass(\"slider\")\n .appendTo(filter.parent_div);\n filter.control_element = $(\"
\")\n .attr(\"id\", `${filter.name}-filter-control`)\n .appendTo(slider_div);\n filter.control_element.slider({\n range: true,\n min: this.min,\n max: this.max,\n step: this.get_slider_step(this.min, this.max),\n values: [this.low, this.high],\n slide: function(event, ui) {\n filter.slide(event, ui);\n },\n change: function(event, ui) {\n filter.control_element.slider(\"option\", \"slide\").call(filter.control_element, event, ui);\n }\n });\n filter.slider = filter.control_element;\n filter.slider_label = values_span;\n\n // Enable users to edit slider values via text box.\n edit_slider_values(values_span_container, values_span, filter.control_element);\n\n // Set up filter display controls.\n var display_controls_div = $(\"
\")\n .addClass(\"display-controls\")\n .appendTo(filter.parent_div);\n this.transparency_icon = create_action_icon(\"Use filter for data transparency\", \"layer-transparent\", () => {\n if (filter.manager.alpha_filter !== filter) {\n // Setting this filter as the alpha filter.\n filter.manager.alpha_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div\n .find(\".layer-transparent\")\n .removeClass(\"active\")\n .hide();\n filter.transparency_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.alpha_filter = null;\n filter.transparency_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n })\n .appendTo(display_controls_div)\n .hide();\n this.height_icon = create_action_icon(\"Use filter for data height\", \"arrow-resize-090\", () => {\n if (filter.manager.height_filter !== filter) {\n // Setting this filter as the height filter.\n filter.manager.height_filter = filter;\n // Update UI for new filter.\n filter.manager.parent_div\n .find(\".arrow-resize-090\")\n .removeClass(\"active\")\n .hide();\n filter.height_icon.addClass(\"active\").show();\n } else {\n // Clearing filter as alpha filter.\n filter.manager.height_filter = null;\n filter.height_icon.removeClass(\"active\");\n }\n filter.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n })\n .appendTo(display_controls_div)\n .hide();\n filter.parent_div.hover(\n () => {\n filter.transparency_icon.show();\n filter.height_icon.show();\n },\n () => {\n if (filter.manager.alpha_filter !== filter) {\n filter.transparency_icon.hide();\n }\n if (filter.manager.height_filter !== filter) {\n filter.height_icon.hide();\n }\n }\n );\n\n // Add to clear floating layout.\n $(\"
\").appendTo(filter.parent_div);\n};\nextend(NumberFilter.prototype, {\n /**\n * Convert filter to dictionary.\n */\n to_dict: function() {\n var obj_dict = Filter.prototype.to_dict.call(this);\n return extend(obj_dict, {\n type: \"number\",\n min: this.min,\n max: this.max,\n low: this.low,\n high: this.high\n });\n },\n /**\n * Return a copy of filter.\n */\n copy: function() {\n return new NumberFilter({\n name: this.name,\n index: this.index,\n tool_id: this.tool_id,\n tool_exp_name: this.tool_exp_name\n });\n },\n /**\n * Get step for slider.\n */\n // FIXME: make this a \"static\" function.\n get_slider_step: function(min, max) {\n var range = max - min;\n return range <= 2 ? 0.01 : 1;\n },\n /**\n * Handle slide events.\n */\n slide: function(event, ui) {\n var values = ui.values;\n\n // Set new values in UI.\n this.values_span.text(`${values[0]}-${values[1]}`);\n\n // Set new values in filter.\n this.low = values[0];\n this.high = values[1];\n\n // Set timeout to update if filter low, high are stable.\n var self = this;\n setTimeout(() => {\n if (values[0] === self.low && values[1] === self.high) {\n self.manager.track.request_draw({\n force: true,\n clear_after: true\n });\n }\n }, 25);\n },\n /**\n * Returns true if filter can be applied to element.\n */\n applies_to: function(element) {\n if (element.length > this.index) {\n return true;\n }\n return false;\n },\n /**\n * Helper function: returns true if value in in filter's [low, high] range.\n */\n _keep_val: function(val) {\n return isNaN(val) || (val >= this.low && val <= this.high);\n },\n /**\n * Returns true if (a) element's value(s) is in [low, high] (range is inclusive)\n * or (b) if value is non-numeric and hence unfilterable.\n */\n keep: function(element) {\n if (!this.applies_to(element)) {\n // No element to filter on.\n return true;\n }\n\n // Keep value function.\n var filter = this;\n\n // Do filtering.\n var to_filter = element[this.index];\n if (to_filter instanceof Array) {\n var returnVal = true;\n for (var i = 0; i < to_filter.length; i++) {\n if (!this._keep_val(to_filter[i])) {\n // Exclude element.\n returnVal = false;\n break;\n }\n }\n return returnVal;\n } else {\n return this._keep_val(element[this.index]);\n }\n },\n /**\n * Update filter's min and max values based on element's values.\n */\n update_attrs: function(element) {\n var updated = false;\n if (!this.applies_to(element)) {\n return updated;\n }\n\n //\n // Update filter's min, max based on element values.\n //\n\n // Make value(s) into an Array.\n var values = element[this.index];\n if (!(values instanceof Array)) {\n values = [values];\n }\n\n // Loop through values and update min, max.\n for (var i = 0; i < values.length; i++) {\n var value = values[i];\n if (value < this.min) {\n this.min = Math.floor(value);\n updated = true;\n }\n if (value > this.max) {\n this.max = Math.ceil(value);\n updated = true;\n }\n }\n return updated;\n },\n /**\n * Update filter's slider.\n */\n update_ui_elt: function() {\n // Only show filter if min < max because filter is not useful otherwise. This\n // covers all corner cases, such as when min, max have not been defined and\n // when min == max.\n if (this.min < this.max) {\n this.parent_div.show();\n } else {\n this.parent_div.hide();\n }\n\n var slider_min = this.slider.slider(\"option\", \"min\");\n var slider_max = this.slider.slider(\"option\", \"max\");\n if (this.min < slider_min || this.max > slider_max) {\n // Update slider min, max, step.\n this.slider.slider(\"option\", \"min\", this.min);\n this.slider.slider(\"option\", \"max\", this.max);\n this.slider.slider(\"option\", \"step\", this.get_slider_step(this.min, this.max));\n // Refresh slider:\n // TODO: do we want to keep current values or reset to min/max?\n // Currently we reset values:\n this.slider.slider(\"option\", \"values\", [this.min, this.max]);\n // To use the current values.\n //var values = this.slider.slider( \"option\", \"values\" );\n //this.slider.slider( \"option\", \"values\", values );\n }\n }\n});\n\n/**\n * Manages a set of filters.\n */\nvar FiltersManager = function(track, obj_dict) {\n this.track = track;\n this.alpha_filter = null;\n this.height_filter = null;\n this.filters = [];\n\n //\n // Create HTML.\n //\n\n //\n // Create parent div.\n //\n this.parent_div = $(\"
\")\n .addClass(\"filters\")\n .hide();\n // Disable dragging, double clicking, keys on div so that actions on slider do not impact viz.\n this.parent_div\n .bind(\"drag\", e => {\n e.stopPropagation();\n })\n .click(e => {\n e.stopPropagation();\n })\n .bind(\"dblclick\", e => {\n e.stopPropagation();\n })\n .bind(\"keydown\", e => {\n e.stopPropagation();\n });\n\n //\n // Restore state from dict.\n //\n if (obj_dict && \"filters\" in obj_dict) {\n // Second condition needed for backward compatibility.\n var alpha_filter_name = \"alpha_filter\" in obj_dict ? obj_dict.alpha_filter : null;\n\n var height_filter_name = \"height_filter\" in obj_dict ? obj_dict.height_filter : null;\n\n var filters_dict = obj_dict.filters;\n var filter;\n for (var i = 0; i < filters_dict.length; i++) {\n if (filters_dict[i].type === \"number\") {\n filter = new NumberFilter(filters_dict[i]);\n this.add_filter(filter);\n if (filter.name === alpha_filter_name) {\n this.alpha_filter = filter;\n filter.transparency_icon.addClass(\"active\").show();\n }\n if (filter.name === height_filter_name) {\n this.height_filter = filter;\n filter.height_icon.addClass(\"active\").show();\n }\n } else {\n console.log(\"ERROR: unsupported filter: \", name, type);\n }\n }\n\n if (\"visible\" in obj_dict && obj_dict.visible) {\n this.parent_div.show();\n }\n }\n\n // Add button to filter complete dataset.\n if (this.filters.length !== 0) {\n var run_buttons_row = $(\"
\")\n .addClass(\"param-row\")\n .appendTo(this.parent_div);\n var run_on_dataset_button = $(\"\")\n .attr(\"value\", \"Run on complete dataset\")\n .appendTo(run_buttons_row);\n var filter_manager = this;\n run_on_dataset_button.click(() => {\n filter_manager.run_on_dataset();\n });\n }\n};\n\nextend(FiltersManager.prototype, {\n // HTML manipulation and inspection.\n show: function() {\n this.parent_div.show();\n },\n hide: function() {\n this.parent_div.hide();\n },\n toggle: function() {\n this.parent_div.toggle();\n },\n visible: function() {\n return this.parent_div.is(\":visible\");\n },\n /**\n * Returns dictionary for manager.\n */\n to_dict: function() {\n var obj_dict = {};\n var filter_dicts = [];\n var filter;\n\n // Include individual filter states.\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n filter_dicts.push(filter.to_dict());\n }\n obj_dict.filters = filter_dicts;\n\n // Include transparency, height filters.\n obj_dict.alpha_filter = this.alpha_filter ? this.alpha_filter.name : null;\n obj_dict.height_filter = this.height_filter ? this.height_filter.name : null;\n\n // Include visibility.\n obj_dict.visible = this.parent_div.is(\":visible\");\n\n return obj_dict;\n },\n /**\n * Return a copy of the manager.\n */\n copy: function(new_track) {\n var copy = new FiltersManager(new_track);\n for (var i = 0; i < this.filters.length; i++) {\n copy.add_filter(this.filters[i].copy());\n }\n return copy;\n },\n /**\n * Add a filter to the manager.\n */\n add_filter: function(filter) {\n filter.manager = this;\n this.parent_div.append(filter.parent_div);\n this.filters.push(filter);\n },\n /**\n * Remove all filters from manager.\n */\n remove_all: function() {\n this.filters = [];\n this.parent_div.children().remove();\n },\n /**\n * Initialize filters.\n */\n\n init_filters: function() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.update_ui_elt();\n }\n },\n /**\n * Clear filters so that they do not impact track display.\n */\n clear_filters: function() {\n for (var i = 0; i < this.filters.length; i++) {\n var filter = this.filters[i];\n filter.slider.slider(\"option\", \"values\", [filter.min, filter.max]);\n }\n this.alpha_filter = null;\n this.height_filter = null;\n\n // Hide icons for setting filters.\n this.parent_div.find(\".icon-button\").hide();\n },\n run_on_dataset: function() {\n // Get or create dictionary item.\n var get_or_create_dict_item = (dict, key, new_item) => {\n // Add new item to dict if\n if (!(key in dict)) {\n dict[key] = new_item;\n }\n return dict[key];\n };\n\n //\n // Find and group active filters. Active filters are those being used to hide data.\n // Filters with the same tool id are grouped.\n //\n var active_filters = {};\n\n var filter;\n var tool_filter_conditions;\n for (var i = 0; i < this.filters.length; i++) {\n filter = this.filters[i];\n if (filter.tool_id) {\n // Add filtering conditions if filter low/high are set.\n if (filter.min !== filter.low) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = `${filter.tool_exp_name} >= ${filter.low}`;\n }\n if (filter.max !== filter.high) {\n tool_filter_conditions = get_or_create_dict_item(active_filters, filter.tool_id, []);\n tool_filter_conditions[tool_filter_conditions.length] = `${filter.tool_exp_name} <= ${filter.high}`;\n }\n }\n }\n\n //\n // Use tools to run filters.\n //\n\n // Create list of (tool_id, tool_filters) tuples.\n var active_filters_list = [];\n for (var tool_id in active_filters) {\n active_filters_list[active_filters_list.length] = [tool_id, active_filters[tool_id]];\n }\n\n // Invoke recursive function to run filters; this enables chaining of filters via\n // iteratively application.\n (function run_filter(input_dataset_id, filters) {\n var // Set up filtering info and params.\n filter_tuple = filters[0];\n\n var tool_id = filter_tuple[0];\n var tool_filters = filter_tuple[1];\n var tool_filter_str = `(${tool_filters.join(\") and (\")})`;\n\n var url_params = {\n cond: tool_filter_str,\n input: input_dataset_id,\n target_dataset_id: input_dataset_id,\n tool_id: tool_id\n };\n\n // Remove current filter.\n filters = filters.slice(1);\n\n $.getJSON(run_tool_url, url_params, response => {\n if (response.error) {\n // General error.\n Galaxy.modal.show({\n title: \"Filter Dataset\",\n body: `Error running tool ${tool_id}`,\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else if (filters.length === 0) {\n // No more filters to run.\n Galaxy.modal.show({\n title: \"Filtering Dataset\",\n body: \"Filter(s) are running on the complete dataset. Outputs are in dataset's history.\",\n buttons: { Close: Galaxy.modal.hide() }\n });\n } else {\n // More filters to run.\n run_filter(response.dataset_id, filters);\n }\n });\n })(this.track.dataset_id, active_filters_list);\n }\n});\n\nexport default {\n FiltersManager: FiltersManager,\n NumberFilter: NumberFilter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/trackster/filters.js","/**\n This class creates a form section and populates it with input elements. It also handles repeat blocks and conditionals by recursively creating new sub sections.\n*/\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport Portlet from \"mvc/ui/ui-portlet\";\nimport Repeat from \"mvc/form/form-repeat\";\nimport InputElement from \"mvc/form/form-input\";\nimport Parameters from \"mvc/form/form-parameters\";\nvar View = Backbone.View.extend({\n initialize: function(app, options) {\n this.app = app;\n this.inputs = options.inputs;\n this.parameters = new Parameters();\n this.setElement($(\"
\"));\n this.render();\n },\n\n /** Render section view */\n render: function() {\n var self = this;\n this.$el.empty();\n _.each(this.inputs, input => {\n self.add(input);\n });\n },\n\n /** Add a new input element */\n add: function(input) {\n var input_def = jQuery.extend(true, {}, input);\n input_def.id = input.id = Utils.uid();\n this.app.input_list[input_def.id] = input_def;\n switch (input_def.type) {\n case \"conditional\":\n this._addConditional(input_def);\n break;\n case \"repeat\":\n this._addRepeat(input_def);\n break;\n case \"section\":\n this._addSection(input_def);\n break;\n default:\n this._addRow(input_def);\n }\n },\n\n /** Add a conditional block */\n _addConditional: function(input_def) {\n var self = this;\n input_def.test_param.id = input_def.id;\n this.app.model.get(\"sustain_conditionals\") && (input_def.test_param.disabled = true);\n var field = this._addRow(input_def.test_param);\n\n // set onchange event for test parameter\n field.model &&\n field.model.set(\"onchange\", value => {\n var selectedCase = self.app.data.matchCase(input_def, value);\n for (var i in input_def.cases) {\n var case_def = input_def.cases[i];\n var section_row = self.$(`#${input_def.id}-section-${i}`);\n var nonhidden = false;\n for (var j in case_def.inputs) {\n if (!case_def.inputs[j].hidden) {\n nonhidden = true;\n break;\n }\n }\n if (i == selectedCase && nonhidden) {\n section_row.fadeIn(\"fast\");\n } else {\n section_row.hide();\n }\n }\n self.app.trigger(\"change\");\n });\n\n // add conditional sub sections\n for (var i in input_def.cases) {\n var sub_section = new View(this.app, {\n inputs: input_def.cases[i].inputs\n });\n this._append(sub_section.$el.addClass(\"ui-form-section\"), `${input_def.id}-section-${i}`);\n }\n\n // trigger refresh on conditional input field after all input elements have been created\n field.trigger(\"change\");\n },\n\n /** Add a repeat block */\n _addRepeat: function(input_def) {\n var self = this;\n var block_index = 0;\n\n // create repeat block element\n var repeat = new Repeat.View({\n title: input_def.title || \"Repeat\",\n min: input_def.min,\n max: input_def.max,\n onnew: function() {\n create(input_def.inputs);\n self.app.trigger(\"change\");\n }\n });\n\n // helper function to create new repeat blocks\n function create(inputs) {\n var sub_section_id = `${input_def.id}-section-${block_index++}`;\n var sub_section = new View(self.app, { inputs: inputs });\n repeat.add({\n id: sub_section_id,\n $el: sub_section.$el,\n ondel: function() {\n repeat.del(sub_section_id);\n self.app.trigger(\"change\");\n }\n });\n }\n\n //\n // add parsed/minimum number of repeat blocks\n //\n var n_cache = _.size(input_def.cache);\n for (var i = 0; i < Math.max(Math.max(n_cache, input_def.min || 0), input_def.default || 0); i++) {\n create(i < n_cache ? input_def.cache[i] : input_def.inputs);\n }\n\n // hide options\n this.app.model.get(\"sustain_repeats\") && repeat.hideOptions();\n\n // create input field wrapper\n var input_element = new InputElement(this.app, {\n label: input_def.title || input_def.name,\n help: input_def.help,\n field: repeat\n });\n this._append(input_element.$el, input_def.id);\n },\n\n /** Add a customized section */\n _addSection: function(input_def) {\n var portlet = new Portlet.View({\n title: input_def.title || input_def.name,\n cls: \"ui-portlet-section\",\n collapsible: true,\n collapsible_button: true,\n collapsed: !input_def.expanded\n });\n portlet.append(new View(this.app, { inputs: input_def.inputs }).$el);\n portlet.append(\n $(\"
\")\n .addClass(\"ui-form-info\")\n .html(input_def.help)\n );\n this.app.on(\"expand\", input_id => {\n portlet.$(`#${input_id}`).length > 0 && portlet.expand();\n });\n this._append(portlet.$el, input_def.id);\n },\n\n /** Add a single input field element */\n _addRow: function(input_def) {\n var self = this;\n var id = input_def.id;\n input_def.onchange =\n input_def.onchange ||\n (() => {\n self.app.trigger(\"change\", id);\n });\n var field = this.parameters.create(input_def);\n this.app.field_list[id] = field;\n var input_element = new InputElement(this.app, {\n name: input_def.name,\n label: input_def.hide_label ? \"\" : input_def.label || input_def.name,\n value: input_def.value,\n text_value: input_def.text_value,\n collapsible_value: input_def.collapsible_value,\n collapsible_preview: input_def.collapsible_preview,\n help: input_def.help,\n argument: input_def.argument,\n disabled: input_def.disabled,\n color: input_def.color,\n style: input_def.style,\n backdrop: input_def.backdrop,\n hidden: input_def.hidden,\n fixed: input_def.fixed,\n field: field\n });\n this.app.element_list[id] = input_element;\n this._append(input_element.$el, input_def.id);\n return field;\n },\n\n /** Append a new element to the form i.e. input element, repeat block, conditionals etc. */\n _append: function($el, id) {\n this.$el.append($el.addClass(\"section-row\").attr(\"id\", id));\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-section.js","/** This class creates a ui component which enables the dynamic creation of portlets */\nimport Utils from \"utils/utils\";\nimport Portlet from \"mvc/ui/ui-portlet\";\nimport Ui from \"mvc/ui/ui-misc\";\nvar View = Backbone.View.extend({\n initialize: function(options) {\n this.list = {};\n this.options = Utils.merge(options, {\n title: \"Repeat\",\n empty_text: \"Not available.\",\n max: null,\n min: null\n });\n this.button_new = new Ui.ButtonIcon({\n icon: \"fa-plus\",\n title: `Insert ${this.options.title}`,\n tooltip: `Add new ${this.options.title} block`,\n cls: \"ui-button-icon ui-clear-float form-repeat-add\",\n onclick: function() {\n options.onnew && options.onnew();\n }\n });\n this.setElement(\n $(\"
\")\n .append((this.$list = $(\"
\")))\n .append($(\"
\").append(this.button_new.$el))\n );\n },\n\n /** Number of repeat blocks */\n size: function() {\n return _.size(this.list);\n },\n\n /** Add new repeat block */\n add: function(options) {\n if (!options.id || this.list[options.id]) {\n Galaxy.emit.debug(\"form-repeat::add()\", \"Duplicate or invalid repeat block id.\");\n return;\n }\n var button_delete = new Ui.ButtonIcon({\n icon: \"fa-trash-o\",\n tooltip: \"Delete this repeat block\",\n cls: \"ui-button-icon-plain form-repeat-delete\",\n onclick: function() {\n options.ondel && options.ondel();\n }\n });\n var portlet = new Portlet.View({\n id: options.id,\n title: \"placeholder\",\n cls: options.cls || \"ui-portlet-repeat\",\n operations: { button_delete: button_delete }\n });\n portlet.append(options.$el);\n portlet.$el.addClass(\"section-row\").hide();\n this.list[options.id] = portlet;\n this.$list.append(portlet.$el.fadeIn(\"fast\"));\n this.options.max > 0 && this.size() >= this.options.max && this.button_new.disable();\n this._refresh();\n },\n\n /** Delete repeat block */\n del: function(id) {\n if (!this.list[id]) {\n Galaxy.emit.debug(\"form-repeat::del()\", \"Invalid repeat block id.\");\n return;\n }\n this.$list.find(`#${id}`).remove();\n delete this.list[id];\n this.button_new.enable();\n this._refresh();\n },\n\n /** Remove all */\n delAll: function() {\n for (var id in this.list) {\n this.del(id);\n }\n },\n\n /** Hides add/del options */\n hideOptions: function() {\n this.button_new.$el.hide();\n _.each(this.list, portlet => {\n portlet.hideOperation(\"button_delete\");\n });\n _.isEmpty(this.list) &&\n this.$el.append(\n $(\"
\")\n .addClass(\"ui-form-info\")\n .html(this.options.empty_text)\n );\n },\n\n /** Refresh view */\n _refresh: function() {\n var index = 0;\n for (var id in this.list) {\n var portlet = this.list[id];\n portlet.title(`${++index}: ${this.options.title}`);\n portlet[this.size() > this.options.min ? \"showOperation\" : \"hideOperation\"](\"button_delete\");\n }\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-repeat.js","/**\n This class creates a form input element wrapper\n*/\n\nexport default Backbone.View.extend({\n initialize: function(app, options) {\n this.app = app;\n this.app_options = app.model ? app.model.attributes : {};\n this.field = (options && options.field) || new Backbone.View();\n this.model =\n (options && options.model) ||\n new Backbone.Model({\n text_enable: this.app_options.text_enable || \"Enable\",\n text_disable: this.app_options.text_disable || \"Disable\",\n cls_enable: this.app_options.cls_enable || \"fa fa-caret-square-o-down\",\n cls_disable: this.app_options.cls_disable || \"fa fa-caret-square-o-up\",\n always_refresh: this.app_options.always_refresh\n }).set(options);\n\n // set element and link components\n this.setElement(this._template());\n this.$field = this.$(\".ui-form-field\");\n this.$info = this.$(\".ui-form-info\");\n this.$preview = this.$(\".ui-form-preview\");\n this.$collapsible = this.$(\".ui-form-collapsible\");\n this.$collapsible_text = this.$(\".ui-form-collapsible-text\");\n this.$collapsible_icon = this.$(\".ui-form-collapsible-icon\");\n this.$title = this.$(\".ui-form-title\");\n this.$title_text = this.$(\".ui-form-title-text\");\n this.$error_text = this.$(\".ui-form-error-text\");\n this.$error = this.$(\".ui-form-error\");\n this.$backdrop = this.$(\".ui-form-backdrop\");\n\n // add field element\n this.$field.prepend(this.field.$el);\n\n // decide wether to expand or collapse fields\n var collapsible_value = this.model.get(\"collapsible_value\");\n this.field.collapsed =\n collapsible_value !== undefined &&\n JSON.stringify(this.model.get(\"value\")) == JSON.stringify(collapsible_value);\n this.listenTo(this.model, \"change\", this.render, this);\n this.render();\n\n // add click handler\n var self = this;\n this.$collapsible.on(\"click\", () => {\n self.field.collapsed = !self.field.collapsed;\n app.trigger && app.trigger(\"change\");\n self.render();\n });\n\n // hide error on value change\n if (this.field.model && !this.model.get(\"always_refresh\")) {\n this.listenTo(this.field.model, \"change:value\", () => {\n self.reset();\n });\n }\n },\n\n /** Set backdrop for input element */\n backdrop: function() {\n this.model.set(\"backdrop\", true);\n },\n\n /** Set error text */\n error: function(text) {\n this.model.set(\"error_text\", text);\n },\n\n /** Reset this view */\n reset: function() {\n !this.model.get(\"fixed\") && this.model.set(\"error_text\", null);\n },\n\n render: function() {\n // render help\n $(\".tooltip\").hide();\n var help_text = this.model.get(\"help\", \"\");\n var help_argument = this.model.get(\"argument\");\n if (help_argument && help_text.indexOf(`(${help_argument})`) == -1) {\n help_text += ` (${help_argument})`;\n }\n this.$info.html(help_text);\n // render visibility\n this.$el[this.model.get(\"hidden\") ? \"hide\" : \"show\"]();\n // render preview view for collapsed fields\n this.$preview[\n (this.field.collapsed && this.model.get(\"collapsible_preview\")) || this.model.get(\"disabled\")\n ? \"show\"\n : \"hide\"\n ]().html(_.escape(this.model.get(\"text_value\")));\n // render error messages\n var error_text = this.model.get(\"error_text\");\n this.$error[error_text ? \"show\" : \"hide\"]();\n this.$el[error_text ? \"addClass\" : \"removeClass\"](\"ui-error\");\n this.$error_text.html(error_text);\n // render backdrop\n this.$backdrop[this.model.get(\"backdrop\") ? \"show\" : \"hide\"]();\n // render input field\n this.field.collapsed || this.model.get(\"disabled\") ? this.$field.hide() : this.$field.show();\n // render input field color and style\n this.field.model &&\n this.field.model.set({\n color: this.model.get(\"color\"),\n style: this.model.get(\"style\")\n });\n // render collapsible options\n if (!this.model.get(\"disabled\") && this.model.get(\"collapsible_value\") !== undefined) {\n var collapsible_state = this.field.collapsed ? \"enable\" : \"disable\";\n this.$title_text.hide();\n this.$collapsible.show();\n this.$collapsible_text.text(this.model.get(\"label\"));\n this.$collapsible_icon\n .removeClass()\n .addClass(\"icon\")\n .addClass(this.model.get(`cls_${collapsible_state}`))\n .attr(\"data-original-title\", this.model.get(`text_${collapsible_state}`))\n .tooltip({ placement: \"bottom\" });\n } else {\n this.$title_text.show().text(this.model.get(\"label\"));\n this.$collapsible.hide();\n }\n },\n\n _template: function() {\n return $(\"
\")\n .addClass(\"ui-form-element\")\n .append(\n $(\"
\")\n .addClass(\"ui-form-error ui-error\")\n .append($(\"\").addClass(\"fa fa-arrow-down\"))\n .append($(\"\").addClass(\"ui-form-error-text\"))\n )\n .append(\n $(\"
\")\n .addClass(\"ui-form-title\")\n .append(\n $(\"
\")\n .addClass(\"ui-form-collapsible\")\n .append($(\"\").addClass(\"ui-form-collapsible-icon\"))\n .append($(\"\").addClass(\"ui-form-collapsible-text\"))\n )\n .append($(\"\").addClass(\"ui-form-title-text\"))\n )\n .append(\n $(\"
\")\n .addClass(\"ui-form-field\")\n .append($(\"\").addClass(\"ui-form-info\"))\n .append($(\"
\").addClass(\"ui-form-backdrop\"))\n )\n .append($(\"
\").addClass(\"ui-form-preview\"));\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-input.js","/**\n This class creates input elements. New input parameter types should be added to the types dictionary.\n*/\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport SelectContent from \"mvc/ui/ui-select-content\";\nimport SelectLibrary from \"mvc/ui/ui-select-library\";\nimport SelectFtp from \"mvc/ui/ui-select-ftp\";\nimport SelectGenomeSpace from \"mvc/ui/ui-select-genomespace\";\nimport ColorPicker from \"mvc/ui/ui-color-picker\";\n// create form view\nexport default Backbone.Model.extend({\n /** Available parameter types */\n types: {\n text: \"_fieldText\",\n password: \"_fieldText\",\n select: \"_fieldSelect\",\n data_column: \"_fieldSelect\",\n genomebuild: \"_fieldSelect\",\n data: \"_fieldData\",\n data_collection: \"_fieldData\",\n integer: \"_fieldSlider\",\n float: \"_fieldSlider\",\n boolean: \"_fieldBoolean\",\n drill_down: \"_fieldDrilldown\",\n color: \"_fieldColor\",\n hidden: \"_fieldHidden\",\n hidden_data: \"_fieldHidden\",\n baseurl: \"_fieldHidden\",\n library_data: \"_fieldLibrary\",\n ftpfile: \"_fieldFtp\",\n upload: \"_fieldUpload\",\n genomespacefile: \"_fieldGenomeSpace\"\n },\n\n /** Returns an input field for a given field type */\n create: function(input_def) {\n var fieldClass = this.types[input_def.type];\n var field = typeof this[fieldClass] === \"function\" ? this[fieldClass].call(this, input_def) : null;\n if (!field) {\n field = input_def.options ? this._fieldSelect(input_def) : this._fieldText(input_def);\n Galaxy.emit.debug(\"form-parameters::_addRow()\", `Auto matched field type (${input_def.type}).`);\n }\n input_def.value === undefined && (input_def.value = null);\n field.value(input_def.value);\n return field;\n },\n\n /** Data input field */\n _fieldData: function(input_def) {\n return new SelectContent.View({\n id: `field-${input_def.id}`,\n extensions: input_def.extensions,\n optional: input_def.optional,\n multiple: input_def.multiple,\n type: input_def.type,\n flavor: input_def.flavor,\n data: input_def.options,\n onchange: input_def.onchange\n });\n },\n\n /** Select/Checkbox/Radio options field */\n _fieldSelect: function(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // customize properties\n if (input_def.type == \"data_column\") {\n input_def.error_text = \"Missing columns in referenced dataset.\";\n }\n\n // identify available options\n var data = input_def.data;\n if (!data) {\n data = [];\n _.each(input_def.options, option => {\n data.push({ label: option[0], value: option[1] });\n });\n }\n\n // identify display type\n var SelectClass = Ui.Select;\n switch (input_def.display) {\n case \"checkboxes\":\n SelectClass = Ui.Checkbox;\n break;\n case \"radio\":\n SelectClass = Ui.Radio;\n break;\n case \"radiobutton\":\n SelectClass = Ui.RadioButton;\n break;\n }\n\n // create select field\n return new SelectClass.View({\n id: `field-${input_def.id}`,\n data: data,\n error_text: input_def.error_text || \"No options available\",\n readonly: input_def.readonly,\n multiple: input_def.multiple,\n optional: input_def.optional,\n onchange: input_def.onchange,\n individual: input_def.individual,\n searchable: input_def.flavor !== \"workflow\"\n });\n },\n\n /** Drill down options field */\n _fieldDrilldown: function(input_def) {\n // show text field e.g. in workflow editor\n if (input_def.is_workflow) {\n return this._fieldText(input_def);\n }\n\n // create drill down field\n return new Ui.Drilldown.View({\n id: `field-${input_def.id}`,\n data: input_def.options,\n display: input_def.display,\n optional: input_def.optional,\n onchange: input_def.onchange\n });\n },\n\n /** Text input field */\n _fieldText: function(input_def) {\n // field replaces e.g. a select field\n if (input_def.options && input_def.data) {\n input_def.area = input_def.multiple;\n if (Utils.isEmpty(input_def.value)) {\n input_def.value = null;\n } else {\n if ($.isArray(input_def.value)) {\n var str_value = \"\";\n for (var i in input_def.value) {\n str_value += String(input_def.value[i]);\n if (!input_def.multiple) {\n break;\n }\n str_value += \"\\n\";\n }\n input_def.value = str_value;\n }\n }\n }\n // create input element\n return new Ui.Input({\n id: `field-${input_def.id}`,\n type: input_def.type,\n area: input_def.area,\n readonly: input_def.readonly,\n placeholder: input_def.placeholder,\n datalist: input_def.datalist,\n onchange: input_def.onchange\n });\n },\n\n /** Slider field */\n _fieldSlider: function(input_def) {\n return new Ui.Slider.View({\n id: `field-${input_def.id}`,\n precise: input_def.type == \"float\",\n is_workflow: input_def.is_workflow,\n min: input_def.min,\n max: input_def.max,\n onchange: input_def.onchange\n });\n },\n\n /** Hidden field */\n _fieldHidden: function(input_def) {\n return new Ui.Hidden({\n id: `field-${input_def.id}`,\n info: input_def.info\n });\n },\n\n /** Boolean field */\n _fieldBoolean: function(input_def) {\n return new Ui.RadioButton.View({\n id: `field-${input_def.id}`,\n data: [{ label: \"Yes\", value: \"true\" }, { label: \"No\", value: \"false\" }],\n onchange: input_def.onchange\n });\n },\n\n /** Color picker field */\n _fieldColor: function(input_def) {\n return new ColorPicker({\n id: `field-${input_def.id}`,\n onchange: input_def.onchange\n });\n },\n\n /** Library dataset field */\n _fieldLibrary: function(input_def) {\n return new SelectLibrary.View({\n id: `field-${input_def.id}`,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** FTP file field */\n _fieldFtp: function(input_def) {\n return new SelectFtp.View({\n id: `field-${input_def.id}`,\n optional: input_def.optional,\n multiple: input_def.multiple,\n onchange: input_def.onchange\n });\n },\n\n /** GenomeSpace file select field\n */\n _fieldGenomeSpace: function(input_def) {\n var self = this;\n return new SelectGenomeSpace.View({\n id: `field-${input_def.id}`,\n onchange: function() {\n self.app.trigger(\"change\");\n }\n });\n },\n\n /** Upload file field */\n _fieldUpload: function(input_def) {\n return new Ui.Upload({\n id: `field-${input_def.id}`,\n onchange: input_def.onchange\n });\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/form/form-parameters.js","import Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport Select from \"mvc/ui/ui-select-default\";\n/** Batch mode variations */\nvar Batch = { DISABLED: \"disabled\", ENABLED: \"enabled\", LINKED: \"linked\" };\n\n/** List of available content selectors options */\nvar Configurations = {\n data: [\n {\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n },\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.LINKED\n },\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.LINKED\n }\n ],\n data_multiple: [\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n },\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collections\",\n multiple: true,\n batch: Batch.DISABLED\n }\n ],\n data_collection: [\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }\n ],\n workflow_data: [\n {\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n }\n ],\n workflow_data_multiple: [\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.DISABLED\n }\n ],\n workflow_data_collection: [\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n }\n ],\n module_data: [\n {\n src: \"hda\",\n icon: \"fa-file-o\",\n tooltip: \"Single dataset\",\n multiple: false,\n batch: Batch.DISABLED\n },\n {\n src: \"hda\",\n icon: \"fa-files-o\",\n tooltip: \"Multiple datasets\",\n multiple: true,\n batch: Batch.ENABLED\n }\n ],\n module_data_collection: [\n {\n src: \"hdca\",\n icon: \"fa-folder-o\",\n tooltip: \"Dataset collection\",\n multiple: false,\n batch: Batch.DISABLED\n },\n {\n src: \"hdca\",\n icon: \"fa-folder\",\n tooltip: \"Multiple collections\",\n multiple: true,\n batch: Batch.ENABLED\n }\n ]\n};\n\n/** View for hda and hdca content selector ui elements */\nvar View = Backbone.View.extend({\n initialize: function(options) {\n var self = this;\n this.model =\n (options && options.model) ||\n new Backbone.Model({\n src_labels: { hda: \"dataset\", hdca: \"dataset collection\" },\n pagelimit: 100,\n statustimer: 1000\n }).set(options);\n this.setElement($(\"
\").addClass(\"ui-select-content\"));\n this.button_product = new Ui.RadioButton.View({\n value: \"false\",\n data: [\n {\n icon: \"fa fa-chain\",\n value: \"false\",\n tooltip:\n \"Linked inputs will be run in matched order with other datasets e.g. use this for matching forward and reverse reads.\"\n },\n {\n icon: \"fa fa-chain-broken\",\n value: \"true\",\n tooltip: \"Unlinked dataset inputs will be run against *all* other inputs.\"\n }\n ]\n });\n var $batch_div = $(\"
\")\n .addClass(\"ui-form-info\")\n .append($(\"\").addClass(\"fa fa-sitemap\"))\n .append(\n $(\"\").html(\n \"This is a batch mode input field. Separate jobs will be triggered for each dataset selection.\"\n )\n );\n this.$batch = {\n linked: $batch_div.clone(),\n enabled: $batch_div\n .clone()\n .append(\n $(\"
\")\n .append(\n $(\"
\")\n .addClass(\"ui-form-title\")\n .html(\"Batch options:\")\n )\n .append(this.button_product.$el)\n )\n .append($(\"
\").css(\"clear\", \"both\"))\n };\n\n // add drag-drop event handlers\n this.$el\n .on(\"dragenter\", function(e) {\n this.lastenter = e.target;\n self.$el.addClass(\"ui-dragover\");\n })\n .on(\"dragover\", e => {\n e.preventDefault();\n })\n .on(\"dragleave\", function(e) {\n this.lastenter === e.target && self.$el.removeClass(\"ui-dragover\");\n })\n .on(\"drop\", e => {\n self._handleDrop(e);\n });\n\n // track current history elements\n this.history = {};\n\n // add listeners\n this.listenTo(this.model, \"change:data\", this._changeData, this);\n this.listenTo(this.model, \"change:wait\", this._changeWait, this);\n this.listenTo(this.model, \"change:current\", this._changeCurrent, this);\n this.listenTo(this.model, \"change:value\", this._changeValue, this);\n this.listenTo(\n this.model,\n \"change:type change:optional change:multiple change:extensions\",\n this._changeType,\n this\n );\n this.render();\n\n // add change event\n this.on(\"change\", () => {\n options.onchange && options.onchange(self.value());\n });\n },\n\n render: function() {\n this._changeType();\n this._changeValue();\n this._changeWait();\n },\n\n /** Indicate that select fields are being updated */\n wait: function() {\n this.model.set(\"wait\", true);\n },\n\n /** Indicate that the options update has been completed */\n unwait: function() {\n this.model.set(\"wait\", false);\n },\n\n /** Update data representing selectable options */\n update: function(options) {\n this.model.set(\"data\", options);\n },\n\n /** Return the currently selected dataset values */\n value: function(new_value) {\n new_value !== undefined && this.model.set(\"value\", new_value);\n var current = this.model.get(\"current\");\n if (this.config[current]) {\n var id_list = this.fields[current].value();\n if (id_list !== null) {\n id_list = $.isArray(id_list) ? id_list : [id_list];\n if (id_list.length > 0) {\n var result = this._batch({ values: [] });\n for (var i in id_list) {\n var details = this.history[`${id_list[i]}_${this.config[current].src}`];\n if (details) {\n result.values.push(details);\n } else {\n Galaxy.emit.debug(\n \"ui-select-content::value()\",\n `Requested details not found for '${id_list[i]}'.`\n );\n return null;\n }\n }\n result.values.sort((a, b) => a.hid - b.hid);\n return result;\n }\n }\n } else {\n Galaxy.emit.debug(\"ui-select-content::value()\", `Invalid value/source '${new_value}'.`);\n }\n return null;\n },\n\n /** Change of current select field */\n _changeCurrent: function() {\n var self = this;\n _.each(this.fields, (field, i) => {\n if (self.model.get(\"current\") == i) {\n field.$el.show();\n _.each(self.$batch, ($batchfield, batchmode) => {\n $batchfield[self.config[i].batch == batchmode ? \"show\" : \"hide\"]();\n });\n self.button_type.value(i);\n } else {\n field.$el.hide();\n }\n });\n },\n\n /** Change of type */\n _changeType: function() {\n var self = this;\n\n // identify selector type identifier i.e. [ flavor ]_[ type ]_[ multiple ]\n var config_id =\n (this.model.get(\"flavor\") ? `${this.model.get(\"flavor\")}_` : \"\") +\n String(this.model.get(\"type\")) +\n (this.model.get(\"multiple\") ? \"_multiple\" : \"\");\n if (Configurations[config_id]) {\n this.config = Configurations[config_id];\n } else {\n this.config = Configurations[\"data\"];\n Galaxy.emit.debug(\"ui-select-content::_changeType()\", `Invalid configuration/type id '${config_id}'.`);\n }\n\n // prepare extension component of error message\n var data = self.model.get(\"data\");\n var extensions = Utils.textify(this.model.get(\"extensions\"));\n var src_labels = this.model.get(\"src_labels\");\n\n // build views\n this.fields = [];\n this.button_data = [];\n _.each(this.config, (c, i) => {\n self.button_data.push({\n value: i,\n icon: c.icon,\n tooltip: c.tooltip\n });\n self.fields.push(\n new Select.View({\n optional: self.model.get(\"optional\"),\n multiple: c.multiple,\n searchable:\n !c.multiple || (data && data[c.src] && data[c.src].length > self.model.get(\"pagelimit\")),\n individual: true,\n error_text: `No ${extensions ? `${extensions} ` : \"\"}${src_labels[c.src] || \"content\"} available.`,\n onchange: function() {\n self.trigger(\"change\");\n }\n })\n );\n });\n this.button_type = new Ui.RadioButton.View({\n value: this.model.get(\"current\"),\n data: this.button_data,\n onchange: function(value) {\n self.model.set(\"current\", value);\n self.trigger(\"change\");\n }\n });\n\n // append views\n this.$el.empty();\n var button_width = 0;\n if (this.fields.length > 1) {\n this.$el.append(this.button_type.$el);\n button_width = `${Math.max(0, this.fields.length * 36)}px`;\n }\n _.each(this.fields, field => {\n self.$el.append(field.$el.css({ \"margin-left\": button_width }));\n });\n _.each(this.$batch, ($batchfield, batchmode) => {\n self.$el.append($batchfield.css({ \"margin-left\": button_width }));\n });\n this.model.set(\"current\", 0);\n this._changeCurrent();\n this._changeData();\n },\n\n /** Change of wait flag */\n _changeWait: function() {\n var self = this;\n _.each(this.fields, field => {\n field[self.model.get(\"wait\") ? \"wait\" : \"unwait\"]();\n });\n },\n\n /** Change of available options */\n _changeData: function() {\n var options = this.model.get(\"data\");\n var self = this;\n var select_options = {};\n _.each(options, (items, src) => {\n select_options[src] = [];\n _.each(items, item => {\n select_options[src].push({\n hid: item.hid,\n keep: item.keep,\n label: `${item.hid}: ${item.name}`,\n value: item.id,\n tags: item.tags\n });\n self.history[`${item.id}_${src}`] = item;\n });\n });\n _.each(this.config, (c, i) => {\n select_options[c.src] && self.fields[i].add(select_options[c.src], (a, b) => b.hid - a.hid);\n });\n },\n\n /** Change of incoming value */\n _changeValue: function() {\n var new_value = this.model.get(\"value\");\n if (new_value && new_value.values && new_value.values.length > 0) {\n // create list with content ids\n var list = [];\n _.each(new_value.values, value => {\n list.push(value.id);\n });\n // sniff first suitable field type from config list\n var src = new_value.values[0].src;\n var multiple = new_value.values.length > 1;\n for (var i = 0; i < this.config.length; i++) {\n var field = this.fields[i];\n var c = this.config[i];\n if (c.src == src && [multiple, true].indexOf(c.multiple) !== -1) {\n this.model.set(\"current\", i);\n field.value(list);\n break;\n }\n }\n } else {\n _.each(this.fields, field => {\n field.value(null);\n });\n }\n },\n\n /** Handles drop events e.g. from history panel */\n _handleDrop: function(ev) {\n try {\n var data = this.model.get(\"data\");\n var current = this.model.get(\"current\");\n var config = this.config[current];\n var field = this.fields[current];\n var drop_data = JSON.parse(ev.originalEvent.dataTransfer.getData(\"text\"))[0];\n var new_id = drop_data.id;\n var new_src = drop_data.history_content_type == \"dataset\" ? \"hda\" : \"hdca\";\n var new_value = { id: new_id, src: new_src };\n if (data && _.findWhere(data[new_src], new_value)) {\n if (config.src == new_src) {\n var current_value = field.value();\n if (current_value && config.multiple) {\n if (current_value.indexOf(new_id) == -1) {\n current_value.push(new_id);\n }\n } else {\n current_value = new_id;\n }\n field.value(current_value);\n } else {\n this.model.set(\"value\", { values: [new_value] });\n this.model.trigger(\"change:value\");\n }\n this.trigger(\"change\");\n this._handleDropStatus(\"success\");\n } else {\n this._handleDropStatus(\"danger\");\n }\n } catch (e) {\n this._handleDropStatus(\"danger\");\n }\n ev.preventDefault();\n },\n\n /** Highlight drag result */\n _handleDropStatus: function(status) {\n var self = this;\n this.$el.removeClass(\"ui-dragover\").addClass(`ui-dragover-${status}`);\n setTimeout(() => {\n self.$el.removeClass(`ui-dragover-${status}`);\n }, this.model.get(\"statustimer\"));\n },\n\n /** Assists in identifying the batch mode */\n _batch: function(result) {\n result[\"batch\"] = false;\n var current = this.model.get(\"current\");\n var config = this.config[current];\n if (config.src == \"hdca\" && !config.multiple) {\n var hdca = this.history[`${this.fields[current].value()}_hdca`];\n if (hdca && hdca.map_over_type) {\n result[\"batch\"] = true;\n }\n }\n if (config.batch == Batch.LINKED || config.batch == Batch.ENABLED) {\n result[\"batch\"] = true;\n if (config.batch == Batch.ENABLED && this.button_product.value() === \"true\") {\n result[\"product\"] = true;\n }\n }\n return result;\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-content.js","// dependencies\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport Table from \"mvc/ui/ui-table\";\nimport List from \"mvc/ui/ui-list\";\n// collection of libraries\nvar Libraries = Backbone.Collection.extend({\n url: `${Galaxy.root}api/libraries?deleted=false`\n});\n\n// collection of dataset\nvar LibraryDatasets = Backbone.Collection.extend({\n initialize: function() {\n var self = this;\n this.config = new Backbone.Model({ library_id: null });\n this.config.on(\"change\", () => {\n self.fetch({ reset: true });\n });\n },\n url: function() {\n return `${Galaxy.root}api/libraries/${this.config.get(\"library_id\")}/contents`;\n }\n});\n\n// hda/hdca content selector ui element\nvar View = Backbone.View.extend({\n // initialize\n initialize: function(options) {\n // link this\n var self = this;\n\n // collections\n this.libraries = new Libraries();\n this.datasets = new LibraryDatasets();\n\n // link app and options\n this.options = options;\n\n // select field for the library\n // TODO: Remove this once the library API supports searching for library datasets\n this.library_select = new Ui.Select.View({\n onchange: function(value) {\n self.datasets.config.set(\"library_id\", value);\n }\n });\n\n // create ui-list view to keep track of selected data libraries\n this.dataset_list = new List.View({\n name: \"dataset\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function() {\n self.trigger(\"change\");\n }\n });\n\n // add reset handler for fetched libraries\n this.libraries.on(\"reset\", () => {\n var data = [];\n self.libraries.each(model => {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n });\n self.library_select.update(data);\n });\n\n // add reset handler for fetched library datasets\n this.datasets.on(\"reset\", () => {\n var data = [];\n var library_current = self.library_select.text();\n if (library_current !== null) {\n self.datasets.each(model => {\n if (model.get(\"type\") === \"file\") {\n data.push({\n value: model.id,\n label: model.get(\"name\")\n });\n }\n });\n }\n self.dataset_list.update(data);\n });\n\n // add change event. fires on trigger\n this.on(\"change\", () => {\n options.onchange && options.onchange(self.value());\n });\n\n // create elements\n this.setElement(this._template());\n this.$(\".library-select\").append(this.library_select.$el);\n this.$el.append(this.dataset_list.$el);\n\n // initial fetch of libraries\n this.libraries.fetch({\n reset: true,\n success: function() {\n self.library_select.trigger(\"change\");\n if (self.options.value !== undefined) {\n self.value(self.options.value);\n }\n }\n });\n },\n\n /** Return/Set currently selected library datasets */\n value: function(val) {\n return this.dataset_list.value(val);\n },\n\n /** Template */\n _template: function() {\n return (\n '
' +\n '
' +\n 'Select Library' +\n '' +\n \"
\" +\n \"
\"\n );\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-library.js","// dependencies\nimport Utils from \"utils/utils\";\nimport List from \"mvc/ui/ui-list\";\n/**\n * FTP file selector\n */\nvar View = Backbone.View.extend({\n // initialize\n initialize: function(options) {\n // link this\n var self = this;\n\n // create ui-list view to keep track of selected ftp files\n this.ftpfile_list = new List.View({\n name: \"file\",\n optional: options.optional,\n multiple: options.multiple,\n onchange: function() {\n options.onchange && options.onchange(self.value());\n }\n });\n\n // create elements\n this.setElement(this.ftpfile_list.$el);\n\n // initial fetch of ftps\n Utils.get({\n url: `${Galaxy.root}api/remote_files`,\n success: function(response) {\n var data = [];\n for (var i in response) {\n data.push({\n value: response[i][\"path\"],\n label: response[i][\"path\"]\n });\n }\n self.ftpfile_list.update(data);\n }\n });\n },\n\n /** Return/Set currently selected ftp datasets */\n value: function(val) {\n return this.ftpfile_list.value(val);\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-ftp.js","// dependencies\nimport Utils from \"utils/utils\";\nimport Ui from \"mvc/ui/ui-misc\";\nimport GenomespaceBrowser from \"mvc/tool/tool-genomespace\";\n/**\n * GenomeSpace file selector\n */\nvar View = Backbone.View.extend({\n // initialize\n initialize: function(options) {\n // link this\n var self = this;\n\n // create insert new list element button\n this.browse_button = new Ui.ButtonIcon({\n title: \"Browse\",\n icon: \"fa fa-sign-in\",\n tooltip: \"Browse GenomeSpace\",\n onclick: function() {\n self.browseGenomeSpace();\n }\n });\n\n // create genomespace filepath textbox\n this.filename_textbox = new Ui.Input();\n\n // create genomespace token textbox\n this.token_textbox = new Ui.Input({\n type: \"password\"\n });\n\n // create elements\n this.setElement(this._template(options));\n this.$(\".ui-gs-browse-button\").append(this.browse_button.$el);\n this.$(\".ui-gs-filename-textbox\").append(this.filename_textbox.$el);\n this.$(\".ui-gs-token-textbox\").append(this.token_textbox.$el);\n },\n\n /** Browse GenomeSpace */\n browseGenomeSpace: function(options) {\n var self = this;\n GenomespaceBrowser.openFileBrowser({\n successCallback: function(data) {\n self.value(`${data.destination}^${data.token}`);\n }\n });\n },\n\n /** Main Template */\n _template: function(options) {\n return (\n '
' +\n '
' +\n '' +\n '' +\n \"
\" +\n '
' +\n '
Token
' +\n '' +\n \"
\" +\n \"
\"\n );\n },\n\n /** Return/Set currently selected genomespace filename/token */\n value: function(new_value) {\n // check if new_value is defined\n if (new_value !== undefined) {\n this._setValue(new_value);\n } else {\n return this._getValue();\n }\n },\n\n // get value\n _getValue: function() {\n return `${this.filename_textbox.value()}^${this.token_textbox.value()}`;\n },\n\n // set value\n _setValue: function(new_value) {\n if (new_value) {\n values = new_value.split(\"^\");\n this.filename_textbox.value(values[0]);\n this.token_textbox.value(values[1]);\n }\n }\n});\n\nexport default {\n View: View\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-select-genomespace.js","// Provides support for interacting with the GenomeSpace File Browser popup dialogue\n\n// tool form templates\nexport default {\n openFileBrowser: function(options) {\n var GS_UI_URL = window.Galaxy.config.genomespace_ui_url;\n var GS_UPLOAD_URL = `${GS_UI_URL}upload/loadUrlToGenomespace.html?getLocation=true`;\n\n var newWin = window.open(GS_UPLOAD_URL, \"GenomeSpace File Browser\", \"height=360px,width=600px\");\n\n successCalBack = options[\"successCallback\"];\n window.addEventListener(\n \"message\",\n e => {\n successCalBack(e.data);\n },\n false\n );\n\n newWin.focus();\n\n if (options[\"errorCallback\"] != null) newWin.setCallbackOnGSUploadError = config[\"errorCallback\"];\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/tool/tool-genomespace.js","/** Renders the color picker used e.g. in the tool form **/\nimport Utils from \"utils/utils\";\nexport default Backbone.View.extend({\n colors: {\n standard: [\"c00000\", \"ff0000\", \"ffc000\", \"ffff00\", \"92d050\", \"00b050\", \"00b0f0\", \"0070c0\", \"002060\", \"7030a0\"],\n base: [\"ffffff\", \"000000\", \"eeece1\", \"1f497d\", \"4f81bd\", \"c0504d\", \"9bbb59\", \"8064a2\", \"4bacc6\", \"f79646\"],\n theme: [\n [\"f2f2f2\", \"7f7f7f\", \"ddd9c3\", \"c6d9f0\", \"dbe5f1\", \"f2dcdb\", \"ebf1dd\", \"e5e0ec\", \"dbeef3\", \"fdeada\"],\n [\"d8d8d8\", \"595959\", \"c4bd97\", \"8db3e2\", \"b8cce4\", \"e5b9b7\", \"d7e3bc\", \"ccc1d9\", \"b7dde8\", \"fbd5b5\"],\n [\"bfbfbf\", \"3f3f3f\", \"938953\", \"548dd4\", \"95b3d7\", \"d99694\", \"c3d69b\", \"b2a2c7\", \"92cddc\", \"fac08f\"],\n [\"a5a5a5\", \"262626\", \"494429\", \"17365d\", \"366092\", \"953734\", \"76923c\", \"5f497a\", \"31859b\", \"e36c09\"],\n [\"7f7f7e\", \"0c0c0c\", \"1d1b10\", \"0f243e\", \"244061\", \"632423\", \"4f6128\", \"3f3151\", \"205867\", \"974806\"]\n ]\n },\n\n initialize: function(options) {\n this.options = Utils.merge(options, {});\n this.setElement(this._template());\n this.$panel = this.$(\".ui-color-picker-panel\");\n this.$view = this.$(\".ui-color-picker-view\");\n this.$value = this.$(\".ui-color-picker-value\");\n this.$header = this.$(\".ui-color-picker-header\");\n this._build();\n this.visible = false;\n this.value(this.options.value);\n this.$boxes = this.$(\".ui-color-picker-box\");\n var self = this;\n this.$boxes.on(\"click\", function() {\n self.value($(this).css(\"background-color\"));\n self.$header.trigger(\"click\");\n });\n this.$header.on(\"click\", () => {\n self.visible = !self.visible;\n if (self.visible) {\n self.$view.fadeIn(\"fast\");\n } else {\n self.$view.fadeOut(\"fast\");\n }\n });\n },\n\n /** Get/set value */\n value: function(new_val) {\n if (new_val !== undefined && new_val !== null) {\n this.$value.css(\"background-color\", new_val);\n this.$(\".ui-color-picker-box\").empty();\n this.$(this._getValue()).html(this._templateCheck());\n this.options.onchange && this.options.onchange(new_val);\n }\n return this._getValue();\n },\n\n /** Get value from dom */\n _getValue: function() {\n var rgb = this.$value.css(\"background-color\");\n rgb = rgb.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);\n if (rgb) {\n function hex(x) {\n return `0${parseInt(x).toString(16)}`.slice(-2);\n }\n return `#${hex(rgb[1])}${hex(rgb[2])}${hex(rgb[3])}`;\n } else {\n return null;\n }\n },\n\n /** Build color panel */\n _build: function() {\n this._content({ colors: this.colors.base });\n for (var i in this.colors.theme) {\n var line_def = {};\n if (i == 0) {\n line_def[\"bottom\"] = true;\n } else if (i != this.colors.theme.length - 1) {\n line_def[\"top\"] = true;\n line_def[\"bottom\"] = true;\n } else {\n line_def[\"top\"] = true;\n }\n line_def[\"colors\"] = this.colors.theme[i];\n this._content(line_def);\n }\n this._content({ colors: this.colors.standard });\n },\n\n /** Create content */\n _content: function(options) {\n var colors = options.colors;\n var $content = $(this._templateContent());\n var $line = $content.find(\".line\");\n this.$panel.append($content);\n for (var i in colors) {\n var $box = $(this._templateBox(colors[i]));\n if (options.top) {\n $box.css(\"border-top\", \"none\");\n $box.css(\"border-top-left-radius\", \"0px\");\n $box.css(\"border-top-right-radius\", \"0px\");\n }\n if (options.bottom) {\n $box.css(\"border-bottom\", \"none\");\n $box.css(\"border-bottom-left-radius\", \"0px\");\n $box.css(\"border-bottom-right-radius\", \"0px\");\n }\n $line.append($box);\n }\n return $content;\n },\n\n /** Check icon */\n _templateCheck: function() {\n return '
';\n },\n\n /** Content template */\n _templateContent: function() {\n return '
' + '
' + \"
\";\n },\n\n /** Box template */\n _templateBox: function(color) {\n return `
`;\n },\n\n /** Main template */\n _template: function() {\n return (\n '
' +\n '
' +\n '
' +\n '
Select a color
' +\n \"
\" +\n '
' +\n '
' +\n \"
\"\n );\n (\"
\");\n }\n});\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/ui/ui-color-picker.js","/**\n * Parser.js\n * Copyright 2012-13 Mayank Lahiri\n * mlahiri@gmail.com\n * Released under the BSD License.\n *\n * A forgiving Bibtex parser that can:\n * \n * (1) operate in streaming or block mode, extracting entries as dictionaries. \n * (2) convert Latex special characters to UTF-8.\n * (3) best-effort parse malformed entries.\n * (4) run in a CommonJS environment or a browser, without any dependencies.\n * (5) be advanced-compiled by Google Closure Compiler.\n * \n * Handwritten as a labor of love, not auto-generated from a grammar. \n *\n * Modes of usage:\n *\n * (1) Synchronous, string\n *\n * var entries = BibtexParser(text);\n * console.log(entries);\n *\n * (2) Asynchronous, stream\n *\n * var entryCallback = function(entry) { console.log(entry); }\n * var parser = new BibtexParser(entryCallback);\n * parser.parse(chunk1);\n * parser.parse(chunk2);\n * ...\n * \n * @param {text|function(Object)} arg Either a Bibtex string or callback \n * function for processing parsed entries.\n * @constructor\n */\nfunction BibtexParser(arg0) {\n // Determine how this function is to be used\n if (typeof arg0 == 'string') {\n // Passed a string, synchronous call without 'new'\n var tempStorage = {};\n var entries = [];\n function accumulator(entry) {\n entries.push(entry);\n }\n var parser = BibtexParser.call(tempStorage, accumulator);\n parser.parse(arg0);\n return {\n 'entries': entries,\n 'errors': parser.getErrors()\n }\n }\n if (typeof arg0 != 'function') {\n throw 'Invalid parser construction.';\n }\n\n /** @enum {number} */\n this.STATES_ = {\n ENTRY_OR_JUNK: 0,\n OBJECT_TYPE: 1,\n ENTRY_KEY: 2, \n KV_KEY: 3, \n EQUALS: 4,\n KV_VALUE: 5 \n }\n /** @private */ this.DATA_ = {};\n /** @private */ this.CALLBACK_ = arg0;\n /** @private */ this.CHAR_ = 0;\n /** @private */ this.LINE_ = 1;\n /** @private */ this.CHAR_IN_LINE_ = 0;\n /** @private */ this.SKIPWS_ = true;\n /** @private */ this.SKIPCOMMENT_ = true;\n /** @private */ this.PARSETMP_ = {};\n /** @private */ this.SKIPTILLEOL_ = false;\n /** @private */ this.VALBRACES_ = null;\n /** @private */ this.BRACETYPE_ = null;\n /** @private */ this.BRACECOUNT_ = 0;\n /** @private */ this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n /** @private */ this.ERRORS_ = [];\n /** @private */ this.ENTRY_TYPES_ = {\n 'inproceedings' : 1,\n 'proceedings' : 2,\n 'article' : 3,\n 'techreport' : 4,\n 'misc' : 5,\n 'mastersthesis' : 6,\n 'book' : 7,\n 'phdthesis' : 8,\n 'incollection' : 9,\n 'unpublished' : 10,\n 'inbook' : 11,\n 'manual' : 12,\n 'periodical' : 13,\n 'booklet' : 14,\n 'masterthesis' : 15,\n 'conference' : 16\n }\n /** @private */ this.MACROS_ = {\n 'jan' : 'January',\n 'feb' : 'February',\n 'mar' : 'March',\n 'apr' : 'April',\n 'may' : 'May',\n 'jun' : 'June',\n 'jul' : 'July',\n 'aug' : 'August',\n 'sep' : 'September',\n 'oct' : 'October',\n 'nov' : 'November',\n 'dec' : 'December',\n 'Jan' : 'January',\n 'Feb' : 'February',\n 'Mar' : 'March',\n 'Apr' : 'April',\n 'May' : 'May',\n 'Jun' : 'June',\n 'Jul' : 'July',\n 'Aug' : 'August',\n 'Sep' : 'September',\n 'Oct' : 'October',\n 'Nov' : 'November',\n 'Dec' : 'December'\n }\n\n /**\n * Gets an array of all errors encountered during parsing.\n * Array entries are of the format:\n * [ line number, character in line, character in stream, error text ]\n *\n * @returns Array\n * @public\n */\n this.getErrors = function() {\n return this.ERRORS_;\n }\n\n /**\n * Processes a chunk of data\n * @public\n */\n this.parse = function(chunk) {\n for (var i = 0; i < chunk.length; i++)\n this.processCharacter_(chunk[i]);\n }\n\n /**\n * Logs error at current stream position.\n *\n * @private\n */\n this.error_ = function(text) {\n this.ERRORS_.push([ this.LINE_, \n this.CHAR_IN_LINE_,\n this.CHAR_,\n text ])\n }\n\n /**\n * Called after an entire entry has been parsed from the stream.\n * Performs post-processing and invokes the entry callback pointed to by\n * this.CALLBACK_. Parsed (but unprocessed) entry data is in this.DATA_.\n */\n this.processEntry_ = function() {\n var data = this.DATA_;\n if (data.Fields) \n for (var f in data.Fields) {\n var raw = data.Fields[f];\n\n // Convert Latex/Bibtex special characters to UTF-8 equivalents\n for (var i = 0; i < this.CHARCONV_.length; i++) {\n var re = this.CHARCONV_[i][0];\n var rep = this.CHARCONV_[i][1];\n raw = raw.replace(re, rep);\n }\n\n // Basic substitutions\n raw = raw.replace(/[\\n\\r\\t]/g, ' ')\n .replace(/\\s\\s+/g, ' ')\n .replace(/^\\s+|\\s+$/g, '')\n\n // Remove braces and backslashes\n var len = raw.length;\n var processed = '';\n for (var i = 0; i < len; i++) {\n var c = raw[i];\n var skip = false;\n if (c == '\\\\' && i < len-1) \n c = raw[++i];\n else {\n if (c == '{' || c == '}')\n skip = true;\n }\n if (!skip)\n processed += c;\n }\n data.Fields[f] = processed\n }\n\n if (data.ObjectType == 'string') {\n for (var f in data.Fields) { \n this.MACROS_[f] = data.Fields[f];\n }\n } else {\n // Parsed a new Bibtex entry\n this.CALLBACK_(data);\n }\n }\n\n\n /**\n * Processes next character in the stream, invoking the callback after \n * each entry has been found and processed.\n * \n * @private\n * @param {string} c Next character in input stream\n */\n this.processCharacter_ = function(c) {\n // Housekeeping\n this.CHAR_++;\n this.CHAR_IN_LINE_++;\n if (c == '\\n') {\n this.LINE_++;\n this.CHAR_IN_LINE_ = 1;\n }\n\n // Convenience states for skipping whitespace when needed\n if (this.SKIPTILLEOL_) {\n if (c == '\\n')\n this.SKIPTILLEOL_ = false;\n return;\n }\n if (this.SKIPCOMMENT_ && c == '%') {\n this.SKIPTILLEOL_ = true;\n return;\n }\n if (this.SKIPWS_ && /\\s/.test(c))\n return;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n this.SKIPTILLEOL_ = false;\n\n // Main state machine\n var AnotherIteration = true;\n while (AnotherIteration) {\n //console.log(this.LINE_, this.CHAR_IN_LINE_, this.STATE_, c)\n AnotherIteration = false;\n switch(this.STATE_) {\n // -- Scan for an object marker ('@')\n // -- Reset temporary data structure in case previous entry was garbled\n case this.STATES_.ENTRY_OR_JUNK:\n if (c == '@') {\n // SUCCESS: Parsed a valid start-of-object marker.\n // NEXT_STATE: OBJECT_TYPE\n this.STATE_ = this.STATES_.OBJECT_TYPE;\n this.DATA_ = {\n ObjectType : ''\n };\n }\n this.BRACETYPE_ = null;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n\n // Start at first non-whitespace character after start-of-object '@'\n // -- Accept [A-Za-z], break on non-matching character\n // -- Populate this.DATA_.EntryType and this.DATA_.ObjectType\n case this.STATES_.OBJECT_TYPE:\n if (/[A-Za-z]/.test(c)) {\n this.DATA_.ObjectType += c.toLowerCase();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // Break from state and validate object type\n var ot = this.DATA_.ObjectType;\n if (ot == 'comment') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot == 'string') {\n this.DATA_.ObjectType = ot;\n this.DATA_.Fields = {};\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.STATE_ = this.STATES_.KV_KEY;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.PARSETMP_ = {\n Key: ''\n }\n } else {\n if (ot == 'preamble') {\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n if (ot in this.ENTRY_TYPES_) {\n // SUCCESS: Parsed a valid object type.\n // NEXT_STATE: ENTRY_KEY\n this.DATA_.ObjectType = 'entry';\n this.DATA_.EntryType = ot;\n this.DATA_.EntryKey = '';\n this.STATE_ = this.STATES_.ENTRY_KEY;\n AnotherIteration = true;\n } else {\n // ERROR: Unrecognized object type.\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Unrecognized object type: \"' +\n this.DATA_.ObjectType + '\"')\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n }\n }\n }\n }\n }\n break;\n\n // Start at first non-alphabetic character after an entry type\n // -- Populate this.DATA_.EntryKey\n case this.STATES_.ENTRY_KEY:\n if ((c === '{' || c === '(') && this.BRACETYPE_ == null) {\n this.BRACETYPE_ = c;\n this.BRACECOUNT_ = 1;\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n break;\n }\n if (/[,%\\s]/.test(c)) {\n if (this.DATA_.EntryKey.length < 1) { \n // Skip comments and whitespace before entry key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n if (this.BRACETYPE_ == null) {\n // ERROR: No opening brace for object\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('No opening brace for object.');\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n } else {\n // SUCCESS: Parsed an entry key\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n AnotherIteration = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.PARSETMP_.Key= '';\n this.DATA_.Fields = {};\n }\n }\n } else {\n this.DATA_.EntryKey += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n }\n break;\n\n // Start at first non-whitespace/comment character after entry key.\n // -- Populate this.PARSETMP_.Key\n case this.STATES_.KV_KEY:\n // Test for end of entry\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // SUCCESS: Parsed an entry, possible incomplete\n // NEXT_STATE: ENTRY_OR_JUNK\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (/[\\-A-Za-z:]/.test(c)) {\n // Add to key\n this.PARSETMP_.Key += c;\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // Either end of key or we haven't encountered start of key\n if (this.PARSETMP_.Key.length < 1) {\n // Keep going till we see a key\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n } else {\n // SUCCESS: Found full key in K/V pair\n // NEXT_STATE: EQUALS\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.EQUALS;\n AnotherIteration = true;\n }\n }\n break;\n\n // Start at first non-alphabetic character after K/V pair key.\n case this.STATES_.EQUALS:\n if ((c == '}' && this.BRACETYPE_ == '{') ||\n (c == ')' && this.BRACETYPE_ == '(')) {\n // ERROR: K/V pair with key but no value\n // NEXT_STATE: ENTRY_OR_JUNK\n this.error_('Key-value pair has key \"' +\n this.PARSETMP_.Key + '\", but no value.');\n this.processEntry_();\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.ENTRY_OR_JUNK;\n break;\n }\n if (c == '=') {\n // SUCCESS: found an equal signs separating key and value\n // NEXT_STATE: KV_VALUE\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_VALUE;\n this.PARSETMP_.Value = '';\n this.VALBRACES_ = { '\"' : [], '{' : [] };\n }\n break;\n\n // Start at first non-whitespace/comment character after '=' \n // -- Populate this.PARSETMP_.Value\n case this.STATES_.KV_VALUE:\n var delim = this.VALBRACES_;\n var val = this.PARSETMP_.Value;\n var doneParsingValue = false;\n\n // Test for special characters\n if (c == '\"' || c == '{' || c == '}' || c == ',') {\n if (c == ',') {\n // This comma can mean:\n // (1) just another comma literal\n // (2) end of a macro reference\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of a macro reference\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n doneParsingValue = true;\n }\n }\n if (c == '\"') {\n // This quote can mean:\n // (1) opening delimiter\n // (2) closing delimiter\n // (3) literal, if we have a '{' on the stack\n if (0 === delim['\"'].length + delim['{'].length) {\n // opening delimiter\n delim['\"'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n break;\n }\n if (delim['\"'].length == 1 && delim['{'].length == 0 &&\n (val.length==0 || val[val.length-1] != '\\\\')) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // literal, add to value\n }\n }\n if (c == '{') {\n // This brace can mean:\n // (1) opening delimiter\n // (2) stacked verbatim delimiter\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n delim['{'].push(this.CHAR_)\n this.SKIPWS_ = false;\n this.SKIPCOMMENT_ = false;\n } else {\n // literal, add to value\n }\n }\n if (c == '}') {\n // This brace can mean:\n // (1) closing delimiter\n // (2) closing stacked verbatim delimiter\n // (3) end of object definition if value was a macro\n if (0 === delim['\"'].length + delim['{'].length) {\n // end of object definition, after macro\n var macro = this.PARSETMP_.Value.trim();\n if (macro in this.MACROS_) {\n // Successful macro reference\n this.PARSETMP_.Value = this.MACROS_[macro];\n } else {\n // Reference to an undefined macro\n this.error_('Reference to an undefined macro: '+macro);\n }\n AnotherIteration = true;\n doneParsingValue = true;\n } else {\n if (val.length == 0 || val[val.length-1] != '\\\\') {\n if (delim['{'].length > 0) {\n // pop stack for stacked verbatim delimiter\n delim['{'].splice(delim['{'].length-1, 1)\n if (0 == delim['{'].length + delim['\"'].length) {\n // closing delimiter\n doneParsingValue = true;\n } else {\n // end verbatim block\n }\n }\n } else {\n // literal, add to value\n }\n }\n }\n }\n\n // If here, then we are either done parsing the value or \n // have a literal that should be added to the value.\n if (doneParsingValue) {\n // SUCCESS: value parsed\n // NEXT_STATE: KV_KEY\n this.SKIPWS_ = true;\n this.SKIPCOMMENT_ = true;\n this.STATE_ = this.STATES_.KV_KEY;\n this.DATA_.Fields[this.PARSETMP_.Key] = this.PARSETMP_.Value;\n this.PARSETMP_ = { Key: '' };\n this.VALBRACES_ = null;\n } else {\n this.PARSETMP_.Value += c;\n }\n break;\n } // end switch (this.STATE_)\n } // end while(AnotherIteration)\n } // end function processCharacter \n\n /** @private */ this.CHARCONV_ = [\n [ /\\\\space /g, '\\u0020' ],\n [ /\\\\textdollar /g, '\\u0024' ],\n [ /\\\\textquotesingle /g, '\\u0027' ],\n [ /\\\\ast /g, '\\u002A' ],\n [ /\\\\textbackslash /g, '\\u005C' ],\n [ /\\\\\\^\\{\\}/g, '\\u005E' ],\n [ /\\\\textasciigrave /g, '\\u0060' ],\n [ /\\\\lbrace /g, '\\u007B' ],\n [ /\\\\vert /g, '\\u007C' ],\n [ /\\\\rbrace /g, '\\u007D' ],\n [ /\\\\textasciitilde /g, '\\u007E' ],\n [ /\\\\textexclamdown /g, '\\u00A1' ],\n [ /\\\\textcent /g, '\\u00A2' ],\n [ /\\\\textsterling /g, '\\u00A3' ],\n [ /\\\\textcurrency /g, '\\u00A4' ],\n [ /\\\\textyen /g, '\\u00A5' ],\n [ /\\\\textbrokenbar /g, '\\u00A6' ],\n [ /\\\\textsection /g, '\\u00A7' ],\n [ /\\\\textasciidieresis /g, '\\u00A8' ],\n [ /\\\\textcopyright /g, '\\u00A9' ],\n [ /\\\\textordfeminine /g, '\\u00AA' ],\n [ /\\\\guillemotleft /g, '\\u00AB' ],\n [ /\\\\lnot /g, '\\u00AC' ],\n [ /\\\\textregistered /g, '\\u00AE' ],\n [ /\\\\textasciimacron /g, '\\u00AF' ],\n [ /\\\\textdegree /g, '\\u00B0' ],\n [ /\\\\pm /g, '\\u00B1' ],\n [ /\\\\textasciiacute /g, '\\u00B4' ],\n [ /\\\\mathrm\\{\\\\mu\\}/g, '\\u00B5' ],\n [ /\\\\textparagraph /g, '\\u00B6' ],\n [ /\\\\cdot /g, '\\u00B7' ],\n [ /\\\\c\\{\\}/g, '\\u00B8' ],\n [ /\\\\textordmasculine /g, '\\u00BA' ],\n [ /\\\\guillemotright /g, '\\u00BB' ],\n [ /\\\\textonequarter /g, '\\u00BC' ],\n [ /\\\\textonehalf /g, '\\u00BD' ],\n [ /\\\\textthreequarters /g, '\\u00BE' ],\n [ /\\\\textquestiondown /g, '\\u00BF' ],\n [ /\\\\`\\{A\\}/g, '\\u00C0' ],\n [ /\\\\'\\{A\\}/g, '\\u00C1' ],\n [ /\\\\\\^\\{A\\}/g, '\\u00C2' ],\n [ /\\\\~\\{A\\}/g, '\\u00C3' ],\n [ /\\\\\"\\{A\\}/g, '\\u00C4' ],\n [ /\\\\AA /g, '\\u00C5' ],\n [ /\\\\AE /g, '\\u00C6' ],\n [ /\\\\c\\{C\\}/g, '\\u00C7' ],\n [ /\\\\`\\{E\\}/g, '\\u00C8' ],\n [ /\\\\'\\{E\\}/g, '\\u00C9' ],\n [ /\\\\\\^\\{E\\}/g, '\\u00CA' ],\n [ /\\\\\"\\{E\\}/g, '\\u00CB' ],\n [ /\\\\`\\{I\\}/g, '\\u00CC' ],\n [ /\\\\'\\{I\\}/g, '\\u00CD' ],\n [ /\\\\\\^\\{I\\}/g, '\\u00CE' ],\n [ /\\\\\"\\{I\\}/g, '\\u00CF' ],\n [ /\\\\DH /g, '\\u00D0' ],\n [ /\\\\~\\{N\\}/g, '\\u00D1' ],\n [ /\\\\`\\{O\\}/g, '\\u00D2' ],\n [ /\\\\'\\{O\\}/g, '\\u00D3' ],\n [ /\\\\\\^\\{O\\}/g, '\\u00D4' ],\n [ /\\\\~\\{O\\}/g, '\\u00D5' ],\n [ /\\\\\"\\{O\\}/g, '\\u00D6' ],\n [ /\\\\texttimes /g, '\\u00D7' ],\n [ /\\\\O /g, '\\u00D8' ],\n [ /\\\\`\\{U\\}/g, '\\u00D9' ],\n [ /\\\\'\\{U\\}/g, '\\u00DA' ],\n [ /\\\\\\^\\{U\\}/g, '\\u00DB' ],\n [ /\\\\\"\\{U\\}/g, '\\u00DC' ],\n [ /\\\\'\\{Y\\}/g, '\\u00DD' ],\n [ /\\\\TH /g, '\\u00DE' ],\n [ /\\\\ss /g, '\\u00DF' ],\n [ /\\\\`\\{a\\}/g, '\\u00E0' ],\n [ /\\\\'\\{a\\}/g, '\\u00E1' ],\n [ /\\\\\\^\\{a\\}/g, '\\u00E2' ],\n [ /\\\\~\\{a\\}/g, '\\u00E3' ],\n [ /\\\\\"\\{a\\}/g, '\\u00E4' ],\n [ /\\\\aa /g, '\\u00E5' ],\n [ /\\\\ae /g, '\\u00E6' ],\n [ /\\\\c\\{c\\}/g, '\\u00E7' ],\n [ /\\\\`\\{e\\}/g, '\\u00E8' ],\n [ /\\\\'\\{e\\}/g, '\\u00E9' ],\n [ /\\\\\\^\\{e\\}/g, '\\u00EA' ],\n [ /\\\\\"\\{e\\}/g, '\\u00EB' ],\n [ /\\\\`\\{\\\\i\\}/g, '\\u00EC' ],\n [ /\\\\'\\{\\\\i\\}/g, '\\u00ED' ],\n [ /\\\\\\^\\{\\\\i\\}/g, '\\u00EE' ],\n [ /\\\\\"\\{\\\\i\\}/g, '\\u00EF' ],\n [ /\\\\dh /g, '\\u00F0' ],\n [ /\\\\~\\{n\\}/g, '\\u00F1' ],\n [ /\\\\`\\{o\\}/g, '\\u00F2' ],\n [ /\\\\'\\{o\\}/g, '\\u00F3' ],\n [ /\\\\\\^\\{o\\}/g, '\\u00F4' ],\n [ /\\\\~\\{o\\}/g, '\\u00F5' ],\n [ /\\\\\"\\{o\\}/g, '\\u00F6' ],\n [ /\\\\div /g, '\\u00F7' ],\n [ /\\\\o /g, '\\u00F8' ],\n [ /\\\\`\\{u\\}/g, '\\u00F9' ],\n [ /\\\\'\\{u\\}/g, '\\u00FA' ],\n [ /\\\\\\^\\{u\\}/g, '\\u00FB' ],\n [ /\\\\\"\\{u\\}/g, '\\u00FC' ],\n [ /\\\\'\\{y\\}/g, '\\u00FD' ],\n [ /\\\\th /g, '\\u00FE' ],\n [ /\\\\\"\\{y\\}/g, '\\u00FF' ],\n [ /\\\\=\\{A\\}/g, '\\u0100' ],\n [ /\\\\=\\{a\\}/g, '\\u0101' ],\n [ /\\\\u\\{A\\}/g, '\\u0102' ],\n [ /\\\\u\\{a\\}/g, '\\u0103' ],\n [ /\\\\k\\{A\\}/g, '\\u0104' ],\n [ /\\\\k\\{a\\}/g, '\\u0105' ],\n [ /\\\\'\\{C\\}/g, '\\u0106' ],\n [ /\\\\'\\{c\\}/g, '\\u0107' ],\n [ /\\\\\\^\\{C\\}/g, '\\u0108' ],\n [ /\\\\\\^\\{c\\}/g, '\\u0109' ],\n [ /\\\\.\\{C\\}/g, '\\u010A' ],\n [ /\\\\.\\{c\\}/g, '\\u010B' ],\n [ /\\\\v\\{C\\}/g, '\\u010C' ],\n [ /\\\\v\\{c\\}/g, '\\u010D' ],\n [ /\\\\v\\{D\\}/g, '\\u010E' ],\n [ /\\\\v\\{d\\}/g, '\\u010F' ],\n [ /\\\\DJ /g, '\\u0110' ],\n [ /\\\\dj /g, '\\u0111' ],\n [ /\\\\=\\{E\\}/g, '\\u0112' ],\n [ /\\\\=\\{e\\}/g, '\\u0113' ],\n [ /\\\\u\\{E\\}/g, '\\u0114' ],\n [ /\\\\u\\{e\\}/g, '\\u0115' ],\n [ /\\\\.\\{E\\}/g, '\\u0116' ],\n [ /\\\\.\\{e\\}/g, '\\u0117' ],\n [ /\\\\k\\{E\\}/g, '\\u0118' ],\n [ /\\\\k\\{e\\}/g, '\\u0119' ],\n [ /\\\\v\\{E\\}/g, '\\u011A' ],\n [ /\\\\v\\{e\\}/g, '\\u011B' ],\n [ /\\\\\\^\\{G\\}/g, '\\u011C' ],\n [ /\\\\\\^\\{g\\}/g, '\\u011D' ],\n [ /\\\\u\\{G\\}/g, '\\u011E' ],\n [ /\\\\u\\{g\\}/g, '\\u011F' ],\n [ /\\\\.\\{G\\}/g, '\\u0120' ],\n [ /\\\\.\\{g\\}/g, '\\u0121' ],\n [ /\\\\c\\{G\\}/g, '\\u0122' ],\n [ /\\\\c\\{g\\}/g, '\\u0123' ],\n [ /\\\\\\^\\{H\\}/g, '\\u0124' ],\n [ /\\\\\\^\\{h\\}/g, '\\u0125' ],\n [ /\\\\Elzxh /g, '\\u0127' ],\n [ /\\\\~\\{I\\}/g, '\\u0128' ],\n [ /\\\\~\\{\\\\i\\}/g, '\\u0129' ],\n [ /\\\\=\\{I\\}/g, '\\u012A' ],\n [ /\\\\=\\{\\\\i\\}/g, '\\u012B' ],\n [ /\\\\u\\{I\\}/g, '\\u012C' ],\n [ /\\\\u\\{\\\\i\\}/g, '\\u012D' ],\n [ /\\\\k\\{I\\}/g, '\\u012E' ],\n [ /\\\\k\\{i\\}/g, '\\u012F' ],\n [ /\\\\.\\{I\\}/g, '\\u0130' ],\n [ /\\\\i /g, '\\u0131' ],\n [ /\\\\\\^\\{J\\}/g, '\\u0134' ],\n [ /\\\\\\^\\{\\\\j\\}/g, '\\u0135' ],\n [ /\\\\c\\{K\\}/g, '\\u0136' ],\n [ /\\\\c\\{k\\}/g, '\\u0137' ],\n [ /\\\\'\\{L\\}/g, '\\u0139' ],\n [ /\\\\'\\{l\\}/g, '\\u013A' ],\n [ /\\\\c\\{L\\}/g, '\\u013B' ],\n [ /\\\\c\\{l\\}/g, '\\u013C' ],\n [ /\\\\v\\{L\\}/g, '\\u013D' ],\n [ /\\\\v\\{l\\}/g, '\\u013E' ],\n [ /\\\\L /g, '\\u0141' ],\n [ /\\\\l /g, '\\u0142' ],\n [ /\\\\'\\{N\\}/g, '\\u0143' ],\n [ /\\\\'\\{n\\}/g, '\\u0144' ],\n [ /\\\\c\\{N\\}/g, '\\u0145' ],\n [ /\\\\c\\{n\\}/g, '\\u0146' ],\n [ /\\\\v\\{N\\}/g, '\\u0147' ],\n [ /\\\\v\\{n\\}/g, '\\u0148' ],\n [ /\\\\NG /g, '\\u014A' ],\n [ /\\\\ng /g, '\\u014B' ],\n [ /\\\\=\\{O\\}/g, '\\u014C' ],\n [ /\\\\=\\{o\\}/g, '\\u014D' ],\n [ /\\\\u\\{O\\}/g, '\\u014E' ],\n [ /\\\\u\\{o\\}/g, '\\u014F' ],\n [ /\\\\H\\{O\\}/g, '\\u0150' ],\n [ /\\\\H\\{o\\}/g, '\\u0151' ],\n [ /\\\\OE /g, '\\u0152' ],\n [ /\\\\oe /g, '\\u0153' ],\n [ /\\\\'\\{R\\}/g, '\\u0154' ],\n [ /\\\\'\\{r\\}/g, '\\u0155' ],\n [ /\\\\c\\{R\\}/g, '\\u0156' ],\n [ /\\\\c\\{r\\}/g, '\\u0157' ],\n [ /\\\\v\\{R\\}/g, '\\u0158' ],\n [ /\\\\v\\{r\\}/g, '\\u0159' ],\n [ /\\\\'\\{S\\}/g, '\\u015A' ],\n [ /\\\\'\\{s\\}/g, '\\u015B' ],\n [ /\\\\\\^\\{S\\}/g, '\\u015C' ],\n [ /\\\\\\^\\{s\\}/g, '\\u015D' ],\n [ /\\\\c\\{S\\}/g, '\\u015E' ],\n [ /\\\\c\\{s\\}/g, '\\u015F' ],\n [ /\\\\v\\{S\\}/g, '\\u0160' ],\n [ /\\\\v\\{s\\}/g, '\\u0161' ],\n [ /\\\\c\\{T\\}/g, '\\u0162' ],\n [ /\\\\c\\{t\\}/g, '\\u0163' ],\n [ /\\\\v\\{T\\}/g, '\\u0164' ],\n [ /\\\\v\\{t\\}/g, '\\u0165' ],\n [ /\\\\~\\{U\\}/g, '\\u0168' ],\n [ /\\\\~\\{u\\}/g, '\\u0169' ],\n [ /\\\\=\\{U\\}/g, '\\u016A' ],\n [ /\\\\=\\{u\\}/g, '\\u016B' ],\n [ /\\\\u\\{U\\}/g, '\\u016C' ],\n [ /\\\\u\\{u\\}/g, '\\u016D' ],\n [ /\\\\r\\{U\\}/g, '\\u016E' ],\n [ /\\\\r\\{u\\}/g, '\\u016F' ],\n [ /\\\\H\\{U\\}/g, '\\u0170' ],\n [ /\\\\H\\{u\\}/g, '\\u0171' ],\n [ /\\\\k\\{U\\}/g, '\\u0172' ],\n [ /\\\\k\\{u\\}/g, '\\u0173' ],\n [ /\\\\\\^\\{W\\}/g, '\\u0174' ],\n [ /\\\\\\^\\{w\\}/g, '\\u0175' ],\n [ /\\\\\\^\\{Y\\}/g, '\\u0176' ],\n [ /\\\\\\^\\{y\\}/g, '\\u0177' ],\n [ /\\\\\"\\{Y\\}/g, '\\u0178' ],\n [ /\\\\'\\{Z\\}/g, '\\u0179' ],\n [ /\\\\'\\{z\\}/g, '\\u017A' ],\n [ /\\\\.\\{Z\\}/g, '\\u017B' ],\n [ /\\\\.\\{z\\}/g, '\\u017C' ],\n [ /\\\\v\\{Z\\}/g, '\\u017D' ],\n [ /\\\\v\\{z\\}/g, '\\u017E' ],\n [ /\\\\texthvlig /g, '\\u0195' ],\n [ /\\\\textnrleg /g, '\\u019E' ],\n [ /\\\\eth /g, '\\u01AA' ],\n [ /\\\\textdoublepipe /g, '\\u01C2' ],\n [ /\\\\'\\{g\\}/g, '\\u01F5' ],\n [ /\\\\Elztrna /g, '\\u0250' ],\n [ /\\\\Elztrnsa /g, '\\u0252' ],\n [ /\\\\Elzopeno /g, '\\u0254' ],\n [ /\\\\Elzrtld /g, '\\u0256' ],\n [ /\\\\Elzschwa /g, '\\u0259' ],\n [ /\\\\varepsilon /g, '\\u025B' ],\n [ /\\\\Elzpgamma /g, '\\u0263' ],\n [ /\\\\Elzpbgam /g, '\\u0264' ],\n [ /\\\\Elztrnh /g, '\\u0265' ],\n [ /\\\\Elzbtdl /g, '\\u026C' ],\n [ /\\\\Elzrtll /g, '\\u026D' ],\n [ /\\\\Elztrnm /g, '\\u026F' ],\n [ /\\\\Elztrnmlr /g, '\\u0270' ],\n [ /\\\\Elzltlmr /g, '\\u0271' ],\n [ /\\\\Elzltln /g, '\\u0272' ],\n [ /\\\\Elzrtln /g, '\\u0273' ],\n [ /\\\\Elzclomeg /g, '\\u0277' ],\n [ /\\\\textphi /g, '\\u0278' ],\n [ /\\\\Elztrnr /g, '\\u0279' ],\n [ /\\\\Elztrnrl /g, '\\u027A' ],\n [ /\\\\Elzrttrnr /g, '\\u027B' ],\n [ /\\\\Elzrl /g, '\\u027C' ],\n [ /\\\\Elzrtlr /g, '\\u027D' ],\n [ /\\\\Elzfhr /g, '\\u027E' ],\n [ /\\\\Elzrtls /g, '\\u0282' ],\n [ /\\\\Elzesh /g, '\\u0283' ],\n [ /\\\\Elztrnt /g, '\\u0287' ],\n [ /\\\\Elzrtlt /g, '\\u0288' ],\n [ /\\\\Elzpupsil /g, '\\u028A' ],\n [ /\\\\Elzpscrv /g, '\\u028B' ],\n [ /\\\\Elzinvv /g, '\\u028C' ],\n [ /\\\\Elzinvw /g, '\\u028D' ],\n [ /\\\\Elztrny /g, '\\u028E' ],\n [ /\\\\Elzrtlz /g, '\\u0290' ],\n [ /\\\\Elzyogh /g, '\\u0292' ],\n [ /\\\\Elzglst /g, '\\u0294' ],\n [ /\\\\Elzreglst /g, '\\u0295' ],\n [ /\\\\Elzinglst /g, '\\u0296' ],\n [ /\\\\textturnk /g, '\\u029E' ],\n [ /\\\\Elzdyogh /g, '\\u02A4' ],\n [ /\\\\Elztesh /g, '\\u02A7' ],\n [ /\\\\textasciicaron /g, '\\u02C7' ],\n [ /\\\\Elzverts /g, '\\u02C8' ],\n [ /\\\\Elzverti /g, '\\u02CC' ],\n [ /\\\\Elzlmrk /g, '\\u02D0' ],\n [ /\\\\Elzhlmrk /g, '\\u02D1' ],\n [ /\\\\Elzsbrhr /g, '\\u02D2' ],\n [ /\\\\Elzsblhr /g, '\\u02D3' ],\n [ /\\\\Elzrais /g, '\\u02D4' ],\n [ /\\\\Elzlow /g, '\\u02D5' ],\n [ /\\\\textasciibreve /g, '\\u02D8' ],\n [ /\\\\textperiodcentered /g, '\\u02D9' ],\n [ /\\\\r\\{\\}/g, '\\u02DA' ],\n [ /\\\\k\\{\\}/g, '\\u02DB' ],\n [ /\\\\texttildelow /g, '\\u02DC' ],\n [ /\\\\H\\{\\}/g, '\\u02DD' ],\n [ /\\\\tone\\{55\\}/g, '\\u02E5' ],\n [ /\\\\tone\\{44\\}/g, '\\u02E6' ],\n [ /\\\\tone\\{33\\}/g, '\\u02E7' ],\n [ /\\\\tone\\{22\\}/g, '\\u02E8' ],\n [ /\\\\tone\\{11\\}/g, '\\u02E9' ],\n [ /\\\\cyrchar\\\\C/g, '\\u030F' ],\n [ /\\\\Elzpalh /g, '\\u0321' ],\n [ /\\\\Elzrh /g, '\\u0322' ],\n [ /\\\\Elzsbbrg /g, '\\u032A' ],\n [ /\\\\Elzxl /g, '\\u0335' ],\n [ /\\\\Elzbar /g, '\\u0336' ],\n [ /\\\\'\\{A\\}/g, '\\u0386' ],\n [ /\\\\'\\{E\\}/g, '\\u0388' ],\n [ /\\\\'\\{H\\}/g, '\\u0389' ],\n [ /\\\\'\\{\\}\\{I\\}/g, '\\u038A' ],\n [ /\\\\'\\{\\}O/g, '\\u038C' ],\n [ /\\\\mathrm\\{'Y\\}/g, '\\u038E' ],\n [ /\\\\mathrm\\{'\\\\Omega\\}/g, '\\u038F' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\iota\\}\\}/g, '\\u0390' ],\n [ /\\\\Alpha /g, '\\u0391' ],\n [ /\\\\Beta /g, '\\u0392' ],\n [ /\\\\Gamma /g, '\\u0393' ],\n [ /\\\\Delta /g, '\\u0394' ],\n [ /\\\\Epsilon /g, '\\u0395' ],\n [ /\\\\Zeta /g, '\\u0396' ],\n [ /\\\\Eta /g, '\\u0397' ],\n [ /\\\\Theta /g, '\\u0398' ],\n [ /\\\\Iota /g, '\\u0399' ],\n [ /\\\\Kappa /g, '\\u039A' ],\n [ /\\\\Lambda /g, '\\u039B' ],\n [ /\\\\Xi /g, '\\u039E' ],\n [ /\\\\Pi /g, '\\u03A0' ],\n [ /\\\\Rho /g, '\\u03A1' ],\n [ /\\\\Sigma /g, '\\u03A3' ],\n [ /\\\\Tau /g, '\\u03A4' ],\n [ /\\\\Upsilon /g, '\\u03A5' ],\n [ /\\\\Phi /g, '\\u03A6' ],\n [ /\\\\Chi /g, '\\u03A7' ],\n [ /\\\\Psi /g, '\\u03A8' ],\n [ /\\\\Omega /g, '\\u03A9' ],\n [ /\\\\mathrm\\{\\\\ddot\\{I\\}\\}/g, '\\u03AA' ],\n [ /\\\\mathrm\\{\\\\ddot\\{Y\\}\\}/g, '\\u03AB' ],\n [ /\\\\'\\{\\$\\\\alpha\\$\\}/g, '\\u03AC' ],\n [ /\\\\acute\\{\\\\epsilon\\}/g, '\\u03AD' ],\n [ /\\\\acute\\{\\\\eta\\}/g, '\\u03AE' ],\n [ /\\\\acute\\{\\\\iota\\}/g, '\\u03AF' ],\n [ /\\\\acute\\{\\\\ddot\\{\\\\upsilon\\}\\}/g, '\\u03B0' ],\n [ /\\\\alpha /g, '\\u03B1' ],\n [ /\\\\beta /g, '\\u03B2' ],\n [ /\\\\gamma /g, '\\u03B3' ],\n [ /\\\\delta /g, '\\u03B4' ],\n [ /\\\\epsilon /g, '\\u03B5' ],\n [ /\\\\zeta /g, '\\u03B6' ],\n [ /\\\\eta /g, '\\u03B7' ],\n [ /\\\\texttheta /g, '\\u03B8' ],\n [ /\\\\iota /g, '\\u03B9' ],\n [ /\\\\kappa /g, '\\u03BA' ],\n [ /\\\\lambda /g, '\\u03BB' ],\n [ /\\\\mu /g, '\\u03BC' ],\n [ /\\\\nu /g, '\\u03BD' ],\n [ /\\\\xi /g, '\\u03BE' ],\n [ /\\\\pi /g, '\\u03C0' ],\n [ /\\\\rho /g, '\\u03C1' ],\n [ /\\\\varsigma /g, '\\u03C2' ],\n [ /\\\\sigma /g, '\\u03C3' ],\n [ /\\\\tau /g, '\\u03C4' ],\n [ /\\\\upsilon /g, '\\u03C5' ],\n [ /\\\\varphi /g, '\\u03C6' ],\n [ /\\\\chi /g, '\\u03C7' ],\n [ /\\\\psi /g, '\\u03C8' ],\n [ /\\\\omega /g, '\\u03C9' ],\n [ /\\\\ddot\\{\\\\iota\\}/g, '\\u03CA' ],\n [ /\\\\ddot\\{\\\\upsilon\\}/g, '\\u03CB' ],\n [ /\\\\'\\{o\\}/g, '\\u03CC' ],\n [ /\\\\acute\\{\\\\upsilon\\}/g, '\\u03CD' ],\n [ /\\\\acute\\{\\\\omega\\}/g, '\\u03CE' ],\n [ /\\\\Pisymbol\\{ppi022\\}\\{87\\}/g, '\\u03D0' ],\n [ /\\\\textvartheta /g, '\\u03D1' ],\n [ /\\\\Upsilon /g, '\\u03D2' ],\n [ /\\\\phi /g, '\\u03D5' ],\n [ /\\\\varpi /g, '\\u03D6' ],\n [ /\\\\Stigma /g, '\\u03DA' ],\n [ /\\\\Digamma /g, '\\u03DC' ],\n [ /\\\\digamma /g, '\\u03DD' ],\n [ /\\\\Koppa /g, '\\u03DE' ],\n [ /\\\\Sampi /g, '\\u03E0' ],\n [ /\\\\varkappa /g, '\\u03F0' ],\n [ /\\\\varrho /g, '\\u03F1' ],\n [ /\\\\textTheta /g, '\\u03F4' ],\n [ /\\\\backepsilon /g, '\\u03F6' ],\n [ /\\\\cyrchar\\\\CYRYO /g, '\\u0401' ],\n [ /\\\\cyrchar\\\\CYRDJE /g, '\\u0402' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRG\\}/g, '\\u0403' ],\n [ /\\\\cyrchar\\\\CYRIE /g, '\\u0404' ],\n [ /\\\\cyrchar\\\\CYRDZE /g, '\\u0405' ],\n [ /\\\\cyrchar\\\\CYRII /g, '\\u0406' ],\n [ /\\\\cyrchar\\\\CYRYI /g, '\\u0407' ],\n [ /\\\\cyrchar\\\\CYRJE /g, '\\u0408' ],\n [ /\\\\cyrchar\\\\CYRLJE /g, '\\u0409' ],\n [ /\\\\cyrchar\\\\CYRNJE /g, '\\u040A' ],\n [ /\\\\cyrchar\\\\CYRTSHE /g, '\\u040B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\CYRK\\}/g, '\\u040C' ],\n [ /\\\\cyrchar\\\\CYRUSHRT /g, '\\u040E' ],\n [ /\\\\cyrchar\\\\CYRDZHE /g, '\\u040F' ],\n [ /\\\\cyrchar\\\\CYRA /g, '\\u0410' ],\n [ /\\\\cyrchar\\\\CYRB /g, '\\u0411' ],\n [ /\\\\cyrchar\\\\CYRV /g, '\\u0412' ],\n [ /\\\\cyrchar\\\\CYRG /g, '\\u0413' ],\n [ /\\\\cyrchar\\\\CYRD /g, '\\u0414' ],\n [ /\\\\cyrchar\\\\CYRE /g, '\\u0415' ],\n [ /\\\\cyrchar\\\\CYRZH /g, '\\u0416' ],\n [ /\\\\cyrchar\\\\CYRZ /g, '\\u0417' ],\n [ /\\\\cyrchar\\\\CYRI /g, '\\u0418' ],\n [ /\\\\cyrchar\\\\CYRISHRT /g, '\\u0419' ],\n [ /\\\\cyrchar\\\\CYRK /g, '\\u041A' ],\n [ /\\\\cyrchar\\\\CYRL /g, '\\u041B' ],\n [ /\\\\cyrchar\\\\CYRM /g, '\\u041C' ],\n [ /\\\\cyrchar\\\\CYRN /g, '\\u041D' ],\n [ /\\\\cyrchar\\\\CYRO /g, '\\u041E' ],\n [ /\\\\cyrchar\\\\CYRP /g, '\\u041F' ],\n [ /\\\\cyrchar\\\\CYRR /g, '\\u0420' ],\n [ /\\\\cyrchar\\\\CYRS /g, '\\u0421' ],\n [ /\\\\cyrchar\\\\CYRT /g, '\\u0422' ],\n [ /\\\\cyrchar\\\\CYRU /g, '\\u0423' ],\n [ /\\\\cyrchar\\\\CYRF /g, '\\u0424' ],\n [ /\\\\cyrchar\\\\CYRH /g, '\\u0425' ],\n [ /\\\\cyrchar\\\\CYRC /g, '\\u0426' ],\n [ /\\\\cyrchar\\\\CYRCH /g, '\\u0427' ],\n [ /\\\\cyrchar\\\\CYRSH /g, '\\u0428' ],\n [ /\\\\cyrchar\\\\CYRSHCH /g, '\\u0429' ],\n [ /\\\\cyrchar\\\\CYRHRDSN /g, '\\u042A' ],\n [ /\\\\cyrchar\\\\CYRERY /g, '\\u042B' ],\n [ /\\\\cyrchar\\\\CYRSFTSN /g, '\\u042C' ],\n [ /\\\\cyrchar\\\\CYREREV /g, '\\u042D' ],\n [ /\\\\cyrchar\\\\CYRYU /g, '\\u042E' ],\n [ /\\\\cyrchar\\\\CYRYA /g, '\\u042F' ],\n [ /\\\\cyrchar\\\\cyra /g, '\\u0430' ],\n [ /\\\\cyrchar\\\\cyrb /g, '\\u0431' ],\n [ /\\\\cyrchar\\\\cyrv /g, '\\u0432' ],\n [ /\\\\cyrchar\\\\cyrg /g, '\\u0433' ],\n [ /\\\\cyrchar\\\\cyrd /g, '\\u0434' ],\n [ /\\\\cyrchar\\\\cyre /g, '\\u0435' ],\n [ /\\\\cyrchar\\\\cyrzh /g, '\\u0436' ],\n [ /\\\\cyrchar\\\\cyrz /g, '\\u0437' ],\n [ /\\\\cyrchar\\\\cyri /g, '\\u0438' ],\n [ /\\\\cyrchar\\\\cyrishrt /g, '\\u0439' ],\n [ /\\\\cyrchar\\\\cyrk /g, '\\u043A' ],\n [ /\\\\cyrchar\\\\cyrl /g, '\\u043B' ],\n [ /\\\\cyrchar\\\\cyrm /g, '\\u043C' ],\n [ /\\\\cyrchar\\\\cyrn /g, '\\u043D' ],\n [ /\\\\cyrchar\\\\cyro /g, '\\u043E' ],\n [ /\\\\cyrchar\\\\cyrp /g, '\\u043F' ],\n [ /\\\\cyrchar\\\\cyrr /g, '\\u0440' ],\n [ /\\\\cyrchar\\\\cyrs /g, '\\u0441' ],\n [ /\\\\cyrchar\\\\cyrt /g, '\\u0442' ],\n [ /\\\\cyrchar\\\\cyru /g, '\\u0443' ],\n [ /\\\\cyrchar\\\\cyrf /g, '\\u0444' ],\n [ /\\\\cyrchar\\\\cyrh /g, '\\u0445' ],\n [ /\\\\cyrchar\\\\cyrc /g, '\\u0446' ],\n [ /\\\\cyrchar\\\\cyrch /g, '\\u0447' ],\n [ /\\\\cyrchar\\\\cyrsh /g, '\\u0448' ],\n [ /\\\\cyrchar\\\\cyrshch /g, '\\u0449' ],\n [ /\\\\cyrchar\\\\cyrhrdsn /g, '\\u044A' ],\n [ /\\\\cyrchar\\\\cyrery /g, '\\u044B' ],\n [ /\\\\cyrchar\\\\cyrsftsn /g, '\\u044C' ],\n [ /\\\\cyrchar\\\\cyrerev /g, '\\u044D' ],\n [ /\\\\cyrchar\\\\cyryu /g, '\\u044E' ],\n [ /\\\\cyrchar\\\\cyrya /g, '\\u044F' ],\n [ /\\\\cyrchar\\\\cyryo /g, '\\u0451' ],\n [ /\\\\cyrchar\\\\cyrdje /g, '\\u0452' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrg\\}/g, '\\u0453' ],\n [ /\\\\cyrchar\\\\cyrie /g, '\\u0454' ],\n [ /\\\\cyrchar\\\\cyrdze /g, '\\u0455' ],\n [ /\\\\cyrchar\\\\cyrii /g, '\\u0456' ],\n [ /\\\\cyrchar\\\\cyryi /g, '\\u0457' ],\n [ /\\\\cyrchar\\\\cyrje /g, '\\u0458' ],\n [ /\\\\cyrchar\\\\cyrlje /g, '\\u0459' ],\n [ /\\\\cyrchar\\\\cyrnje /g, '\\u045A' ],\n [ /\\\\cyrchar\\\\cyrtshe /g, '\\u045B' ],\n [ /\\\\cyrchar\\{\\\\'\\\\cyrk\\}/g, '\\u045C' ],\n [ /\\\\cyrchar\\\\cyrushrt /g, '\\u045E' ],\n [ /\\\\cyrchar\\\\cyrdzhe /g, '\\u045F' ],\n [ /\\\\cyrchar\\\\CYROMEGA /g, '\\u0460' ],\n [ /\\\\cyrchar\\\\cyromega /g, '\\u0461' ],\n [ /\\\\cyrchar\\\\CYRYAT /g, '\\u0462' ],\n [ /\\\\cyrchar\\\\CYRIOTE /g, '\\u0464' ],\n [ /\\\\cyrchar\\\\cyriote /g, '\\u0465' ],\n [ /\\\\cyrchar\\\\CYRLYUS /g, '\\u0466' ],\n [ /\\\\cyrchar\\\\cyrlyus /g, '\\u0467' ],\n [ /\\\\cyrchar\\\\CYRIOTLYUS /g, '\\u0468' ],\n [ /\\\\cyrchar\\\\cyriotlyus /g, '\\u0469' ],\n [ /\\\\cyrchar\\\\CYRBYUS /g, '\\u046A' ],\n [ /\\\\cyrchar\\\\CYRIOTBYUS /g, '\\u046C' ],\n [ /\\\\cyrchar\\\\cyriotbyus /g, '\\u046D' ],\n [ /\\\\cyrchar\\\\CYRKSI /g, '\\u046E' ],\n [ /\\\\cyrchar\\\\cyrksi /g, '\\u046F' ],\n [ /\\\\cyrchar\\\\CYRPSI /g, '\\u0470' ],\n [ /\\\\cyrchar\\\\cyrpsi /g, '\\u0471' ],\n [ /\\\\cyrchar\\\\CYRFITA /g, '\\u0472' ],\n [ /\\\\cyrchar\\\\CYRIZH /g, '\\u0474' ],\n [ /\\\\cyrchar\\\\CYRUK /g, '\\u0478' ],\n [ /\\\\cyrchar\\\\cyruk /g, '\\u0479' ],\n [ /\\\\cyrchar\\\\CYROMEGARND /g, '\\u047A' ],\n [ /\\\\cyrchar\\\\cyromegarnd /g, '\\u047B' ],\n [ /\\\\cyrchar\\\\CYROMEGATITLO /g, '\\u047C' ],\n [ /\\\\cyrchar\\\\cyromegatitlo /g, '\\u047D' ],\n [ /\\\\cyrchar\\\\CYROT /g, '\\u047E' ],\n [ /\\\\cyrchar\\\\cyrot /g, '\\u047F' ],\n [ /\\\\cyrchar\\\\CYRKOPPA /g, '\\u0480' ],\n [ /\\\\cyrchar\\\\cyrkoppa /g, '\\u0481' ],\n [ /\\\\cyrchar\\\\cyrthousands /g, '\\u0482' ],\n [ /\\\\cyrchar\\\\cyrhundredthousands /g, '\\u0488' ],\n [ /\\\\cyrchar\\\\cyrmillions /g, '\\u0489' ],\n [ /\\\\cyrchar\\\\CYRSEMISFTSN /g, '\\u048C' ],\n [ /\\\\cyrchar\\\\cyrsemisftsn /g, '\\u048D' ],\n [ /\\\\cyrchar\\\\CYRRTICK /g, '\\u048E' ],\n [ /\\\\cyrchar\\\\cyrrtick /g, '\\u048F' ],\n [ /\\\\cyrchar\\\\CYRGUP /g, '\\u0490' ],\n [ /\\\\cyrchar\\\\cyrgup /g, '\\u0491' ],\n [ /\\\\cyrchar\\\\CYRGHCRS /g, '\\u0492' ],\n [ /\\\\cyrchar\\\\cyrghcrs /g, '\\u0493' ],\n [ /\\\\cyrchar\\\\CYRGHK /g, '\\u0494' ],\n [ /\\\\cyrchar\\\\cyrghk /g, '\\u0495' ],\n [ /\\\\cyrchar\\\\CYRZHDSC /g, '\\u0496' ],\n [ /\\\\cyrchar\\\\cyrzhdsc /g, '\\u0497' ],\n [ /\\\\cyrchar\\\\CYRZDSC /g, '\\u0498' ],\n [ /\\\\cyrchar\\\\cyrzdsc /g, '\\u0499' ],\n [ /\\\\cyrchar\\\\CYRKDSC /g, '\\u049A' ],\n [ /\\\\cyrchar\\\\cyrkdsc /g, '\\u049B' ],\n [ /\\\\cyrchar\\\\CYRKVCRS /g, '\\u049C' ],\n [ /\\\\cyrchar\\\\cyrkvcrs /g, '\\u049D' ],\n [ /\\\\cyrchar\\\\CYRKHCRS /g, '\\u049E' ],\n [ /\\\\cyrchar\\\\cyrkhcrs /g, '\\u049F' ],\n [ /\\\\cyrchar\\\\CYRKBEAK /g, '\\u04A0' ],\n [ /\\\\cyrchar\\\\cyrkbeak /g, '\\u04A1' ],\n [ /\\\\cyrchar\\\\CYRNDSC /g, '\\u04A2' ],\n [ /\\\\cyrchar\\\\cyrndsc /g, '\\u04A3' ],\n [ /\\\\cyrchar\\\\CYRNG /g, '\\u04A4' ],\n [ /\\\\cyrchar\\\\cyrng /g, '\\u04A5' ],\n [ /\\\\cyrchar\\\\CYRPHK /g, '\\u04A6' ],\n [ /\\\\cyrchar\\\\cyrphk /g, '\\u04A7' ],\n [ /\\\\cyrchar\\\\CYRABHHA /g, '\\u04A8' ],\n [ /\\\\cyrchar\\\\cyrabhha /g, '\\u04A9' ],\n [ /\\\\cyrchar\\\\CYRSDSC /g, '\\u04AA' ],\n [ /\\\\cyrchar\\\\cyrsdsc /g, '\\u04AB' ],\n [ /\\\\cyrchar\\\\CYRTDSC /g, '\\u04AC' ],\n [ /\\\\cyrchar\\\\cyrtdsc /g, '\\u04AD' ],\n [ /\\\\cyrchar\\\\CYRY /g, '\\u04AE' ],\n [ /\\\\cyrchar\\\\cyry /g, '\\u04AF' ],\n [ /\\\\cyrchar\\\\CYRYHCRS /g, '\\u04B0' ],\n [ /\\\\cyrchar\\\\cyryhcrs /g, '\\u04B1' ],\n [ /\\\\cyrchar\\\\CYRHDSC /g, '\\u04B2' ],\n [ /\\\\cyrchar\\\\cyrhdsc /g, '\\u04B3' ],\n [ /\\\\cyrchar\\\\CYRTETSE /g, '\\u04B4' ],\n [ /\\\\cyrchar\\\\cyrtetse /g, '\\u04B5' ],\n [ /\\\\cyrchar\\\\CYRCHRDSC /g, '\\u04B6' ],\n [ /\\\\cyrchar\\\\cyrchrdsc /g, '\\u04B7' ],\n [ /\\\\cyrchar\\\\CYRCHVCRS /g, '\\u04B8' ],\n [ /\\\\cyrchar\\\\cyrchvcrs /g, '\\u04B9' ],\n [ /\\\\cyrchar\\\\CYRSHHA /g, '\\u04BA' ],\n [ /\\\\cyrchar\\\\cyrshha /g, '\\u04BB' ],\n [ /\\\\cyrchar\\\\CYRABHCH /g, '\\u04BC' ],\n [ /\\\\cyrchar\\\\cyrabhch /g, '\\u04BD' ],\n [ /\\\\cyrchar\\\\CYRABHCHDSC /g, '\\u04BE' ],\n [ /\\\\cyrchar\\\\cyrabhchdsc /g, '\\u04BF' ],\n [ /\\\\cyrchar\\\\CYRpalochka /g, '\\u04C0' ],\n [ /\\\\cyrchar\\\\CYRKHK /g, '\\u04C3' ],\n [ /\\\\cyrchar\\\\cyrkhk /g, '\\u04C4' ],\n [ /\\\\cyrchar\\\\CYRNHK /g, '\\u04C7' ],\n [ /\\\\cyrchar\\\\cyrnhk /g, '\\u04C8' ],\n [ /\\\\cyrchar\\\\CYRCHLDSC /g, '\\u04CB' ],\n [ /\\\\cyrchar\\\\cyrchldsc /g, '\\u04CC' ],\n [ /\\\\cyrchar\\\\CYRAE /g, '\\u04D4' ],\n [ /\\\\cyrchar\\\\cyrae /g, '\\u04D5' ],\n [ /\\\\cyrchar\\\\CYRSCHWA /g, '\\u04D8' ],\n [ /\\\\cyrchar\\\\cyrschwa /g, '\\u04D9' ],\n [ /\\\\cyrchar\\\\CYRABHDZE /g, '\\u04E0' ],\n [ /\\\\cyrchar\\\\cyrabhdze /g, '\\u04E1' ],\n [ /\\\\cyrchar\\\\CYROTLD /g, '\\u04E8' ],\n [ /\\\\cyrchar\\\\cyrotld /g, '\\u04E9' ],\n [ /\\\\hspace\\{0.6em\\}/g, '\\u2002' ],\n [ /\\\\hspace\\{1em\\}/g, '\\u2003' ],\n [ /\\\\hspace\\{0.33em\\}/g, '\\u2004' ],\n [ /\\\\hspace\\{0.25em\\}/g, '\\u2005' ],\n [ /\\\\hspace\\{0.166em\\}/g, '\\u2006' ],\n [ /\\\\hphantom\\{0\\}/g, '\\u2007' ],\n [ /\\\\hphantom\\{,\\}/g, '\\u2008' ],\n [ /\\\\hspace\\{0.167em\\}/g, '\\u2009' ],\n [ /\\\\mkern1mu /g, '\\u200A' ],\n [ /\\\\textendash /g, '\\u2013' ],\n [ /\\\\textemdash /g, '\\u2014' ],\n [ /\\\\rule\\{1em\\}\\{1pt\\}/g, '\\u2015' ],\n [ /\\\\Vert /g, '\\u2016' ],\n [ /\\\\Elzreapos /g, '\\u201B' ],\n [ /\\\\textquotedblleft /g, '\\u201C' ],\n [ /\\\\textquotedblright /g, '\\u201D' ],\n [ /\\\\textdagger /g, '\\u2020' ],\n [ /\\\\textdaggerdbl /g, '\\u2021' ],\n [ /\\\\textbullet /g, '\\u2022' ],\n [ /\\\\ldots /g, '\\u2026' ],\n [ /\\\\textperthousand /g, '\\u2030' ],\n [ /\\\\textpertenthousand /g, '\\u2031' ],\n [ /\\\\backprime /g, '\\u2035' ],\n [ /\\\\guilsinglleft /g, '\\u2039' ],\n [ /\\\\guilsinglright /g, '\\u203A' ],\n [ /\\\\mkern4mu /g, '\\u205F' ],\n [ /\\\\nolinebreak /g, '\\u2060' ],\n [ /\\\\ensuremath\\{\\\\Elzpes\\}/g, '\\u20A7' ],\n [ /\\\\mbox\\{\\\\texteuro\\} /g, '\\u20AC' ],\n [ /\\\\dddot /g, '\\u20DB' ],\n [ /\\\\ddddot /g, '\\u20DC' ],\n [ /\\\\mathbb\\{C\\}/g, '\\u2102' ],\n [ /\\\\mathscr\\{g\\}/g, '\\u210A' ],\n [ /\\\\mathscr\\{H\\}/g, '\\u210B' ],\n [ /\\\\mathfrak\\{H\\}/g, '\\u210C' ],\n [ /\\\\mathbb\\{H\\}/g, '\\u210D' ],\n [ /\\\\hslash /g, '\\u210F' ],\n [ /\\\\mathscr\\{I\\}/g, '\\u2110' ],\n [ /\\\\mathfrak\\{I\\}/g, '\\u2111' ],\n [ /\\\\mathscr\\{L\\}/g, '\\u2112' ],\n [ /\\\\mathscr\\{l\\}/g, '\\u2113' ],\n [ /\\\\mathbb\\{N\\}/g, '\\u2115' ],\n [ /\\\\cyrchar\\\\textnumero /g, '\\u2116' ],\n [ /\\\\wp /g, '\\u2118' ],\n [ /\\\\mathbb\\{P\\}/g, '\\u2119' ],\n [ /\\\\mathbb\\{Q\\}/g, '\\u211A' ],\n [ /\\\\mathscr\\{R\\}/g, '\\u211B' ],\n [ /\\\\mathfrak\\{R\\}/g, '\\u211C' ],\n [ /\\\\mathbb\\{R\\}/g, '\\u211D' ],\n [ /\\\\Elzxrat /g, '\\u211E' ],\n [ /\\\\texttrademark /g, '\\u2122' ],\n [ /\\\\mathbb\\{Z\\}/g, '\\u2124' ],\n [ /\\\\Omega /g, '\\u2126' ],\n [ /\\\\mho /g, '\\u2127' ],\n [ /\\\\mathfrak\\{Z\\}/g, '\\u2128' ],\n [ /\\\\ElsevierGlyph\\{2129\\}/g, '\\u2129' ],\n [ /\\\\AA /g, '\\u212B' ],\n [ /\\\\mathscr\\{B\\}/g, '\\u212C' ],\n [ /\\\\mathfrak\\{C\\}/g, '\\u212D' ],\n [ /\\\\mathscr\\{e\\}/g, '\\u212F' ],\n [ /\\\\mathscr\\{E\\}/g, '\\u2130' ],\n [ /\\\\mathscr\\{F\\}/g, '\\u2131' ],\n [ /\\\\mathscr\\{M\\}/g, '\\u2133' ],\n [ /\\\\mathscr\\{o\\}/g, '\\u2134' ],\n [ /\\\\aleph /g, '\\u2135' ],\n [ /\\\\beth /g, '\\u2136' ],\n [ /\\\\gimel /g, '\\u2137' ],\n [ /\\\\daleth /g, '\\u2138' ],\n [ /\\\\textfrac\\{1\\}\\{3\\}/g, '\\u2153' ],\n [ /\\\\textfrac\\{2\\}\\{3\\}/g, '\\u2154' ],\n [ /\\\\textfrac\\{1\\}\\{5\\}/g, '\\u2155' ],\n [ /\\\\textfrac\\{2\\}\\{5\\}/g, '\\u2156' ],\n [ /\\\\textfrac\\{3\\}\\{5\\}/g, '\\u2157' ],\n [ /\\\\textfrac\\{4\\}\\{5\\}/g, '\\u2158' ],\n [ /\\\\textfrac\\{1\\}\\{6\\}/g, '\\u2159' ],\n [ /\\\\textfrac\\{5\\}\\{6\\}/g, '\\u215A' ],\n [ /\\\\textfrac\\{1\\}\\{8\\}/g, '\\u215B' ],\n [ /\\\\textfrac\\{3\\}\\{8\\}/g, '\\u215C' ],\n [ /\\\\textfrac\\{5\\}\\{8\\}/g, '\\u215D' ],\n [ /\\\\textfrac\\{7\\}\\{8\\}/g, '\\u215E' ],\n [ /\\\\leftarrow /g, '\\u2190' ],\n [ /\\\\uparrow /g, '\\u2191' ],\n [ /\\\\rightarrow /g, '\\u2192' ],\n [ /\\\\downarrow /g, '\\u2193' ],\n [ /\\\\leftrightarrow /g, '\\u2194' ],\n [ /\\\\updownarrow /g, '\\u2195' ],\n [ /\\\\nwarrow /g, '\\u2196' ],\n [ /\\\\nearrow /g, '\\u2197' ],\n [ /\\\\searrow /g, '\\u2198' ],\n [ /\\\\swarrow /g, '\\u2199' ],\n [ /\\\\nleftarrow /g, '\\u219A' ],\n [ /\\\\nrightarrow /g, '\\u219B' ],\n [ /\\\\arrowwaveright /g, '\\u219C' ],\n [ /\\\\arrowwaveright /g, '\\u219D' ],\n [ /\\\\twoheadleftarrow /g, '\\u219E' ],\n [ /\\\\twoheadrightarrow /g, '\\u21A0' ],\n [ /\\\\leftarrowtail /g, '\\u21A2' ],\n [ /\\\\rightarrowtail /g, '\\u21A3' ],\n [ /\\\\mapsto /g, '\\u21A6' ],\n [ /\\\\hookleftarrow /g, '\\u21A9' ],\n [ /\\\\hookrightarrow /g, '\\u21AA' ],\n [ /\\\\looparrowleft /g, '\\u21AB' ],\n [ /\\\\looparrowright /g, '\\u21AC' ],\n [ /\\\\leftrightsquigarrow /g, '\\u21AD' ],\n [ /\\\\nleftrightarrow /g, '\\u21AE' ],\n [ /\\\\Lsh /g, '\\u21B0' ],\n [ /\\\\Rsh /g, '\\u21B1' ],\n [ /\\\\ElsevierGlyph\\{21B3\\}/g, '\\u21B3' ],\n [ /\\\\curvearrowleft /g, '\\u21B6' ],\n [ /\\\\curvearrowright /g, '\\u21B7' ],\n [ /\\\\circlearrowleft /g, '\\u21BA' ],\n [ /\\\\circlearrowright /g, '\\u21BB' ],\n [ /\\\\leftharpoonup /g, '\\u21BC' ],\n [ /\\\\leftharpoondown /g, '\\u21BD' ],\n [ /\\\\upharpoonright /g, '\\u21BE' ],\n [ /\\\\upharpoonleft /g, '\\u21BF' ],\n [ /\\\\rightharpoonup /g, '\\u21C0' ],\n [ /\\\\rightharpoondown /g, '\\u21C1' ],\n [ /\\\\downharpoonright /g, '\\u21C2' ],\n [ /\\\\downharpoonleft /g, '\\u21C3' ],\n [ /\\\\rightleftarrows /g, '\\u21C4' ],\n [ /\\\\dblarrowupdown /g, '\\u21C5' ],\n [ /\\\\leftrightarrows /g, '\\u21C6' ],\n [ /\\\\leftleftarrows /g, '\\u21C7' ],\n [ /\\\\upuparrows /g, '\\u21C8' ],\n [ /\\\\rightrightarrows /g, '\\u21C9' ],\n [ /\\\\downdownarrows /g, '\\u21CA' ],\n [ /\\\\leftrightharpoons /g, '\\u21CB' ],\n [ /\\\\rightleftharpoons /g, '\\u21CC' ],\n [ /\\\\nLeftarrow /g, '\\u21CD' ],\n [ /\\\\nLeftrightarrow /g, '\\u21CE' ],\n [ /\\\\nRightarrow /g, '\\u21CF' ],\n [ /\\\\Leftarrow /g, '\\u21D0' ],\n [ /\\\\Uparrow /g, '\\u21D1' ],\n [ /\\\\Rightarrow /g, '\\u21D2' ],\n [ /\\\\Downarrow /g, '\\u21D3' ],\n [ /\\\\Leftrightarrow /g, '\\u21D4' ],\n [ /\\\\Updownarrow /g, '\\u21D5' ],\n [ /\\\\Lleftarrow /g, '\\u21DA' ],\n [ /\\\\Rrightarrow /g, '\\u21DB' ],\n [ /\\\\rightsquigarrow /g, '\\u21DD' ],\n [ /\\\\DownArrowUpArrow /g, '\\u21F5' ],\n [ /\\\\forall /g, '\\u2200' ],\n [ /\\\\complement /g, '\\u2201' ],\n [ /\\\\partial /g, '\\u2202' ],\n [ /\\\\exists /g, '\\u2203' ],\n [ /\\\\nexists /g, '\\u2204' ],\n [ /\\\\varnothing /g, '\\u2205' ],\n [ /\\\\nabla /g, '\\u2207' ],\n [ /\\\\in /g, '\\u2208' ],\n [ /\\\\not\\\\in /g, '\\u2209' ],\n [ /\\\\ni /g, '\\u220B' ],\n [ /\\\\not\\\\ni /g, '\\u220C' ],\n [ /\\\\prod /g, '\\u220F' ],\n [ /\\\\coprod /g, '\\u2210' ],\n [ /\\\\sum /g, '\\u2211' ],\n [ /\\\\mp /g, '\\u2213' ],\n [ /\\\\dotplus /g, '\\u2214' ],\n [ /\\\\setminus /g, '\\u2216' ],\n [ /\\\\circ /g, '\\u2218' ],\n [ /\\\\bullet /g, '\\u2219' ],\n [ /\\\\surd /g, '\\u221A' ],\n [ /\\\\propto /g, '\\u221D' ],\n [ /\\\\infty /g, '\\u221E' ],\n [ /\\\\rightangle /g, '\\u221F' ],\n [ /\\\\angle /g, '\\u2220' ],\n [ /\\\\measuredangle /g, '\\u2221' ],\n [ /\\\\sphericalangle /g, '\\u2222' ],\n [ /\\\\mid /g, '\\u2223' ],\n [ /\\\\nmid /g, '\\u2224' ],\n [ /\\\\parallel /g, '\\u2225' ],\n [ /\\\\nparallel /g, '\\u2226' ],\n [ /\\\\wedge /g, '\\u2227' ],\n [ /\\\\vee /g, '\\u2228' ],\n [ /\\\\cap /g, '\\u2229' ],\n [ /\\\\cup /g, '\\u222A' ],\n [ /\\\\int /g, '\\u222B' ],\n [ /\\\\int\\\\!\\\\int /g, '\\u222C' ],\n [ /\\\\int\\\\!\\\\int\\\\!\\\\int /g, '\\u222D' ],\n [ /\\\\oint /g, '\\u222E' ],\n [ /\\\\surfintegral /g, '\\u222F' ],\n [ /\\\\volintegral /g, '\\u2230' ],\n [ /\\\\clwintegral /g, '\\u2231' ],\n [ /\\\\ElsevierGlyph\\{2232\\}/g, '\\u2232' ],\n [ /\\\\ElsevierGlyph\\{2233\\}/g, '\\u2233' ],\n [ /\\\\therefore /g, '\\u2234' ],\n [ /\\\\because /g, '\\u2235' ],\n [ /\\\\Colon /g, '\\u2237' ],\n [ /\\\\ElsevierGlyph\\{2238\\}/g, '\\u2238' ],\n [ /\\\\mathbin\\{\\{:\\}\\\\!\\\\!\\{\\-\\}\\\\!\\\\!\\{:\\}\\}/g, '\\u223A' ],\n [ /\\\\homothetic /g, '\\u223B' ],\n [ /\\\\sim /g, '\\u223C' ],\n [ /\\\\backsim /g, '\\u223D' ],\n [ /\\\\lazysinv /g, '\\u223E' ],\n [ /\\\\wr /g, '\\u2240' ],\n [ /\\\\not\\\\sim /g, '\\u2241' ],\n [ /\\\\ElsevierGlyph\\{2242\\}/g, '\\u2242' ],\n [ /\\\\NotEqualTilde /g, '\\u2242-00338' ],\n [ /\\\\simeq /g, '\\u2243' ],\n [ /\\\\not\\\\simeq /g, '\\u2244' ],\n [ /\\\\cong /g, '\\u2245' ],\n [ /\\\\approxnotequal /g, '\\u2246' ],\n [ /\\\\not\\\\cong /g, '\\u2247' ],\n [ /\\\\approx /g, '\\u2248' ],\n [ /\\\\not\\\\approx /g, '\\u2249' ],\n [ /\\\\approxeq /g, '\\u224A' ],\n [ /\\\\tildetrpl /g, '\\u224B' ],\n [ /\\\\not\\\\apid /g, '\\u224B-00338' ],\n [ /\\\\allequal /g, '\\u224C' ],\n [ /\\\\asymp /g, '\\u224D' ],\n [ /\\\\Bumpeq /g, '\\u224E' ],\n [ /\\\\NotHumpDownHump /g, '\\u224E-00338' ],\n [ /\\\\bumpeq /g, '\\u224F' ],\n [ /\\\\NotHumpEqual /g, '\\u224F-00338' ],\n [ /\\\\doteq /g, '\\u2250' ],\n [ /\\\\not\\\\doteq/g, '\\u2250-00338' ],\n [ /\\\\doteqdot /g, '\\u2251' ],\n [ /\\\\fallingdotseq /g, '\\u2252' ],\n [ /\\\\risingdotseq /g, '\\u2253' ],\n [ /\\\\eqcirc /g, '\\u2256' ],\n [ /\\\\circeq /g, '\\u2257' ],\n [ /\\\\estimates /g, '\\u2259' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u225A' ],\n [ /\\\\starequal /g, '\\u225B' ],\n [ /\\\\triangleq /g, '\\u225C' ],\n [ /\\\\ElsevierGlyph\\{225F\\}/g, '\\u225F' ],\n [ /\\\\not =/g, '\\u2260' ],\n [ /\\\\equiv /g, '\\u2261' ],\n [ /\\\\not\\\\equiv /g, '\\u2262' ],\n [ /\\\\leq /g, '\\u2264' ],\n [ /\\\\geq /g, '\\u2265' ],\n [ /\\\\leqq /g, '\\u2266' ],\n [ /\\\\geqq /g, '\\u2267' ],\n [ /\\\\lneqq /g, '\\u2268' ],\n [ /\\\\lvertneqq /g, '\\u2268-0FE00' ],\n [ /\\\\gneqq /g, '\\u2269' ],\n [ /\\\\gvertneqq /g, '\\u2269-0FE00' ],\n [ /\\\\ll /g, '\\u226A' ],\n [ /\\\\NotLessLess /g, '\\u226A-00338' ],\n [ /\\\\gg /g, '\\u226B' ],\n [ /\\\\NotGreaterGreater /g, '\\u226B-00338' ],\n [ /\\\\between /g, '\\u226C' ],\n [ /\\\\not\\\\kern\\-0.3em\\\\times /g, '\\u226D' ],\n [ /\\\\not/g, '\\u226F' ],\n [ /\\\\not\\\\leq /g, '\\u2270' ],\n [ /\\\\not\\\\geq /g, '\\u2271' ],\n [ /\\\\lessequivlnt /g, '\\u2272' ],\n [ /\\\\greaterequivlnt /g, '\\u2273' ],\n [ /\\\\ElsevierGlyph\\{2274\\}/g, '\\u2274' ],\n [ /\\\\ElsevierGlyph\\{2275\\}/g, '\\u2275' ],\n [ /\\\\lessgtr /g, '\\u2276' ],\n [ /\\\\gtrless /g, '\\u2277' ],\n [ /\\\\notlessgreater /g, '\\u2278' ],\n [ /\\\\notgreaterless /g, '\\u2279' ],\n [ /\\\\prec /g, '\\u227A' ],\n [ /\\\\succ /g, '\\u227B' ],\n [ /\\\\preccurlyeq /g, '\\u227C' ],\n [ /\\\\succcurlyeq /g, '\\u227D' ],\n [ /\\\\precapprox /g, '\\u227E' ],\n [ /\\\\NotPrecedesTilde /g, '\\u227E-00338' ],\n [ /\\\\succapprox /g, '\\u227F' ],\n [ /\\\\NotSucceedsTilde /g, '\\u227F-00338' ],\n [ /\\\\not\\\\prec /g, '\\u2280' ],\n [ /\\\\not\\\\succ /g, '\\u2281' ],\n [ /\\\\subset /g, '\\u2282' ],\n [ /\\\\supset /g, '\\u2283' ],\n [ /\\\\not\\\\subset /g, '\\u2284' ],\n [ /\\\\not\\\\supset /g, '\\u2285' ],\n [ /\\\\subseteq /g, '\\u2286' ],\n [ /\\\\supseteq /g, '\\u2287' ],\n [ /\\\\not\\\\subseteq /g, '\\u2288' ],\n [ /\\\\not\\\\supseteq /g, '\\u2289' ],\n [ /\\\\subsetneq /g, '\\u228A' ],\n [ /\\\\varsubsetneqq /g, '\\u228A-0FE00' ],\n [ /\\\\supsetneq /g, '\\u228B' ],\n [ /\\\\varsupsetneq /g, '\\u228B-0FE00' ],\n [ /\\\\uplus /g, '\\u228E' ],\n [ /\\\\sqsubset /g, '\\u228F' ],\n [ /\\\\NotSquareSubset /g, '\\u228F-00338' ],\n [ /\\\\sqsupset /g, '\\u2290' ],\n [ /\\\\NotSquareSuperset /g, '\\u2290-00338' ],\n [ /\\\\sqsubseteq /g, '\\u2291' ],\n [ /\\\\sqsupseteq /g, '\\u2292' ],\n [ /\\\\sqcap /g, '\\u2293' ],\n [ /\\\\sqcup /g, '\\u2294' ],\n [ /\\\\oplus /g, '\\u2295' ],\n [ /\\\\ominus /g, '\\u2296' ],\n [ /\\\\otimes /g, '\\u2297' ],\n [ /\\\\oslash /g, '\\u2298' ],\n [ /\\\\odot /g, '\\u2299' ],\n [ /\\\\circledcirc /g, '\\u229A' ],\n [ /\\\\circledast /g, '\\u229B' ],\n [ /\\\\circleddash /g, '\\u229D' ],\n [ /\\\\boxplus /g, '\\u229E' ],\n [ /\\\\boxminus /g, '\\u229F' ],\n [ /\\\\boxtimes /g, '\\u22A0' ],\n [ /\\\\boxdot /g, '\\u22A1' ],\n [ /\\\\vdash /g, '\\u22A2' ],\n [ /\\\\dashv /g, '\\u22A3' ],\n [ /\\\\top /g, '\\u22A4' ],\n [ /\\\\perp /g, '\\u22A5' ],\n [ /\\\\truestate /g, '\\u22A7' ],\n [ /\\\\forcesextra /g, '\\u22A8' ],\n [ /\\\\Vdash /g, '\\u22A9' ],\n [ /\\\\Vvdash /g, '\\u22AA' ],\n [ /\\\\VDash /g, '\\u22AB' ],\n [ /\\\\nvdash /g, '\\u22AC' ],\n [ /\\\\nvDash /g, '\\u22AD' ],\n [ /\\\\nVdash /g, '\\u22AE' ],\n [ /\\\\nVDash /g, '\\u22AF' ],\n [ /\\\\vartriangleleft /g, '\\u22B2' ],\n [ /\\\\vartriangleright /g, '\\u22B3' ],\n [ /\\\\trianglelefteq /g, '\\u22B4' ],\n [ /\\\\trianglerighteq /g, '\\u22B5' ],\n [ /\\\\original /g, '\\u22B6' ],\n [ /\\\\image /g, '\\u22B7' ],\n [ /\\\\multimap /g, '\\u22B8' ],\n [ /\\\\hermitconjmatrix /g, '\\u22B9' ],\n [ /\\\\intercal /g, '\\u22BA' ],\n [ /\\\\veebar /g, '\\u22BB' ],\n [ /\\\\rightanglearc /g, '\\u22BE' ],\n [ /\\\\ElsevierGlyph\\{22C0\\}/g, '\\u22C0' ],\n [ /\\\\ElsevierGlyph\\{22C1\\}/g, '\\u22C1' ],\n [ /\\\\bigcap /g, '\\u22C2' ],\n [ /\\\\bigcup /g, '\\u22C3' ],\n [ /\\\\diamond /g, '\\u22C4' ],\n [ /\\\\cdot /g, '\\u22C5' ],\n [ /\\\\star /g, '\\u22C6' ],\n [ /\\\\divideontimes /g, '\\u22C7' ],\n [ /\\\\bowtie /g, '\\u22C8' ],\n [ /\\\\ltimes /g, '\\u22C9' ],\n [ /\\\\rtimes /g, '\\u22CA' ],\n [ /\\\\leftthreetimes /g, '\\u22CB' ],\n [ /\\\\rightthreetimes /g, '\\u22CC' ],\n [ /\\\\backsimeq /g, '\\u22CD' ],\n [ /\\\\curlyvee /g, '\\u22CE' ],\n [ /\\\\curlywedge /g, '\\u22CF' ],\n [ /\\\\Subset /g, '\\u22D0' ],\n [ /\\\\Supset /g, '\\u22D1' ],\n [ /\\\\Cap /g, '\\u22D2' ],\n [ /\\\\Cup /g, '\\u22D3' ],\n [ /\\\\pitchfork /g, '\\u22D4' ],\n [ /\\\\lessdot /g, '\\u22D6' ],\n [ /\\\\gtrdot /g, '\\u22D7' ],\n [ /\\\\verymuchless /g, '\\u22D8' ],\n [ /\\\\verymuchgreater /g, '\\u22D9' ],\n [ /\\\\lesseqgtr /g, '\\u22DA' ],\n [ /\\\\gtreqless /g, '\\u22DB' ],\n [ /\\\\curlyeqprec /g, '\\u22DE' ],\n [ /\\\\curlyeqsucc /g, '\\u22DF' ],\n [ /\\\\not\\\\sqsubseteq /g, '\\u22E2' ],\n [ /\\\\not\\\\sqsupseteq /g, '\\u22E3' ],\n [ /\\\\Elzsqspne /g, '\\u22E5' ],\n [ /\\\\lnsim /g, '\\u22E6' ],\n [ /\\\\gnsim /g, '\\u22E7' ],\n [ /\\\\precedesnotsimilar /g, '\\u22E8' ],\n [ /\\\\succnsim /g, '\\u22E9' ],\n [ /\\\\ntriangleleft /g, '\\u22EA' ],\n [ /\\\\ntriangleright /g, '\\u22EB' ],\n [ /\\\\ntrianglelefteq /g, '\\u22EC' ],\n [ /\\\\ntrianglerighteq /g, '\\u22ED' ],\n [ /\\\\vdots /g, '\\u22EE' ],\n [ /\\\\cdots /g, '\\u22EF' ],\n [ /\\\\upslopeellipsis /g, '\\u22F0' ],\n [ /\\\\downslopeellipsis /g, '\\u22F1' ],\n [ /\\\\barwedge /g, '\\u2305' ],\n [ /\\\\perspcorrespond /g, '\\u2306' ],\n [ /\\\\lceil /g, '\\u2308' ],\n [ /\\\\rceil /g, '\\u2309' ],\n [ /\\\\lfloor /g, '\\u230A' ],\n [ /\\\\rfloor /g, '\\u230B' ],\n [ /\\\\recorder /g, '\\u2315' ],\n [ /\\\\mathchar\"2208/g, '\\u2316' ],\n [ /\\\\ulcorner /g, '\\u231C' ],\n [ /\\\\urcorner /g, '\\u231D' ],\n [ /\\\\llcorner /g, '\\u231E' ],\n [ /\\\\lrcorner /g, '\\u231F' ],\n [ /\\\\frown /g, '\\u2322' ],\n [ /\\\\smile /g, '\\u2323' ],\n [ /\\\\langle /g, '\\u2329' ],\n [ /\\\\rangle /g, '\\u232A' ],\n [ /\\\\ElsevierGlyph\\{E838\\}/g, '\\u233D' ],\n [ /\\\\Elzdlcorn /g, '\\u23A3' ],\n [ /\\\\lmoustache /g, '\\u23B0' ],\n [ /\\\\rmoustache /g, '\\u23B1' ],\n [ /\\\\textvisiblespace /g, '\\u2423' ],\n [ /\\\\ding\\{172\\}/g, '\\u2460' ],\n [ /\\\\ding\\{173\\}/g, '\\u2461' ],\n [ /\\\\ding\\{174\\}/g, '\\u2462' ],\n [ /\\\\ding\\{175\\}/g, '\\u2463' ],\n [ /\\\\ding\\{176\\}/g, '\\u2464' ],\n [ /\\\\ding\\{177\\}/g, '\\u2465' ],\n [ /\\\\ding\\{178\\}/g, '\\u2466' ],\n [ /\\\\ding\\{179\\}/g, '\\u2467' ],\n [ /\\\\ding\\{180\\}/g, '\\u2468' ],\n [ /\\\\ding\\{181\\}/g, '\\u2469' ],\n [ /\\\\circledS /g, '\\u24C8' ],\n [ /\\\\Elzdshfnc /g, '\\u2506' ],\n [ /\\\\Elzsqfnw /g, '\\u2519' ],\n [ /\\\\diagup /g, '\\u2571' ],\n [ /\\\\ding\\{110\\}/g, '\\u25A0' ],\n [ /\\\\square /g, '\\u25A1' ],\n [ /\\\\blacksquare /g, '\\u25AA' ],\n [ /\\\\fbox\\{~~\\}/g, '\\u25AD' ],\n [ /\\\\Elzvrecto /g, '\\u25AF' ],\n [ /\\\\ElsevierGlyph\\{E381\\}/g, '\\u25B1' ],\n [ /\\\\ding\\{115\\}/g, '\\u25B2' ],\n [ /\\\\bigtriangleup /g, '\\u25B3' ],\n [ /\\\\blacktriangle /g, '\\u25B4' ],\n [ /\\\\vartriangle /g, '\\u25B5' ],\n [ /\\\\blacktriangleright /g, '\\u25B8' ],\n [ /\\\\triangleright /g, '\\u25B9' ],\n [ /\\\\ding\\{116\\}/g, '\\u25BC' ],\n [ /\\\\bigtriangledown /g, '\\u25BD' ],\n [ /\\\\blacktriangledown /g, '\\u25BE' ],\n [ /\\\\triangledown /g, '\\u25BF' ],\n [ /\\\\blacktriangleleft /g, '\\u25C2' ],\n [ /\\\\triangleleft /g, '\\u25C3' ],\n [ /\\\\ding\\{117\\}/g, '\\u25C6' ],\n [ /\\\\lozenge /g, '\\u25CA' ],\n [ /\\\\bigcirc /g, '\\u25CB' ],\n [ /\\\\ding\\{108\\}/g, '\\u25CF' ],\n [ /\\\\Elzcirfl /g, '\\u25D0' ],\n [ /\\\\Elzcirfr /g, '\\u25D1' ],\n [ /\\\\Elzcirfb /g, '\\u25D2' ],\n [ /\\\\ding\\{119\\}/g, '\\u25D7' ],\n [ /\\\\Elzrvbull /g, '\\u25D8' ],\n [ /\\\\Elzsqfl /g, '\\u25E7' ],\n [ /\\\\Elzsqfr /g, '\\u25E8' ],\n [ /\\\\Elzsqfse /g, '\\u25EA' ],\n [ /\\\\bigcirc /g, '\\u25EF' ],\n [ /\\\\ding\\{72\\}/g, '\\u2605' ],\n [ /\\\\ding\\{73\\}/g, '\\u2606' ],\n [ /\\\\ding\\{37\\}/g, '\\u260E' ],\n [ /\\\\ding\\{42\\}/g, '\\u261B' ],\n [ /\\\\ding\\{43\\}/g, '\\u261E' ],\n [ /\\\\rightmoon /g, '\\u263E' ],\n [ /\\\\mercury /g, '\\u263F' ],\n [ /\\\\venus /g, '\\u2640' ],\n [ /\\\\male /g, '\\u2642' ],\n [ /\\\\jupiter /g, '\\u2643' ],\n [ /\\\\saturn /g, '\\u2644' ],\n [ /\\\\uranus /g, '\\u2645' ],\n [ /\\\\neptune /g, '\\u2646' ],\n [ /\\\\pluto /g, '\\u2647' ],\n [ /\\\\aries /g, '\\u2648' ],\n [ /\\\\taurus /g, '\\u2649' ],\n [ /\\\\gemini /g, '\\u264A' ],\n [ /\\\\cancer /g, '\\u264B' ],\n [ /\\\\leo /g, '\\u264C' ],\n [ /\\\\virgo /g, '\\u264D' ],\n [ /\\\\libra /g, '\\u264E' ],\n [ /\\\\scorpio /g, '\\u264F' ],\n [ /\\\\sagittarius /g, '\\u2650' ],\n [ /\\\\capricornus /g, '\\u2651' ],\n [ /\\\\aquarius /g, '\\u2652' ],\n [ /\\\\pisces /g, '\\u2653' ],\n [ /\\\\ding\\{171\\}/g, '\\u2660' ],\n [ /\\\\diamond /g, '\\u2662' ],\n [ /\\\\ding\\{168\\}/g, '\\u2663' ],\n [ /\\\\ding\\{170\\}/g, '\\u2665' ],\n [ /\\\\ding\\{169\\}/g, '\\u2666' ],\n [ /\\\\quarternote /g, '\\u2669' ],\n [ /\\\\eighthnote /g, '\\u266A' ],\n [ /\\\\flat /g, '\\u266D' ],\n [ /\\\\natural /g, '\\u266E' ],\n [ /\\\\sharp /g, '\\u266F' ],\n [ /\\\\ding\\{33\\}/g, '\\u2701' ],\n [ /\\\\ding\\{34\\}/g, '\\u2702' ],\n [ /\\\\ding\\{35\\}/g, '\\u2703' ],\n [ /\\\\ding\\{36\\}/g, '\\u2704' ],\n [ /\\\\ding\\{38\\}/g, '\\u2706' ],\n [ /\\\\ding\\{39\\}/g, '\\u2707' ],\n [ /\\\\ding\\{40\\}/g, '\\u2708' ],\n [ /\\\\ding\\{41\\}/g, '\\u2709' ],\n [ /\\\\ding\\{44\\}/g, '\\u270C' ],\n [ /\\\\ding\\{45\\}/g, '\\u270D' ],\n [ /\\\\ding\\{46\\}/g, '\\u270E' ],\n [ /\\\\ding\\{47\\}/g, '\\u270F' ],\n [ /\\\\ding\\{48\\}/g, '\\u2710' ],\n [ /\\\\ding\\{49\\}/g, '\\u2711' ],\n [ /\\\\ding\\{50\\}/g, '\\u2712' ],\n [ /\\\\ding\\{51\\}/g, '\\u2713' ],\n [ /\\\\ding\\{52\\}/g, '\\u2714' ],\n [ /\\\\ding\\{53\\}/g, '\\u2715' ],\n [ /\\\\ding\\{54\\}/g, '\\u2716' ],\n [ /\\\\ding\\{55\\}/g, '\\u2717' ],\n [ /\\\\ding\\{56\\}/g, '\\u2718' ],\n [ /\\\\ding\\{57\\}/g, '\\u2719' ],\n [ /\\\\ding\\{58\\}/g, '\\u271A' ],\n [ /\\\\ding\\{59\\}/g, '\\u271B' ],\n [ /\\\\ding\\{60\\}/g, '\\u271C' ],\n [ /\\\\ding\\{61\\}/g, '\\u271D' ],\n [ /\\\\ding\\{62\\}/g, '\\u271E' ],\n [ /\\\\ding\\{63\\}/g, '\\u271F' ],\n [ /\\\\ding\\{64\\}/g, '\\u2720' ],\n [ /\\\\ding\\{65\\}/g, '\\u2721' ],\n [ /\\\\ding\\{66\\}/g, '\\u2722' ],\n [ /\\\\ding\\{67\\}/g, '\\u2723' ],\n [ /\\\\ding\\{68\\}/g, '\\u2724' ],\n [ /\\\\ding\\{69\\}/g, '\\u2725' ],\n [ /\\\\ding\\{70\\}/g, '\\u2726' ],\n [ /\\\\ding\\{71\\}/g, '\\u2727' ],\n [ /\\\\ding\\{73\\}/g, '\\u2729' ],\n [ /\\\\ding\\{74\\}/g, '\\u272A' ],\n [ /\\\\ding\\{75\\}/g, '\\u272B' ],\n [ /\\\\ding\\{76\\}/g, '\\u272C' ],\n [ /\\\\ding\\{77\\}/g, '\\u272D' ],\n [ /\\\\ding\\{78\\}/g, '\\u272E' ],\n [ /\\\\ding\\{79\\}/g, '\\u272F' ],\n [ /\\\\ding\\{80\\}/g, '\\u2730' ],\n [ /\\\\ding\\{81\\}/g, '\\u2731' ],\n [ /\\\\ding\\{82\\}/g, '\\u2732' ],\n [ /\\\\ding\\{83\\}/g, '\\u2733' ],\n [ /\\\\ding\\{84\\}/g, '\\u2734' ],\n [ /\\\\ding\\{85\\}/g, '\\u2735' ],\n [ /\\\\ding\\{86\\}/g, '\\u2736' ],\n [ /\\\\ding\\{87\\}/g, '\\u2737' ],\n [ /\\\\ding\\{88\\}/g, '\\u2738' ],\n [ /\\\\ding\\{89\\}/g, '\\u2739' ],\n [ /\\\\ding\\{90\\}/g, '\\u273A' ],\n [ /\\\\ding\\{91\\}/g, '\\u273B' ],\n [ /\\\\ding\\{92\\}/g, '\\u273C' ],\n [ /\\\\ding\\{93\\}/g, '\\u273D' ],\n [ /\\\\ding\\{94\\}/g, '\\u273E' ],\n [ /\\\\ding\\{95\\}/g, '\\u273F' ],\n [ /\\\\ding\\{96\\}/g, '\\u2740' ],\n [ /\\\\ding\\{97\\}/g, '\\u2741' ],\n [ /\\\\ding\\{98\\}/g, '\\u2742' ],\n [ /\\\\ding\\{99\\}/g, '\\u2743' ],\n [ /\\\\ding\\{100\\}/g, '\\u2744' ],\n [ /\\\\ding\\{101\\}/g, '\\u2745' ],\n [ /\\\\ding\\{102\\}/g, '\\u2746' ],\n [ /\\\\ding\\{103\\}/g, '\\u2747' ],\n [ /\\\\ding\\{104\\}/g, '\\u2748' ],\n [ /\\\\ding\\{105\\}/g, '\\u2749' ],\n [ /\\\\ding\\{106\\}/g, '\\u274A' ],\n [ /\\\\ding\\{107\\}/g, '\\u274B' ],\n [ /\\\\ding\\{109\\}/g, '\\u274D' ],\n [ /\\\\ding\\{111\\}/g, '\\u274F' ],\n [ /\\\\ding\\{112\\}/g, '\\u2750' ],\n [ /\\\\ding\\{113\\}/g, '\\u2751' ],\n [ /\\\\ding\\{114\\}/g, '\\u2752' ],\n [ /\\\\ding\\{118\\}/g, '\\u2756' ],\n [ /\\\\ding\\{120\\}/g, '\\u2758' ],\n [ /\\\\ding\\{121\\}/g, '\\u2759' ],\n [ /\\\\ding\\{122\\}/g, '\\u275A' ],\n [ /\\\\ding\\{123\\}/g, '\\u275B' ],\n [ /\\\\ding\\{124\\}/g, '\\u275C' ],\n [ /\\\\ding\\{125\\}/g, '\\u275D' ],\n [ /\\\\ding\\{126\\}/g, '\\u275E' ],\n [ /\\\\ding\\{161\\}/g, '\\u2761' ],\n [ /\\\\ding\\{162\\}/g, '\\u2762' ],\n [ /\\\\ding\\{163\\}/g, '\\u2763' ],\n [ /\\\\ding\\{164\\}/g, '\\u2764' ],\n [ /\\\\ding\\{165\\}/g, '\\u2765' ],\n [ /\\\\ding\\{166\\}/g, '\\u2766' ],\n [ /\\\\ding\\{167\\}/g, '\\u2767' ],\n [ /\\\\ding\\{182\\}/g, '\\u2776' ],\n [ /\\\\ding\\{183\\}/g, '\\u2777' ],\n [ /\\\\ding\\{184\\}/g, '\\u2778' ],\n [ /\\\\ding\\{185\\}/g, '\\u2779' ],\n [ /\\\\ding\\{186\\}/g, '\\u277A' ],\n [ /\\\\ding\\{187\\}/g, '\\u277B' ],\n [ /\\\\ding\\{188\\}/g, '\\u277C' ],\n [ /\\\\ding\\{189\\}/g, '\\u277D' ],\n [ /\\\\ding\\{190\\}/g, '\\u277E' ],\n [ /\\\\ding\\{191\\}/g, '\\u277F' ],\n [ /\\\\ding\\{192\\}/g, '\\u2780' ],\n [ /\\\\ding\\{193\\}/g, '\\u2781' ],\n [ /\\\\ding\\{194\\}/g, '\\u2782' ],\n [ /\\\\ding\\{195\\}/g, '\\u2783' ],\n [ /\\\\ding\\{196\\}/g, '\\u2784' ],\n [ /\\\\ding\\{197\\}/g, '\\u2785' ],\n [ /\\\\ding\\{198\\}/g, '\\u2786' ],\n [ /\\\\ding\\{199\\}/g, '\\u2787' ],\n [ /\\\\ding\\{200\\}/g, '\\u2788' ],\n [ /\\\\ding\\{201\\}/g, '\\u2789' ],\n [ /\\\\ding\\{202\\}/g, '\\u278A' ],\n [ /\\\\ding\\{203\\}/g, '\\u278B' ],\n [ /\\\\ding\\{204\\}/g, '\\u278C' ],\n [ /\\\\ding\\{205\\}/g, '\\u278D' ],\n [ /\\\\ding\\{206\\}/g, '\\u278E' ],\n [ /\\\\ding\\{207\\}/g, '\\u278F' ],\n [ /\\\\ding\\{208\\}/g, '\\u2790' ],\n [ /\\\\ding\\{209\\}/g, '\\u2791' ],\n [ /\\\\ding\\{210\\}/g, '\\u2792' ],\n [ /\\\\ding\\{211\\}/g, '\\u2793' ],\n [ /\\\\ding\\{212\\}/g, '\\u2794' ],\n [ /\\\\ding\\{216\\}/g, '\\u2798' ],\n [ /\\\\ding\\{217\\}/g, '\\u2799' ],\n [ /\\\\ding\\{218\\}/g, '\\u279A' ],\n [ /\\\\ding\\{219\\}/g, '\\u279B' ],\n [ /\\\\ding\\{220\\}/g, '\\u279C' ],\n [ /\\\\ding\\{221\\}/g, '\\u279D' ],\n [ /\\\\ding\\{222\\}/g, '\\u279E' ],\n [ /\\\\ding\\{223\\}/g, '\\u279F' ],\n [ /\\\\ding\\{224\\}/g, '\\u27A0' ],\n [ /\\\\ding\\{225\\}/g, '\\u27A1' ],\n [ /\\\\ding\\{226\\}/g, '\\u27A2' ],\n [ /\\\\ding\\{227\\}/g, '\\u27A3' ],\n [ /\\\\ding\\{228\\}/g, '\\u27A4' ],\n [ /\\\\ding\\{229\\}/g, '\\u27A5' ],\n [ /\\\\ding\\{230\\}/g, '\\u27A6' ],\n [ /\\\\ding\\{231\\}/g, '\\u27A7' ],\n [ /\\\\ding\\{232\\}/g, '\\u27A8' ],\n [ /\\\\ding\\{233\\}/g, '\\u27A9' ],\n [ /\\\\ding\\{234\\}/g, '\\u27AA' ],\n [ /\\\\ding\\{235\\}/g, '\\u27AB' ],\n [ /\\\\ding\\{236\\}/g, '\\u27AC' ],\n [ /\\\\ding\\{237\\}/g, '\\u27AD' ],\n [ /\\\\ding\\{238\\}/g, '\\u27AE' ],\n [ /\\\\ding\\{239\\}/g, '\\u27AF' ],\n [ /\\\\ding\\{241\\}/g, '\\u27B1' ],\n [ /\\\\ding\\{242\\}/g, '\\u27B2' ],\n [ /\\\\ding\\{243\\}/g, '\\u27B3' ],\n [ /\\\\ding\\{244\\}/g, '\\u27B4' ],\n [ /\\\\ding\\{245\\}/g, '\\u27B5' ],\n [ /\\\\ding\\{246\\}/g, '\\u27B6' ],\n [ /\\\\ding\\{247\\}/g, '\\u27B7' ],\n [ /\\\\ding\\{248\\}/g, '\\u27B8' ],\n [ /\\\\ding\\{249\\}/g, '\\u27B9' ],\n [ /\\\\ding\\{250\\}/g, '\\u27BA' ],\n [ /\\\\ding\\{251\\}/g, '\\u27BB' ],\n [ /\\\\ding\\{252\\}/g, '\\u27BC' ],\n [ /\\\\ding\\{253\\}/g, '\\u27BD' ],\n [ /\\\\ding\\{254\\}/g, '\\u27BE' ],\n [ /\\\\longleftarrow /g, '\\u27F5' ],\n [ /\\\\longrightarrow /g, '\\u27F6' ],\n [ /\\\\longleftrightarrow /g, '\\u27F7' ],\n [ /\\\\Longleftarrow /g, '\\u27F8' ],\n [ /\\\\Longrightarrow /g, '\\u27F9' ],\n [ /\\\\Longleftrightarrow /g, '\\u27FA' ],\n [ /\\\\longmapsto /g, '\\u27FC' ],\n [ /\\\\sim\\\\joinrel\\\\leadsto/g, '\\u27FF' ],\n [ /\\\\ElsevierGlyph\\{E212\\}/g, '\\u2905' ],\n [ /\\\\UpArrowBar /g, '\\u2912' ],\n [ /\\\\DownArrowBar /g, '\\u2913' ],\n [ /\\\\ElsevierGlyph\\{E20C\\}/g, '\\u2923' ],\n [ /\\\\ElsevierGlyph\\{E20D\\}/g, '\\u2924' ],\n [ /\\\\ElsevierGlyph\\{E20B\\}/g, '\\u2925' ],\n [ /\\\\ElsevierGlyph\\{E20A\\}/g, '\\u2926' ],\n [ /\\\\ElsevierGlyph\\{E211\\}/g, '\\u2927' ],\n [ /\\\\ElsevierGlyph\\{E20E\\}/g, '\\u2928' ],\n [ /\\\\ElsevierGlyph\\{E20F\\}/g, '\\u2929' ],\n [ /\\\\ElsevierGlyph\\{E210\\}/g, '\\u292A' ],\n [ /\\\\ElsevierGlyph\\{E21C\\}/g, '\\u2933' ],\n [ /\\\\ElsevierGlyph\\{E21D\\}/g, '\\u2933-00338' ],\n [ /\\\\ElsevierGlyph\\{E21A\\}/g, '\\u2936' ],\n [ /\\\\ElsevierGlyph\\{E219\\}/g, '\\u2937' ],\n [ /\\\\Elolarr /g, '\\u2940' ],\n [ /\\\\Elorarr /g, '\\u2941' ],\n [ /\\\\ElzRlarr /g, '\\u2942' ],\n [ /\\\\ElzrLarr /g, '\\u2944' ],\n [ /\\\\Elzrarrx /g, '\\u2947' ],\n [ /\\\\LeftRightVector /g, '\\u294E' ],\n [ /\\\\RightUpDownVector /g, '\\u294F' ],\n [ /\\\\DownLeftRightVector /g, '\\u2950' ],\n [ /\\\\LeftUpDownVector /g, '\\u2951' ],\n [ /\\\\LeftVectorBar /g, '\\u2952' ],\n [ /\\\\RightVectorBar /g, '\\u2953' ],\n [ /\\\\RightUpVectorBar /g, '\\u2954' ],\n [ /\\\\RightDownVectorBar /g, '\\u2955' ],\n [ /\\\\DownLeftVectorBar /g, '\\u2956' ],\n [ /\\\\DownRightVectorBar /g, '\\u2957' ],\n [ /\\\\LeftUpVectorBar /g, '\\u2958' ],\n [ /\\\\LeftDownVectorBar /g, '\\u2959' ],\n [ /\\\\LeftTeeVector /g, '\\u295A' ],\n [ /\\\\RightTeeVector /g, '\\u295B' ],\n [ /\\\\RightUpTeeVector /g, '\\u295C' ],\n [ /\\\\RightDownTeeVector /g, '\\u295D' ],\n [ /\\\\DownLeftTeeVector /g, '\\u295E' ],\n [ /\\\\DownRightTeeVector /g, '\\u295F' ],\n [ /\\\\LeftUpTeeVector /g, '\\u2960' ],\n [ /\\\\LeftDownTeeVector /g, '\\u2961' ],\n [ /\\\\UpEquilibrium /g, '\\u296E' ],\n [ /\\\\ReverseUpEquilibrium /g, '\\u296F' ],\n [ /\\\\RoundImplies /g, '\\u2970' ],\n [ /\\\\ElsevierGlyph\\{E214\\}/g, '\\u297C' ],\n [ /\\\\ElsevierGlyph\\{E215\\}/g, '\\u297D' ],\n [ /\\\\Elztfnc /g, '\\u2980' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u2985' ],\n [ /\\\\Elroang /g, '\\u2986' ],\n [ /\\\\ElsevierGlyph\\{E291\\}/g, '\\u2994' ],\n [ /\\\\Elzddfnc /g, '\\u2999' ],\n [ /\\\\Angle /g, '\\u299C' ],\n [ /\\\\Elzlpargt /g, '\\u29A0' ],\n [ /\\\\ElsevierGlyph\\{E260\\}/g, '\\u29B5' ],\n [ /\\\\ElsevierGlyph\\{E61B\\}/g, '\\u29B6' ],\n [ /\\\\ElzLap /g, '\\u29CA' ],\n [ /\\\\Elzdefas /g, '\\u29CB' ],\n [ /\\\\LeftTriangleBar /g, '\\u29CF' ],\n [ /\\\\NotLeftTriangleBar /g, '\\u29CF-00338' ],\n [ /\\\\RightTriangleBar /g, '\\u29D0' ],\n [ /\\\\NotRightTriangleBar /g, '\\u29D0-00338' ],\n [ /\\\\ElsevierGlyph\\{E372\\}/g, '\\u29DC' ],\n [ /\\\\blacklozenge /g, '\\u29EB' ],\n [ /\\\\RuleDelayed /g, '\\u29F4' ],\n [ /\\\\Elxuplus /g, '\\u2A04' ],\n [ /\\\\ElzThr /g, '\\u2A05' ],\n [ /\\\\Elxsqcup /g, '\\u2A06' ],\n [ /\\\\ElzInf /g, '\\u2A07' ],\n [ /\\\\ElzSup /g, '\\u2A08' ],\n [ /\\\\ElzCint /g, '\\u2A0D' ],\n [ /\\\\clockoint /g, '\\u2A0F' ],\n [ /\\\\ElsevierGlyph\\{E395\\}/g, '\\u2A10' ],\n [ /\\\\sqrint /g, '\\u2A16' ],\n [ /\\\\ElsevierGlyph\\{E25A\\}/g, '\\u2A25' ],\n [ /\\\\ElsevierGlyph\\{E25B\\}/g, '\\u2A2A' ],\n [ /\\\\ElsevierGlyph\\{E25C\\}/g, '\\u2A2D' ],\n [ /\\\\ElsevierGlyph\\{E25D\\}/g, '\\u2A2E' ],\n [ /\\\\ElzTimes /g, '\\u2A2F' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A34' ],\n [ /\\\\ElsevierGlyph\\{E25E\\}/g, '\\u2A35' ],\n [ /\\\\ElsevierGlyph\\{E259\\}/g, '\\u2A3C' ],\n [ /\\\\amalg /g, '\\u2A3F' ],\n [ /\\\\ElzAnd /g, '\\u2A53' ],\n [ /\\\\ElzOr /g, '\\u2A54' ],\n [ /\\\\ElsevierGlyph\\{E36E\\}/g, '\\u2A55' ],\n [ /\\\\ElOr /g, '\\u2A56' ],\n [ /\\\\perspcorrespond /g, '\\u2A5E' ],\n [ /\\\\Elzminhat /g, '\\u2A5F' ],\n [ /\\\\ElsevierGlyph\\{225A\\}/g, '\\u2A63' ],\n [ /\\\\stackrel\\{*\\}\\{=\\}/g, '\\u2A6E' ],\n [ /\\\\Equal /g, '\\u2A75' ],\n [ /\\\\leqslant /g, '\\u2A7D' ],\n [ /\\\\nleqslant /g, '\\u2A7D-00338' ],\n [ /\\\\geqslant /g, '\\u2A7E' ],\n [ /\\\\ngeqslant /g, '\\u2A7E-00338' ],\n [ /\\\\lessapprox /g, '\\u2A85' ],\n [ /\\\\gtrapprox /g, '\\u2A86' ],\n [ /\\\\lneq /g, '\\u2A87' ],\n [ /\\\\gneq /g, '\\u2A88' ],\n [ /\\\\lnapprox /g, '\\u2A89' ],\n [ /\\\\gnapprox /g, '\\u2A8A' ],\n [ /\\\\lesseqqgtr /g, '\\u2A8B' ],\n [ /\\\\gtreqqless /g, '\\u2A8C' ],\n [ /\\\\eqslantless /g, '\\u2A95' ],\n [ /\\\\eqslantgtr /g, '\\u2A96' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{117\\}/g, '\\u2A9D' ],\n [ /\\\\Pisymbol\\{ppi020\\}\\{105\\}/g, '\\u2A9E' ],\n [ /\\\\NestedLessLess /g, '\\u2AA1' ],\n [ /\\\\NotNestedLessLess /g, '\\u2AA1-00338' ],\n [ /\\\\NestedGreaterGreater /g, '\\u2AA2' ],\n [ /\\\\NotNestedGreaterGreater /g, '\\u2AA2-00338' ],\n [ /\\\\preceq /g, '\\u2AAF' ],\n [ /\\\\not\\\\preceq /g, '\\u2AAF-00338' ],\n [ /\\\\succeq /g, '\\u2AB0' ],\n [ /\\\\not\\\\succeq /g, '\\u2AB0-00338' ],\n [ /\\\\precneqq /g, '\\u2AB5' ],\n [ /\\\\succneqq /g, '\\u2AB6' ],\n [ /\\\\precapprox /g, '\\u2AB7' ],\n [ /\\\\succapprox /g, '\\u2AB8' ],\n [ /\\\\precnapprox /g, '\\u2AB9' ],\n [ /\\\\succnapprox /g, '\\u2ABA' ],\n [ /\\\\subseteqq /g, '\\u2AC5' ],\n [ /\\\\nsubseteqq /g, '\\u2AC5-00338' ],\n [ /\\\\supseteqq /g, '\\u2AC6' ],\n [ /\\\\nsupseteqq/g, '\\u2AC6-00338' ],\n [ /\\\\subsetneqq /g, '\\u2ACB' ],\n [ /\\\\supsetneqq /g, '\\u2ACC' ],\n [ /\\\\ElsevierGlyph\\{E30D\\}/g, '\\u2AEB' ],\n [ /\\\\Elztdcol /g, '\\u2AF6' ],\n [ /\\\\ElsevierGlyph\\{300A\\}/g, '\\u300A' ],\n [ /\\\\ElsevierGlyph\\{300B\\}/g, '\\u300B' ],\n [ /\\\\ElsevierGlyph\\{3018\\}/g, '\\u3018' ],\n [ /\\\\ElsevierGlyph\\{3019\\}/g, '\\u3019' ],\n [ /\\\\openbracketleft /g, '\\u301A' ],\n [ /\\\\openbracketright /g, '\\u301B' ]\n ]\n\n return this;\n} // end function BibtexParser\n\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = BibtexParser;\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bibtex.js\n// module id = 129\n// module chunks = 3","import baseMVC from \"mvc/base-mvc\";\nimport citationModel from \"mvc/citation/citation-model\";\nimport _l from \"utils/localization\";\nvar CitationView = Backbone.View.extend({\n tagName: \"div\",\n className: \"citations\",\n render: function() {\n this.$el.append(`

${this.formattedReference()}

`);\n return this;\n },\n formattedReference: function() {\n var model = this.model;\n var entryType = model.entryType();\n var fields = model.fields();\n\n var ref = \"\";\n // Code inspired by...\n // https://github.com/vkaravir/bib-publication-list/blob/master/src/bib-publication-list.js\n var authorsAndYear = `${this._asSentence(\n (fields.author ? fields.author : \"\") + (fields.year ? ` (${fields.year})` : \"\")\n )} `;\n var title = fields.title || \"\";\n var pages = fields.pages ? `pp. ${fields.pages}` : \"\";\n var address = fields.address;\n if (entryType == \"article\") {\n var volume =\n (fields.volume ? fields.volume : \"\") +\n (fields.number ? ` (${fields.number})` : \"\") +\n (pages ? `, ${pages}` : \"\");\n ref = `${authorsAndYear +\n this._asSentence(title) +\n (fields.journal ? `In ${fields.journal}, ` : \"\") +\n this._asSentence(volume) +\n this._asSentence(fields.address)}`;\n } else if (entryType == \"inproceedings\" || entryType == \"proceedings\") {\n ref = `${authorsAndYear +\n this._asSentence(title) +\n (fields.booktitle ? `In ${fields.booktitle}, ` : \"\") +\n (pages ? pages : \"\") +\n (address ? `, ${address}` : \"\")}.`;\n } else if (entryType == \"mastersthesis\" || entryType == \"phdthesis\") {\n ref =\n authorsAndYear +\n this._asSentence(title) +\n (fields.howpublished ? `${fields.howpublished}. ` : \"\") +\n (fields.note ? `${fields.note}.` : \"\");\n } else if (entryType == \"techreport\") {\n ref =\n authorsAndYear +\n this._asSentence(title) +\n this._asSentence(fields.institution) +\n this._asSentence(fields.number) +\n this._asSentence(fields.type);\n } else if (entryType == \"book\" || entryType == \"inbook\" || entryType == \"incollection\") {\n ref = `${authorsAndYear} ${this._formatBookInfo(fields)}`;\n } else {\n ref = `${authorsAndYear} ${this._asSentence(title)}${this._asSentence(\n fields.howpublished\n )}${this._asSentence(fields.note)}`;\n }\n var doiUrl = \"\";\n if (fields.doi) {\n doiUrl = `http://dx.doi.org/${fields.doi}`;\n ref += `[doi:${fields.doi}]`;\n }\n var url = fields.url || doiUrl;\n if (url) {\n ref += `[Link]`;\n }\n return ref;\n },\n _formatBookInfo: function(fields) {\n var info = \"\";\n if (fields.chapter) {\n info += `${fields.chapter} in `;\n }\n if (fields.title) {\n info += `${fields.title}`;\n }\n if (fields.editor) {\n info += `, Edited by ${fields.editor}, `;\n }\n if (fields.publisher) {\n info += `, ${fields.publisher}`;\n }\n if (fields.pages) {\n info += `, pp. ${fields.pages}`;\n }\n if (fields.series) {\n info += `, ${fields.series}`;\n }\n if (fields.volume) {\n info += `, Vol.${fields.volume}`;\n }\n if (fields.issn) {\n info += `, ISBN: ${fields.issn}`;\n }\n return `${info}.`;\n },\n _asSentence: function(str) {\n return str && str.trim() ? `${str}. ` : \"\";\n }\n});\n\nvar CitationListView = Backbone.View.extend({\n el: \"#citations\",\n /**\n * Set up view.\n */\n initialize: function() {\n this.listenTo(this.collection, \"add\", this.renderCitation);\n },\n\n events: {\n \"click .citations-to-bibtex\": \"showBibtex\",\n \"click .citations-to-formatted\": \"showFormatted\"\n },\n\n renderCitation: function(citation) {\n var citationView = new CitationView({ model: citation });\n this.$(\".citations-formatted\").append(citationView.render().el);\n var rawTextarea = this.$(\".citations-bibtex-text\");\n rawTextarea.val(`${rawTextarea.val()}\\n\\r${citation.attributes.content}`);\n },\n\n render: function() {\n this.$el.html(this.citationsElement());\n this.collection.each(function(item) {\n this.renderCitation(item);\n }, this);\n this.showFormatted();\n },\n\n showBibtex: function() {\n this.$(\".citations-to-formatted\").show();\n this.$(\".citations-to-bibtex\").hide();\n this.$(\".citations-bibtex\").show();\n this.$(\".citations-formatted\").hide();\n this.$(\".citations-bibtex-text\").select();\n },\n\n showFormatted: function() {\n this.$(\".citations-to-formatted\").hide();\n this.$(\".citations-to-bibtex\").show();\n this.$(\".citations-bibtex\").hide();\n this.$(\".citations-formatted\").show();\n },\n\n partialWarningElement: function() {\n if (this.collection.partial) {\n return [\n '
',\n \"Warning: This is a experimental feature. Most Galaxy tools will not annotate\",\n \" citations explicitly at this time. When writing up your analysis, please manually\",\n \" review your histories and find all references\",\n \" that should be cited in order to completely describe your work. Also, please remember to\",\n ' cite Galaxy.',\n \"
\"\n ].join(\"\");\n } else {\n return \"\";\n }\n },\n\n citationsElement: function() {\n return [\n '
',\n '
',\n _l(\"Citations\"),\n ' ',\n ' ',\n \"
\",\n '
',\n this.partialWarningElement(),\n '',\n \"
\",\n '
',\n '',\n \"
\",\n \"
\"\n ].join(\"\");\n }\n});\n\n//==============================================================================\nexport default {\n CitationView: CitationView,\n CitationListView: CitationListView\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/citation/citation-view.js","import visualization from \"viz/visualization\";\nimport * as bigwig from \"libs/bbi/bigwig\";\n/**\n * Data manager for BBI datasets/files, including BigWig and BigBed.\n */\nvar BBIDataManager = visualization.GenomeDataManager.extend({\n /**\n * Load data from server and manage data entries. Adds a Deferred to manager\n * for region; when data becomes available, replaces Deferred with data.\n * Returns the Deferred that resolves when data is available.\n */\n load_data: function(region, mode, resolution, extra_params) {\n var deferred = $.Deferred();\n this.set_data(region, deferred);\n\n var url = `${Galaxy.root}datasets/${this.get(\"dataset\").id}/display`;\n\n var self = this;\n var promise = new $.Deferred();\n $.when(bigwig.makeBwg(url)).then((bb, err) => {\n $.when(bb.readWigData(region.get(\"chrom\"), region.get(\"start\"), region.get(\"end\"))).then(data => {\n // Transform data into \"bigwig\" format for LinePainter. \"bigwig\" format is an array of 2-element arrays\n // where each element is [position, score]; unlike real bigwig format, no gaps are allowed.\n var result = [];\n\n var prev = { max: Number.MIN_VALUE };\n data.forEach(d => {\n // If there is a gap between prev and d, fill it with an interval with score 0.\n // This is necessary for LinePainter to draw correctly.\n if (prev.max !== d.min - 1) {\n // +1 to start after previous region.\n result.push([prev.max + 1, 0]);\n // -2 = -1 for converting from 1-based to 0-based coordinates,\n // -1 for ending before current region.\n result.push([d.min - 2, 0]);\n }\n\n // Add data point for entry start. -1 to convert from wiggle\n // 1-based coordinates to 0-based browser coordinates.\n result.push([d.min - 1, d.score]);\n\n // Add data point for entry end:\n result.push([d.max, d.score]);\n\n prev = d;\n });\n\n var entry = {\n data: result,\n region: region,\n dataset_type: \"bigwig\"\n };\n\n self.set_data(region, entry);\n deferred.resolve(entry);\n });\n });\n\n return deferred;\n }\n});\n\nexport default {\n BBIDataManager: BBIDataManager\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/viz/bbi-data-manager.js","//\n// Author: Jeremy Goecks\n//\n// Modified from:\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// bigwig.js: indexed binary WIG (and BED) files\n//\n\n// Requirements:\n// * jquery and ajax-native plugin for reading binary data, jquery for promises\n// * spans for working working with genomic intervals\n// * jszlib for decompression.\ndefine([\"libs/bbi/spans\", \"libs/bbi/jszlib\", \"libs/bbi/jquery-ajax-native\"], function(spans, jszlib) {\n \"use strict\";\n\n // -- Copied from das.js --\n\n function DASFeature() {\n }\n\n function DASGroup(id) {\n if (id)\n this.id = id;\n }\n\n // -- End copy --\n\n // -- Copied from bin.js --\n\n function readInt(ba, offset) {\n return (ba[offset + 3] << 24) | (ba[offset + 2] << 16) | (ba[offset + 1] << 8) | (ba[offset]);\n }\n\n // -- End copy --\n\n // Some globals.\n var Range = spans.Range;\n var union = spans.union;\n var intersection = spans.intersection;\n\n var jszlib_inflate_buffer = jszlib.inflateBuffer;\n var arrayCopy = jszlib.arrayCopy;\n\n var BIG_WIG_MAGIC = 0x888FFC26;\n var BIG_WIG_MAGIC_BE = 0x26FC8F88;\n var BIG_BED_MAGIC = 0x8789F2EB;\n var BIG_BED_MAGIC_BE = 0xEBF28987;\n\n\n var BIG_WIG_TYPE_GRAPH = 1;\n var BIG_WIG_TYPE_VSTEP = 2;\n var BIG_WIG_TYPE_FSTEP = 3;\n\n var M1 = 256;\n var M2 = 256*256;\n var M3 = 256*256*256;\n var M4 = 256*256*256*256;\n\n var BED_COLOR_REGEXP = new RegExp(\"^[0-9]+,[0-9]+,[0-9]+\");\n\n /**\n * Read binary data from a URL using HTTP Range header. Requires jQuery and ajax-native plugin.\n */\n function read(url, start, size) {\n // Taken from bin.js:\n // This may be necessary for Safari:\n // if ((isSafari || this.opts.salt) && url.indexOf('?') < 0) {\n // url = url + '?salt=' + b64_sha1('' + Date.now() + ',' + (++seed));\n // }\n\n var chunkSizeLimit = Math.pow(10, 6); // 1 MB\n if(size > chunkSizeLimit) {\n // TODO: raise error.\n }\n\n // Read data from remote file.\n return $.ajax({\n type: 'GET',\n dataType: 'native',\n url: url,\n // Potential timeout on first request to catch mixed-content errors on Chromium.\n timeout: 5000,\n beforeSend: function(xhrObj) {\n // (size - 1) because range is inclusive.\n xhrObj.setRequestHeader(\"Range\", \"bytes=\" + start + \"-\" + (start + (size - 1)));\n },\n xhrFields: {\n responseType: 'arraybuffer'\n }\n });\n }\n\n function bwg_readOffset(ba, o) {\n var offset = ba[o] + ba[o+1]*M1 + ba[o+2]*M2 + ba[o+3]*M3 + ba[o+4]*M4;\n return offset;\n }\n\n function BigWig() {\n }\n\n /**\n * Read the chromosome B+ tree header.\n */\n BigWig.prototype.readChromTree = function() {\n var thisB = this;\n this.chromsToIDs = {};\n this.idsToChroms = {};\n this.maxID = 0;\n\n var udo = this.unzoomedDataOffset;\n var eb = (udo - this.chromTreeOffset) & 3;\n udo = udo + 4 - eb;\n\n // Read and parse the chrom tree, return the promise so that subsequent actions can be taken.\n return $.when(read(this.url, this.chromTreeOffset, udo - this.chromTreeOffset)).then(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n var bptReadNode = function(offset) {\n var nodeType = ba[offset];\n var cnt = sa[(offset/2) + 1];\n offset += 4;\n for (var n = 0; n < cnt; ++n) {\n if (nodeType === 0) {\n offset += keySize;\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n childOffset -= thisB.chromTreeOffset;\n bptReadNode(childOffset);\n } else {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode !== 0) {\n key += String.fromCharCode(charCode);\n }\n }\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var chromSize = (ba[offset + 7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n offset += 8;\n\n thisB.chromsToIDs[key] = chromId;\n if (key.indexOf('chr') === 0) {\n thisB.chromsToIDs[key.substr(3)] = chromId;\n }\n thisB.idsToChroms[chromId] = key;\n thisB.maxID = Math.max(thisB.maxID, chromId);\n }\n }\n };\n bptReadNode(rootNodeOffset);\n });\n }\n\n function BigWigView(bwg, cirTreeOffset, cirTreeLength, isSummary) {\n this.bwg = bwg;\n this.cirTreeOffset = cirTreeOffset;\n this.cirTreeLength = cirTreeLength;\n this.isSummary = isSummary;\n }\n\n\n\n BigWigView.prototype.readWigData = function(chrName, min, max) {\n var chr = this.bwg.chromsToIDs[chrName],\n rval;\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n rval = [];\n } else {\n rval = this.readWigDataById(chr, min, max);\n }\n\n return rval;\n };\n\n BigWigView.prototype.readWigDataById = function(chr, min, max) {\n var thisB = this,\n promise = $.Deferred();\n\n // Read the R-tree index header and then read data again.\n if (!this.cirHeader) {\n $.when(read(thisB.bwg.url, this.cirTreeOffset, 48)).then(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n $.when(thisB.readWigDataById(chr, min, max)).then(function(result) {\n promise.resolve(result);\n });\n });\n return promise;\n }\n\n var blocksToFetch = [];\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var filter = function(chromId, fmin, fmax, toks) {\n return ((chr < 0 || chromId == chr) && fmin <= max && fmax >= min);\n };\n\n var cirFobRecur = function(offset, level) {\n if (thisB.bwg.instrument)\n console.log('level=' + level + '; offset=' + offset + '; time=' + (Date.now()|0));\n\n outstanding += offset.length;\n\n if (offset.length == 1 && offset[0] - thisB.cirTreeOffset == 48 && thisB.cachedCirRoot) {\n cirFobRecur2(thisB.cachedCirRoot, 0, level);\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n return;\n }\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n };\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n $.when(read(thisB.bwg.url, fr.min(), fr.max() - fr.min())).then(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n\n if (offset[i] - thisB.cirTreeOffset == 48 && offset[i] - fr.min() === 0)\n thisB.cachedCirRoot = resultBuffer;\n\n --outstanding;\n if (outstanding === 0) {\n $.when(thisB.fetchFeatures(filter, blocksToFetch)).then(function(result) {\n promise.resolve(result);\n });\n }\n }\n }\n });\n };\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf !== 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if (((chr < 0 || startChrom < chr) || (startChrom == chr && startBase <= max)) &&\n ((chr < 0 || endChrom > chr) || (endChrom == chr && endBase >= min)))\n {\n blocksToFetch.push({offset: blockOffset, size: blockSize});\n }\n offset += 32;\n }\n } else {\n var recurOffsets = [];\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n if ((chr < 0 || startChrom < chr || (startChrom == chr && startBase <= max)) &&\n (chr < 0 || endChrom > chr || (endChrom == chr && endBase >= min)))\n {\n recurOffsets.push(blockOffset);\n }\n offset += 24;\n }\n if (recurOffsets.length > 0) {\n cirFobRecur(recurOffsets, level + 1);\n }\n }\n };\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n return promise;\n };\n\n /**\n * Fetch data for a set of blocks. Returns a promise that resolves to fetched data.\n */\n BigWigView.prototype.fetchFeatures = function(filter, blocksToFetch) {\n var thisB = this,\n promise = $.Deferred();\n\n blocksToFetch.sort(function(b0, b1) {\n return (b0.offset|0) - (b1.offset|0);\n });\n\n if (blocksToFetch.length === 0) {\n return [];\n } else {\n var features = [];\n var createFeature = function(chr, fmin, fmax, opts) {\n if (!opts) {\n opts = {};\n }\n\n var f = new DASFeature();\n f._chromId = chr;\n f.segment = thisB.bwg.idsToChroms[chr];\n f.min = fmin;\n f.max = fmax;\n f.type = thisB.bwg.type;\n\n for (var k in opts) {\n f[k] = opts[k];\n }\n\n features.push(f);\n };\n\n // Recursive function to read blocks of data.\n var tramp = function() {\n if (blocksToFetch.length === 0) {\n var afterBWG = Date.now();\n // dlog('BWG fetch took ' + (afterBWG - beforeBWG) + 'ms');\n return promise.resolve(features);\n }\n else {\n var block = blocksToFetch[0];\n if (block.data) {\n thisB.parseFeatures(block.data, createFeature, filter);\n blocksToFetch.splice(0, 1);\n tramp();\n }\n else {\n var fetchStart = block.offset;\n var fetchSize = block.size;\n var bi = 1;\n while (bi < blocksToFetch.length && blocksToFetch[bi].offset == (fetchStart + fetchSize)) {\n fetchSize += blocksToFetch[bi].size;\n ++bi;\n }\n\n $.when(read(thisB.bwg.url, fetchStart, fetchSize)).then(function(result) {\n var offset = 0;\n var bi = 0;\n while (offset < fetchSize) {\n var fb = blocksToFetch[bi];\n\n var data;\n if (thisB.bwg.uncompressBufSize > 0) {\n data = jszlib_inflate_buffer(result, offset + 2, fb.size - 2);\n } else {\n var tmp = new Uint8Array(fb.size); // FIXME is this really the best we can do?\n arrayCopy(new Uint8Array(result, offset, fb.size), 0, tmp, 0, fb.size);\n data = tmp.buffer;\n }\n fb.data = data;\n\n offset += fb.size;\n ++bi;\n }\n tramp();\n });\n }\n }\n };\n tramp();\n }\n\n return promise;\n };\n\n BigWigView.prototype.parseFeatures = function(data, createFeature, filter) {\n var ba = new Uint8Array(data);\n\n if (this.isSummary) {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var itemCount = data.byteLength/32;\n for (var i = 0; i < itemCount; ++i) {\n var chromId = la[(i*8)];\n var start = la[(i*8)+1];\n var end = la[(i*8)+2];\n var validCnt = la[(i*8)+3];\n var minVal = fa[(i*8)+4];\n var maxVal = fa[(i*8)+5];\n var sumData = fa[(i*8)+6];\n var sumSqData = fa[(i*8)+7];\n\n if (filter(chromId, start + 1, end)) {\n var summaryOpts = {type: 'bigwig', score: sumData/validCnt, maxScore: maxVal};\n if (this.bwg.type == 'bigbed') {\n summaryOpts.type = 'density';\n }\n createFeature(chromId, start + 1, end, summaryOpts);\n }\n }\n }\n else if (this.bwg.type == 'bigwig') {\n var sa = new Int16Array(data);\n var la = new Int32Array(data);\n var fa = new Float32Array(data);\n\n var chromId = la[0];\n var blockStart = la[1];\n var blockEnd = la[2];\n var itemStep = la[3];\n var itemSpan = la[4];\n var blockType = ba[20];\n var itemCount = sa[11];\n\n if (blockType == BIG_WIG_TYPE_FSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var score = fa[i + 6];\n var fmin = blockStart + (i*itemStep) + 1, fmax = blockStart + (i*itemStep) + itemSpan;\n if (filter(chromId, fmin, fmax))\n createFeature(chromId, fmin, fmax, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_VSTEP) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*2) + 6] + 1;\n var end = start + itemSpan - 1;\n var score = fa[(i*2) + 7];\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else if (blockType == BIG_WIG_TYPE_GRAPH) {\n for (var i = 0; i < itemCount; ++i) {\n var start = la[(i*3) + 6] + 1;\n var end = la[(i*3) + 7];\n var score = fa[(i*3) + 8];\n if (start > end) {\n start = end;\n }\n if (filter(chromId, start, end))\n createFeature(chromId, start, end, {score: score});\n }\n } else {\n console.log('Currently not handling bwgType=' + blockType);\n }\n } else if (this.bwg.type == 'bigbed') {\n var offset = 0;\n var dfc = this.bwg.definedFieldCount;\n var schema = this.bwg.schema;\n\n while (offset < ba.length) {\n var chromId = (ba[offset+3]<<24) | (ba[offset+2]<<16) | (ba[offset+1]<<8) | (ba[offset+0]);\n var start = (ba[offset+7]<<24) | (ba[offset+6]<<16) | (ba[offset+5]<<8) | (ba[offset+4]);\n var end = (ba[offset+11]<<24) | (ba[offset+10]<<16) | (ba[offset+9]<<8) | (ba[offset+8]);\n offset += 12;\n var rest = '';\n while (true) {\n var ch = ba[offset++];\n if (ch != 0) {\n rest += String.fromCharCode(ch);\n } else {\n break;\n }\n }\n\n var featureOpts = {};\n\n var bedColumns;\n if (rest.length > 0) {\n bedColumns = rest.split('\\t');\n } else {\n bedColumns = [];\n }\n if (bedColumns.length > 0 && dfc > 3) {\n featureOpts.label = bedColumns[0];\n }\n if (bedColumns.length > 1 && dfc > 4) {\n var score = parseInt(bedColumns[1]);\n if (!isNaN(score))\n featureOpts.score = score;\n }\n if (bedColumns.length > 2 && dfc > 5) {\n featureOpts.orientation = bedColumns[2];\n }\n if (bedColumns.length > 5 && dfc > 8) {\n var color = bedColumns[5];\n if (BED_COLOR_REGEXP.test(color)) {\n featureOpts.itemRgb = 'rgb(' + color + ')';\n }\n }\n\n if (bedColumns.length > dfc-3 && schema) {\n for (var col = dfc - 3; col < bedColumns.length; ++col) {\n featureOpts[schema.fields[col+3].name] = bedColumns[col];\n }\n }\n\n if (filter(chromId, start + 1, end, bedColumns)) {\n if (dfc < 12) {\n createFeature(chromId, start + 1, end, featureOpts);\n } else {\n // TODO: add block starts, sizes, thick start, thick end to feature.\n var thickStart = bedColumns[3]|0;\n var thickEnd = bedColumns[4]|0;\n var blockCount = bedColumns[6]|0;\n var blockSizes = bedColumns[7].split(',');\n var blockStarts = bedColumns[8].split(',');\n\n if (featureOpts.exonFrames) {\n var exonFrames = featureOpts.exonFrames.split(',');\n featureOpts.exonFrames = undefined;\n }\n\n featureOpts.type = 'transcript'\n var grp = new DASGroup();\n for (var k in featureOpts) {\n grp[k] = featureOpts[k];\n }\n grp.id = bedColumns[0];\n grp.segment = this.bwg.idsToChroms[chromId];\n grp.min = start + 1;\n grp.max = end;\n grp.notes = [];\n featureOpts.groups = [grp];\n\n // Moving towards using bigGenePred model, but will\n // still support old Dalliance-style BED12+gene-name for the\n // foreseeable future.\n if (bedColumns.length > 9) {\n var geneId = featureOpts.geneName || bedColumns[9];\n var geneName = geneId;\n if (bedColumns.length > 10) {\n geneName = bedColumns[10];\n }\n if (featureOpts.geneName2)\n geneName = featureOpts.geneName2;\n\n var gg = $.extend({}, grp);\n gg.id = geneId;\n gg.label = geneName;\n gg.type = 'gene';\n featureOpts.groups.push(gg);\n }\n\n var spanList = [];\n for (var b = 0; b < blockCount; ++b) {\n var bmin = (blockStarts[b]|0) + start;\n var bmax = bmin + (blockSizes[b]|0);\n var span = new Range(bmin, bmax);\n spanList.push(span);\n }\n var spans = union(spanList);\n\n var tsList = spans.ranges();\n for (var s = 0; s < tsList.length; ++s) {\n var ts = tsList[s];\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n\n if (thickEnd > thickStart) {\n var codingRegion = (featureOpts.orientation == '+') ?\n new Range(thickStart, thickEnd + 3) :\n new Range(thickStart - 3, thickEnd);\n // +/- 3 to account for stop codon\n\n var tl = intersection(spans, codingRegion);\n if (tl) {\n featureOpts.type = 'translation';\n var tlList = tl.ranges();\n var readingFrame = 0;\n\n var tlOffset = 0;\n while (tlList[0].min() > tsList[tlOffset].max())\n tlOffset++;\n\n for (var s = 0; s < tlList.length; ++s) {\n // Record reading frame for every exon\n var index = s;\n if (featureOpts.orientation == '-')\n index = tlList.length - s - 1;\n var ts = tlList[index];\n featureOpts.readframe = readingFrame;\n if (exonFrames) {\n var brf = parseInt(exonFrames[index + tlOffset]);\n if (typeof(brf) === 'number' && brf >= 0 && brf <= 2) {\n featureOpts.readframe = brf;\n featureOpts.readframeExplicit = true;\n }\n }\n var length = ts.max() - ts.min();\n readingFrame = (readingFrame + length) % 3;\n createFeature(chromId, ts.min() + 1, ts.max(), featureOpts);\n }\n }\n }\n }\n }\n }\n } else {\n throw Error(\"Don't know what to do with \" + this.bwg.type);\n }\n }\n\n //\n // nasty cut/paste, should roll back in!\n //\n\n BigWigView.prototype.getFirstAdjacent = function(chrName, pos, dir, callback) {\n var chr = this.bwg.chromsToIDs[chrName];\n if (chr === undefined) {\n // Not an error because some .bwgs won't have data for all chromosomes.\n return callback([]);\n } else {\n this.getFirstAdjacentById(chr, pos, dir, callback);\n }\n }\n\n BigWigView.prototype.getFirstAdjacentById = function(chr, pos, dir, callback) {\n var thisB = this;\n if (!this.cirHeader) {\n this.bwg.data.slice(this.cirTreeOffset, 48).fetch(function(result) {\n thisB.cirHeader = result;\n var la = new Int32Array(thisB.cirHeader);\n thisB.cirBlockSize = la[1];\n thisB.getFirstAdjacentById(chr, pos, dir, callback);\n });\n return;\n }\n\n var blockToFetch = null;\n var bestBlockChr = -1;\n var bestBlockOffset = -1;\n\n var outstanding = 0;\n\n var beforeBWG = Date.now();\n\n var cirFobRecur = function(offset, level) {\n outstanding += offset.length;\n\n var maxCirBlockSpan = 4 + (thisB.cirBlockSize * 32); // Upper bound on size, based on a completely full leaf node.\n var spans;\n for (var i = 0; i < offset.length; ++i) {\n var blockSpan = new Range(offset[i], offset[i] + maxCirBlockSpan);\n spans = spans ? union(spans, blockSpan) : blockSpan;\n }\n\n var fetchRanges = spans.ranges();\n for (var r = 0; r < fetchRanges.length; ++r) {\n var fr = fetchRanges[r];\n cirFobStartFetch(offset, fr, level);\n }\n }\n\n var cirFobStartFetch = function(offset, fr, level, attempts) {\n var length = fr.max() - fr.min();\n thisB.bwg.data.slice(fr.min(), fr.max() - fr.min()).fetch(function(resultBuffer) {\n for (var i = 0; i < offset.length; ++i) {\n if (fr.contains(offset[i])) {\n cirFobRecur2(resultBuffer, offset[i] - fr.min(), level);\n --outstanding;\n if (outstanding == 0) {\n if (!blockToFetch) {\n if (dir > 0 && (chr != 0 || pos > 0)) {\n return thisB.getFirstAdjacentById(0, 0, dir, callback);\n } else if (dir < 0 && (chr != thisB.bwg.maxID || pos < 1000000000)) {\n return thisB.getFirstAdjacentById(thisB.bwg.maxID, 1000000000, dir, callback);\n }\n return callback([]);\n }\n\n thisB.fetchFeatures(function(chrx, fmin, fmax, toks) {\n return (dir < 0 && (chrx < chr || fmax < pos)) || (dir > 0 && (chrx > chr || fmin > pos));\n }, [blockToFetch], function(features) {\n var bestFeature = null;\n var bestChr = -1;\n var bestPos = -1;\n for (var fi = 0; fi < features.length; ++fi) {\n var f = features[fi];\n var chrx = f._chromId, fmin = f.min, fmax = f.max;\n if (bestFeature == null || ((dir < 0) && (chrx > bestChr || fmax > bestPos)) || ((dir > 0) && (chrx < bestChr || fmin < bestPos))) {\n bestFeature = f;\n bestPos = (dir < 0) ? fmax : fmin;\n bestChr = chrx;\n }\n }\n\n if (bestFeature != null)\n return callback([bestFeature]);\n else\n return callback([]);\n });\n }\n }\n }\n });\n }\n\n var cirFobRecur2 = function(cirBlockData, offset, level) {\n var ba = new Uint8Array(cirBlockData);\n var sa = new Int16Array(cirBlockData);\n var la = new Int32Array(cirBlockData);\n\n var isLeaf = ba[offset];\n var cnt = sa[offset/2 + 1];\n offset += 4;\n\n if (isLeaf != 0) {\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = bwg_readOffset(ba, offset+16);\n var blockSize = bwg_readOffset(ba, offset+24);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)))))\n {\n // console.log('Got an interesting block: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n if (/_random/.exec(thisB.bwg.idsToChroms[startChrom])) {\n // dlog('skipping random: ' + thisB.bwg.idsToChroms[startChrom]);\n } else if (blockToFetch == null || ((dir < 0) && (endChrom > bestBlockChr || (endChrom == bestBlockChr && endBase > bestBlockOffset)) ||\n (dir > 0) && (startChrom < bestBlockChr || (startChrom == bestBlockChr && startBase < bestBlockOffset))))\n {\n // dlog('best is: startBase=' + startChrom + ':' + startBase + '; endBase=' + endChrom + ':' + endBase + '; offset=' + blockOffset + '; size=' + blockSize);\n blockToFetch = {offset: blockOffset, size: blockSize};\n bestBlockOffset = (dir < 0) ? endBase : startBase;\n bestBlockChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 32;\n }\n } else {\n var bestRecur = -1;\n var bestPos = -1;\n var bestChr = -1;\n for (var i = 0; i < cnt; ++i) {\n var lo = offset/4;\n var startChrom = la[lo];\n var startBase = la[lo + 1];\n var endChrom = la[lo + 2];\n var endBase = la[lo + 3];\n var blockOffset = (la[lo + 4]<<32) | (la[lo + 5]);\n if ((dir < 0 && ((startChrom < chr || (startChrom == chr && startBase <= pos)) &&\n (endChrom >= chr))) ||\n (dir > 0 && ((endChrom > chr || (endChrom == chr && endBase >= pos)) &&\n (startChrom <= chr))))\n {\n if (bestRecur < 0 || endBase > bestPos) {\n bestRecur = blockOffset;\n bestPos = (dir < 0) ? endBase : startBase;\n bestChr = (dir < 0) ? endChrom : startChrom;\n }\n }\n offset += 24;\n }\n if (bestRecur >= 0) {\n cirFobRecur([bestRecur], level + 1);\n }\n }\n };\n\n\n cirFobRecur([thisB.cirTreeOffset + 48], 1);\n }\n\n /**\n * Automatically choose a zoom level and return data from that level.\n */\n BigWig.prototype.readWigData = function(chrName, min, max) {\n // Maximum number of data points to return when reading a bigwig. This is used\n // to choose the appropriate level. One data point ~= 25-65 bytes.\n // FIXME: For targeted sequencing, data points returned is going to be much lower,\n // so this will need to be tuned appropriately.\n var MAX_DATA_POINTS = 25000;\n\n var range = max - min,\n view;\n // If no zooming needed or available (common in bigbed), use unzoomed view.\n if (range <= MAX_DATA_POINTS || this.zoomLevels.length === 0) {\n view = this.getUnzoomedView();\n }\n else {\n // Find reasonable zoom level. Reduction is the # of bases represented\n // by each data point at that level.\n for (var i = 0; i < this.zoomLevels.length; i++) {\n if (range/this.zoomLevels[i].reduction < MAX_DATA_POINTS) {\n view = this.getZoomedView(i);\n break;\n }\n }\n }\n\n return view.readWigData(chrName, min, max);\n }\n\n BigWig.prototype.getUnzoomedView = function() {\n if (!this.unzoomedView) {\n var cirLen = 4000;\n var nzl = this.zoomLevels[0];\n if (nzl) {\n cirLen = this.zoomLevels[0].dataOffset - this.unzoomedIndexOffset;\n }\n this.unzoomedView = new BigWigView(this, this.unzoomedIndexOffset, cirLen, false);\n }\n return this.unzoomedView;\n }\n\n BigWig.prototype.getZoomedView = function(z) {\n var zh = this.zoomLevels[z];\n if (!zh.view) {\n zh.view = new BigWigView(this, zh.indexOffset, /* this.zoomLevels[z + 1].dataOffset - zh.indexOffset */ 4000, true);\n }\n return zh.view;\n }\n\n /**\n * Create a BigWig object using a URL to a bigwig/bigbed file. Returns a promise\n * that resolves to the object when it's available.\n */\n function makeBwg(url) {\n var promise = $.Deferred(),\n bwg = new BigWig();\n bwg.url = url;\n\n // Read and parse bigwig header, including chrom tree.\n $.when(read(bwg.url, 0, 512)).then(function(result) {\n if (!result) {\n return promise.resolve(null, \"Couldn't fetch file\");\n }\n\n var header = result;\n var ba = new Uint8Array(header);\n var sa = new Int16Array(header);\n var la = new Int32Array(header);\n var magic = ba[0] + (M1 * ba[1]) + (M2 * ba[2]) + (M3 * ba[3]);\n if (magic == BIG_WIG_MAGIC) {\n bwg.type = 'bigwig';\n } else if (magic == BIG_BED_MAGIC) {\n bwg.type = 'bigbed';\n } else if (magic == BIG_WIG_MAGIC_BE || magic == BIG_BED_MAGIC_BE) {\n return promise.resolve(null, \"Currently don't support big-endian BBI files\");\n\n } else {\n return promise.resolve(null, \"Not a supported format, magic=0x\" + magic.toString(16));\n\n }\n\n bwg.version = sa[2]; // 4\n bwg.numZoomLevels = sa[3]; // 6\n bwg.chromTreeOffset = bwg_readOffset(ba, 8);\n bwg.unzoomedDataOffset = bwg_readOffset(ba, 16);\n bwg.unzoomedIndexOffset = bwg_readOffset(ba, 24);\n bwg.fieldCount = sa[16]; // 32\n bwg.definedFieldCount = sa[17]; // 34\n bwg.asOffset = bwg_readOffset(ba, 36);\n bwg.totalSummaryOffset = bwg_readOffset(ba, 44);\n bwg.uncompressBufSize = la[13]; // 52\n bwg.extHeaderOffset = bwg_readOffset(ba, 56);\n\n bwg.zoomLevels = [];\n for (var zl = 0; zl < bwg.numZoomLevels; ++zl) {\n var zlReduction = la[zl*6 + 16]\n var zlData = bwg_readOffset(ba, zl*24 + 72);\n var zlIndex = bwg_readOffset(ba, zl*24 + 80);\n bwg.zoomLevels.push({reduction: zlReduction, dataOffset: zlData, indexOffset: zlIndex});\n }\n\n $.when(bwg.readChromTree()).then(function() {\n bwg.getAutoSQL(function(as) {\n bwg.schema = as;\n return promise.resolve(bwg);\n });\n });\n });\n\n return promise;\n }\n\n\n BigWig.prototype._tsFetch = function(zoom, chr, min, max, callback) {\n var bwg = this;\n if (zoom >= this.zoomLevels.length - 1) {\n if (!this.topLevelReductionCache) {\n this.getZoomedView(this.zoomLevels.length - 1).readWigDataById(-1, 0, 300000000, function(feats) {\n bwg.topLevelReductionCache = feats;\n return bwg._tsFetch(zoom, chr, min, max, callback);\n });\n } else {\n var f = [];\n var c = this.topLevelReductionCache;\n for (var fi = 0; fi < c.length; ++fi) {\n if (c[fi]._chromId == chr) {\n f.push(c[fi]);\n }\n }\n return callback(f);\n }\n } else {\n var view;\n if (zoom < 0) {\n view = this.getUnzoomedView();\n } else {\n view = this.getZoomedView(zoom);\n }\n return view.readWigDataById(chr, min, max, callback);\n }\n }\n\n BigWig.prototype.thresholdSearch = function(chrName, referencePoint, dir, threshold, callback) {\n dir = (dir<0) ? -1 : 1;\n var bwg = this;\n var initialChr = this.chromsToIDs[chrName];\n var candidates = [{chrOrd: 0, chr: initialChr, zoom: bwg.zoomLevels.length - 4, min: 0, max: 300000000, fromRef: true}]\n for (var i = 1; i <= this.maxID + 1; ++i) {\n var chrId = (initialChr + (dir*i)) % (this.maxID + 1);\n if (chrId < 0)\n chrId += (this.maxID + 1);\n candidates.push({chrOrd: i, chr: chrId, zoom: bwg.zoomLevels.length - 1, min: 0, max: 300000000})\n }\n\n function fbThresholdSearchRecur() {\n if (candidates.length == 0) {\n return callback(null);\n }\n candidates.sort(function(c1, c2) {\n var d = c1.zoom - c2.zoom;\n if (d != 0)\n return d;\n\n d = c1.chrOrd - c2.chrOrd;\n if (d != 0)\n return d;\n else\n return c1.min - c2.min * dir;\n });\n\n var candidate = candidates.splice(0, 1)[0];\n bwg._tsFetch(candidate.zoom, candidate.chr, candidate.min, candidate.max, function(feats) {\n var rp = dir > 0 ? 0 : 300000000;\n if (candidate.fromRef)\n rp = referencePoint;\n\n for (var fi = 0; fi < feats.length; ++fi) {\n var f = feats[fi];\n var score;\n if (f.maxScore != undefined)\n score = f.maxScore;\n else\n score = f.score;\n\n if (dir > 0) {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.min > rp)\n return callback(f);\n } else if (f.max > rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n } else {\n if (score > threshold) {\n if (candidate.zoom < 0) {\n if (f.max < rp)\n return callback(f);\n } else if (f.min < rp) {\n candidates.push({chr: candidate.chr, chrOrd: candidate.chrOrd, zoom: candidate.zoom - 2, min: f.min, max: f.max, fromRef: candidate.fromRef});\n }\n }\n }\n }\n fbThresholdSearchRecur();\n });\n }\n\n fbThresholdSearchRecur();\n }\n\n BigWig.prototype.getAutoSQL = function(callback) {\n var thisB = this;\n if (!this.asOffset)\n return callback(null);\n\n $.when(read(this.url, this.asOffset, 2048)).then(function(result) {\n var ba = new Uint8Array(result);\n var s = '';\n for (var i = 0; i < ba.length; ++i) {\n if (ba[i] == 0)\n break;\n s += String.fromCharCode(ba[i]);\n }\n\n /*\n * Quick'n'dirty attempt to parse autoSql format.\n * See: http://www.linuxjournal.com/files/linuxjournal.com/linuxjournal/articles/059/5949/5949l2.html\n */\n\n var header_re = /(\\w+)\\s+(\\w+)\\s+(\"([^\"]+)\")?\\s+\\(\\s*/;\n var field_re = /([\\w\\[\\]]+)\\s+(\\w+)\\s*;\\s*(\"([^\"]+)\")?\\s*/g;\n\n var headerMatch = header_re.exec(s);\n if (headerMatch) {\n var as = {\n declType: headerMatch[1],\n name: headerMatch[2],\n comment: headerMatch[4],\n\n fields: []\n };\n\n s = s.substring(headerMatch[0]);\n for (var m = field_re.exec(s); m != null; m = field_re.exec(s)) {\n as.fields.push({type: m[1],\n name: m[2],\n comment: m[4]});\n }\n\n return callback(as);\n }\n });\n };\n\n BigWig.prototype.getExtraIndices = function(callback) {\n var thisB = this;\n if (this.version < 4 || this.extHeaderOffset == 0 || this.type != 'bigbed') {\n return callback(null);\n } else {\n this.data.slice(this.extHeaderOffset, 64).fetch(function(result) {\n if (!result) {\n return callback(null, \"Couldn't fetch extension header\");\n }\n\n var ba = new Uint8Array(result);\n var sa = new Int16Array(result);\n var la = new Int32Array(result);\n\n var extHeaderSize = sa[0];\n var extraIndexCount = sa[1];\n var extraIndexListOffset = bwg_readOffset(ba, 4);\n\n if (extraIndexCount == 0) {\n return callback(null);\n }\n\n // FIXME 20byte records only make sense for single-field indices.\n // Right now, these seem to be the only things around, but the format\n // is actually more general.\n thisB.data.slice(extraIndexListOffset, extraIndexCount * 20).fetch(function(eil) {\n if (!eil) {\n return callback(null, \"Couldn't fetch index info\");\n }\n\n var ba = new Uint8Array(eil);\n var sa = new Int16Array(eil);\n var la = new Int32Array(eil);\n\n var indices = [];\n for (var ii = 0; ii < extraIndexCount; ++ii) {\n var eiType = sa[ii*10];\n var eiFieldCount = sa[ii*10 + 1];\n var eiOffset = bwg_readOffset(ba, ii*20 + 4);\n var eiField = sa[ii*10 + 8]\n var index = new BBIExtraIndex(thisB, eiType, eiFieldCount, eiOffset, eiField);\n indices.push(index);\n }\n callback(indices);\n });\n });\n }\n }\n\n function BBIExtraIndex(bbi, type, fieldCount, offset, field) {\n this.bbi = bbi;\n this.type = type;\n this.fieldCount = fieldCount;\n this.offset = offset;\n this.field = field;\n }\n\n BBIExtraIndex.prototype.lookup = function(name, callback) {\n var thisB = this;\n\n this.bbi.data.slice(this.offset, 32).fetch(function(bpt) {\n var ba = new Uint8Array(bpt);\n var sa = new Int16Array(bpt);\n var la = new Int32Array(bpt);\n var bptMagic = la[0];\n var blockSize = la[1];\n var keySize = la[2];\n var valSize = la[3];\n var itemCount = bwg_readOffset(ba, 16);\n var rootNodeOffset = 32;\n\n function bptReadNode(nodeOffset) {\n thisB.bbi.data.slice(nodeOffset, 4 + (blockSize * (keySize + valSize))).fetch(function(node) {\n var ba = new Uint8Array(node);\n var sa = new Uint16Array(node);\n var la = new Uint32Array(node);\n\n var nodeType = ba[0];\n var cnt = sa[1];\n\n var offset = 4;\n if (nodeType == 0) {\n var lastChildOffset = null;\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n var childOffset = bwg_readOffset(ba, offset);\n offset += 8;\n\n if (name.localeCompare(key) < 0 && lastChildOffset) {\n bptReadNode(lastChildOffset);\n return;\n }\n lastChildOffset = childOffset;\n }\n bptReadNode(lastChildOffset);\n } else {\n for (var n = 0; n < cnt; ++n) {\n var key = '';\n for (var ki = 0; ki < keySize; ++ki) {\n var charCode = ba[offset++];\n if (charCode != 0) {\n key += String.fromCharCode(charCode);\n }\n }\n\n // Specific for EI case.\n if (key == name) {\n var start = bwg_readOffset(ba, offset);\n var length = readInt(ba, offset + 8);\n\n return thisB.bbi.getUnzoomedView().fetchFeatures(\n function(chr, min, max, toks) {\n if (toks && toks.length > thisB.field - 3)\n return toks[thisB.field - 3] == name;\n },\n [{offset: start, size: length}],\n callback);\n }\n offset += valSize;\n }\n return callback([]);\n }\n });\n }\n\n bptReadNode(thisB.offset + rootNodeOffset);\n });\n }\n\n return {\n makeBwg: makeBwg\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/bigwig.js\n// module id = 132\n// module chunks = 3","/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Dalliance Genome Explorer\n// (c) Thomas Down 2006-2010\n//\n// spans.js: JavaScript Intset/Location port.\n//\n\ndefine([], function() {\n\n\"use strict\";\n\n\nfunction Range(min, max)\n{\n if (typeof(min) != 'number' || typeof(max) != 'number')\n throw 'Bad range ' + min + ',' + max;\n this._min = min;\n this._max = max;\n}\n\nRange.prototype.min = function() {\n return this._min;\n}\n\nRange.prototype.max = function() {\n return this._max;\n}\n\nRange.prototype.contains = function(pos) {\n return pos >= this._min && pos <= this._max;\n}\n\nRange.prototype.isContiguous = function() {\n return true;\n}\n\nRange.prototype.ranges = function() {\n return [this];\n}\n\nRange.prototype._pushRanges = function(ranges) {\n ranges.push(this);\n}\n\nRange.prototype.toString = function() {\n return '[' + this._min + '-' + this._max + ']';\n}\n\nfunction _Compound(ranges) {\n // given: a set of unsorted possibly overlapping ranges\n // sort the input ranges\n var sorted = ranges.sort(_rangeOrder);\n // merge overlaps between adjacent ranges\n var merged = [];\n var current = sorted.shift();\n sorted.forEach(function(range) {\n if (range._min <= current._max) {\n if (range._max > current._max) {\n current._max = range._max;\n }\n }\n else {\n merged.push(current);\n current = range;\n }\n });\n merged.push(current);\n this._ranges = merged;\n}\n\n_Compound.prototype.min = function() {\n return this._ranges[0].min();\n}\n\n_Compound.prototype.max = function() {\n return this._ranges[this._ranges.length - 1].max();\n}\n\n// returns the index of the first range that is not less than pos\n_Compound.prototype.lower_bound = function(pos) {\n // first check if pos is out of range\n var r = this.ranges();\n if (pos > this.max()) return r.length;\n if (pos < this.min()) return 0;\n // do a binary search\n var a=0, b=r.length - 1;\n while (a <= b) {\n var m = Math.floor((a+b)/2);\n if (pos > r[m]._max) {\n a = m+1;\n }\n else if (pos < r[m]._min) {\n b = m-1;\n }\n else {\n return m;\n }\n }\n return a;\n}\n\n_Compound.prototype.contains = function(pos) {\n var lb = this.lower_bound(pos);\n if (lb < this._ranges.length && this._ranges[lb].contains(pos)) {\n return true;\n }\n return false;\n}\n\n_Compound.prototype.insertRange = function(range) {\n var lb = this.lower_bound(range._min);\n if (lb === this._ranges.length) { // range follows this\n this._ranges.push(range);\n return;\n }\n\n var r = this.ranges();\n if (range._max < r[lb]._min) { // range preceeds lb\n this._ranges.splice(lb,0,range);\n return;\n }\n\n // range overlaps lb (at least)\n if (r[lb]._min < range._min) range._min = r[lb]._min;\n var ub = lb+1;\n while (ub < r.length && r[ub]._min <= range._max) {\n ub++;\n }\n ub--;\n // ub is the upper bound of the new range\n if (r[ub]._max > range._max) range._max = r[ub]._max;\n\n // splice range into this._ranges\n this._ranges.splice(lb,ub-lb+1,range);\n return;\n}\n\n_Compound.prototype.isContiguous = function() {\n return this._ranges.length > 1;\n}\n\n_Compound.prototype.ranges = function() {\n return this._ranges;\n}\n\n_Compound.prototype._pushRanges = function(ranges) {\n for (var ri = 0; ri < this._ranges.length; ++ri)\n ranges.push(this._ranges[ri]);\n}\n\n_Compound.prototype.toString = function() {\n var s = '';\n for (var r = 0; r < this._ranges.length; ++r) {\n if (r>0) {\n s = s + ',';\n }\n s = s + this._ranges[r].toString();\n }\n return s;\n}\n\nfunction union(s0, s1) {\n if (! (s0 instanceof _Compound)) {\n if (! (s0 instanceof Array))\n s0 = [s0];\n s0 = new _Compound(s0);\n }\n\n if (s1)\n s0.insertRange(s1);\n\n return s0;\n}\n\nfunction intersection(s0, s1) {\n var r0 = s0.ranges();\n var r1 = s1.ranges();\n var l0 = r0.length, l1 = r1.length;\n var i0 = 0, i1 = 0;\n var or = [];\n\n while (i0 < l0 && i1 < l1) {\n var s0 = r0[i0], s1 = r1[i1];\n var lapMin = Math.max(s0.min(), s1.min());\n var lapMax = Math.min(s0.max(), s1.max());\n if (lapMax >= lapMin) {\n or.push(new Range(lapMin, lapMax));\n }\n if (s0.max() > s1.max()) {\n ++i1;\n } else {\n ++i0;\n }\n }\n\n if (or.length == 0) {\n return null; // FIXME\n } else if (or.length == 1) {\n return or[0];\n } else {\n return new _Compound(or);\n }\n}\n\nfunction coverage(s) {\n var tot = 0;\n var rl = s.ranges();\n for (var ri = 0; ri < rl.length; ++ri) {\n var r = rl[ri];\n tot += (r.max() - r.min() + 1);\n }\n return tot;\n}\n\n\n\nfunction rangeOrder(a, b)\n{\n if (a.min() < b.min()) {\n return -1;\n } else if (a.min() > b.min()) {\n return 1;\n } else if (a.max() < b.max()) {\n return -1;\n } else if (b.max() > a.max()) {\n return 1;\n } else {\n return 0;\n }\n}\n\nfunction _rangeOrder(a, b)\n{\n if (a._min < b._min) {\n return -1;\n } else if (a._min > b._min) {\n return 1;\n } else if (a._max < b._max) {\n return -1;\n } else if (b._max > a._max) {\n return 1;\n } else {\n return 0;\n }\n}\n\nreturn {\n Range: Range,\n union: union,\n intersection: intersection,\n coverage: coverage,\n rangeOver: rangeOrder,\n _rangeOrder: _rangeOrder\n};\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/spans.js\n// module id = 133\n// module chunks = 3","/* -*- mode: javascript; c-basic-offset: 4; indent-tabs-mode: nil -*- */\n\n//\n// Javascript ZLib\n// By Thomas Down 2010-2011\n//\n// Based very heavily on portions of jzlib (by ymnk@jcraft.com), who in\n// turn credits Jean-loup Gailly and Mark Adler for the original zlib code.\n//\n// inflate.js: ZLib inflate code\n//\n\n//\n// Shared constants\n//\n\ndefine([],function() {\n\nvar MAX_WBITS=15; // 32K LZ77 window\nvar DEF_WBITS=MAX_WBITS;\nvar MAX_MEM_LEVEL=9;\nvar MANY=1440;\nvar BMAX = 15;\n\n// preset dictionary flag in zlib header\nvar PRESET_DICT=0x20;\n\nvar Z_NO_FLUSH=0;\nvar Z_PARTIAL_FLUSH=1;\nvar Z_SYNC_FLUSH=2;\nvar Z_FULL_FLUSH=3;\nvar Z_FINISH=4;\n\nvar Z_DEFLATED=8;\n\nvar Z_OK=0;\nvar Z_STREAM_END=1;\nvar Z_NEED_DICT=2;\nvar Z_ERRNO=-1;\nvar Z_STREAM_ERROR=-2;\nvar Z_DATA_ERROR=-3;\nvar Z_MEM_ERROR=-4;\nvar Z_BUF_ERROR=-5;\nvar Z_VERSION_ERROR=-6;\n\nvar METHOD=0; // waiting for method byte\nvar FLAG=1; // waiting for flag byte\nvar DICT4=2; // four dictionary check bytes to go\nvar DICT3=3; // three dictionary check bytes to go\nvar DICT2=4; // two dictionary check bytes to go\nvar DICT1=5; // one dictionary check byte to go\nvar DICT0=6; // waiting for inflateSetDictionary\nvar BLOCKS=7; // decompressing blocks\nvar CHECK4=8; // four check bytes to go\nvar CHECK3=9; // three check bytes to go\nvar CHECK2=10; // two check bytes to go\nvar CHECK1=11; // one check byte to go\nvar DONE=12; // finished check, done\nvar BAD=13; // got an error--stay here\n\nvar inflate_mask = [0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff];\n\nvar IB_TYPE=0; // get type bits (3, including end bit)\nvar IB_LENS=1; // get lengths for stored\nvar IB_STORED=2;// processing stored block\nvar IB_TABLE=3; // get table lengths\nvar IB_BTREE=4; // get bit lengths tree for a dynamic block\nvar IB_DTREE=5; // get length, distance trees for a dynamic block\nvar IB_CODES=6; // processing fixed or dynamic block\nvar IB_DRY=7; // output remaining window bytes\nvar IB_DONE=8; // finished last block, done\nvar IB_BAD=9; // ot a data error--stuck here\n\nvar fixed_bl = 9;\nvar fixed_bd = 5;\n\nvar fixed_tl = [\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,192,\n 80,7,10, 0,8,96, 0,8,32, 0,9,160,\n 0,8,0, 0,8,128, 0,8,64, 0,9,224,\n 80,7,6, 0,8,88, 0,8,24, 0,9,144,\n 83,7,59, 0,8,120, 0,8,56, 0,9,208,\n 81,7,17, 0,8,104, 0,8,40, 0,9,176,\n 0,8,8, 0,8,136, 0,8,72, 0,9,240,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,200,\n 81,7,13, 0,8,100, 0,8,36, 0,9,168,\n 0,8,4, 0,8,132, 0,8,68, 0,9,232,\n 80,7,8, 0,8,92, 0,8,28, 0,9,152,\n 84,7,83, 0,8,124, 0,8,60, 0,9,216,\n 82,7,23, 0,8,108, 0,8,44, 0,9,184,\n 0,8,12, 0,8,140, 0,8,76, 0,9,248,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,196,\n 81,7,11, 0,8,98, 0,8,34, 0,9,164,\n 0,8,2, 0,8,130, 0,8,66, 0,9,228,\n 80,7,7, 0,8,90, 0,8,26, 0,9,148,\n 84,7,67, 0,8,122, 0,8,58, 0,9,212,\n 82,7,19, 0,8,106, 0,8,42, 0,9,180,\n 0,8,10, 0,8,138, 0,8,74, 0,9,244,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,204,\n 81,7,15, 0,8,102, 0,8,38, 0,9,172,\n 0,8,6, 0,8,134, 0,8,70, 0,9,236,\n 80,7,9, 0,8,94, 0,8,30, 0,9,156,\n 84,7,99, 0,8,126, 0,8,62, 0,9,220,\n 82,7,27, 0,8,110, 0,8,46, 0,9,188,\n 0,8,14, 0,8,142, 0,8,78, 0,9,252,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,194,\n 80,7,10, 0,8,97, 0,8,33, 0,9,162,\n 0,8,1, 0,8,129, 0,8,65, 0,9,226,\n 80,7,6, 0,8,89, 0,8,25, 0,9,146,\n 83,7,59, 0,8,121, 0,8,57, 0,9,210,\n 81,7,17, 0,8,105, 0,8,41, 0,9,178,\n 0,8,9, 0,8,137, 0,8,73, 0,9,242,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,202,\n 81,7,13, 0,8,101, 0,8,37, 0,9,170,\n 0,8,5, 0,8,133, 0,8,69, 0,9,234,\n 80,7,8, 0,8,93, 0,8,29, 0,9,154,\n 84,7,83, 0,8,125, 0,8,61, 0,9,218,\n 82,7,23, 0,8,109, 0,8,45, 0,9,186,\n 0,8,13, 0,8,141, 0,8,77, 0,9,250,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,198,\n 81,7,11, 0,8,99, 0,8,35, 0,9,166,\n 0,8,3, 0,8,131, 0,8,67, 0,9,230,\n 80,7,7, 0,8,91, 0,8,27, 0,9,150,\n 84,7,67, 0,8,123, 0,8,59, 0,9,214,\n 82,7,19, 0,8,107, 0,8,43, 0,9,182,\n 0,8,11, 0,8,139, 0,8,75, 0,9,246,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,206,\n 81,7,15, 0,8,103, 0,8,39, 0,9,174,\n 0,8,7, 0,8,135, 0,8,71, 0,9,238,\n 80,7,9, 0,8,95, 0,8,31, 0,9,158,\n 84,7,99, 0,8,127, 0,8,63, 0,9,222,\n 82,7,27, 0,8,111, 0,8,47, 0,9,190,\n 0,8,15, 0,8,143, 0,8,79, 0,9,254,\n 96,7,256, 0,8,80, 0,8,16, 84,8,115,\n 82,7,31, 0,8,112, 0,8,48, 0,9,193,\n\n 80,7,10, 0,8,96, 0,8,32, 0,9,161,\n 0,8,0, 0,8,128, 0,8,64, 0,9,225,\n 80,7,6, 0,8,88, 0,8,24, 0,9,145,\n 83,7,59, 0,8,120, 0,8,56, 0,9,209,\n 81,7,17, 0,8,104, 0,8,40, 0,9,177,\n 0,8,8, 0,8,136, 0,8,72, 0,9,241,\n 80,7,4, 0,8,84, 0,8,20, 85,8,227,\n 83,7,43, 0,8,116, 0,8,52, 0,9,201,\n 81,7,13, 0,8,100, 0,8,36, 0,9,169,\n 0,8,4, 0,8,132, 0,8,68, 0,9,233,\n 80,7,8, 0,8,92, 0,8,28, 0,9,153,\n 84,7,83, 0,8,124, 0,8,60, 0,9,217,\n 82,7,23, 0,8,108, 0,8,44, 0,9,185,\n 0,8,12, 0,8,140, 0,8,76, 0,9,249,\n 80,7,3, 0,8,82, 0,8,18, 85,8,163,\n 83,7,35, 0,8,114, 0,8,50, 0,9,197,\n 81,7,11, 0,8,98, 0,8,34, 0,9,165,\n 0,8,2, 0,8,130, 0,8,66, 0,9,229,\n 80,7,7, 0,8,90, 0,8,26, 0,9,149,\n 84,7,67, 0,8,122, 0,8,58, 0,9,213,\n 82,7,19, 0,8,106, 0,8,42, 0,9,181,\n 0,8,10, 0,8,138, 0,8,74, 0,9,245,\n 80,7,5, 0,8,86, 0,8,22, 192,8,0,\n 83,7,51, 0,8,118, 0,8,54, 0,9,205,\n 81,7,15, 0,8,102, 0,8,38, 0,9,173,\n 0,8,6, 0,8,134, 0,8,70, 0,9,237,\n 80,7,9, 0,8,94, 0,8,30, 0,9,157,\n 84,7,99, 0,8,126, 0,8,62, 0,9,221,\n 82,7,27, 0,8,110, 0,8,46, 0,9,189,\n 0,8,14, 0,8,142, 0,8,78, 0,9,253,\n 96,7,256, 0,8,81, 0,8,17, 85,8,131,\n 82,7,31, 0,8,113, 0,8,49, 0,9,195,\n 80,7,10, 0,8,97, 0,8,33, 0,9,163,\n 0,8,1, 0,8,129, 0,8,65, 0,9,227,\n 80,7,6, 0,8,89, 0,8,25, 0,9,147,\n 83,7,59, 0,8,121, 0,8,57, 0,9,211,\n 81,7,17, 0,8,105, 0,8,41, 0,9,179,\n 0,8,9, 0,8,137, 0,8,73, 0,9,243,\n 80,7,4, 0,8,85, 0,8,21, 80,8,258,\n 83,7,43, 0,8,117, 0,8,53, 0,9,203,\n 81,7,13, 0,8,101, 0,8,37, 0,9,171,\n 0,8,5, 0,8,133, 0,8,69, 0,9,235,\n 80,7,8, 0,8,93, 0,8,29, 0,9,155,\n 84,7,83, 0,8,125, 0,8,61, 0,9,219,\n 82,7,23, 0,8,109, 0,8,45, 0,9,187,\n 0,8,13, 0,8,141, 0,8,77, 0,9,251,\n 80,7,3, 0,8,83, 0,8,19, 85,8,195,\n 83,7,35, 0,8,115, 0,8,51, 0,9,199,\n 81,7,11, 0,8,99, 0,8,35, 0,9,167,\n 0,8,3, 0,8,131, 0,8,67, 0,9,231,\n 80,7,7, 0,8,91, 0,8,27, 0,9,151,\n 84,7,67, 0,8,123, 0,8,59, 0,9,215,\n 82,7,19, 0,8,107, 0,8,43, 0,9,183,\n 0,8,11, 0,8,139, 0,8,75, 0,9,247,\n 80,7,5, 0,8,87, 0,8,23, 192,8,0,\n 83,7,51, 0,8,119, 0,8,55, 0,9,207,\n 81,7,15, 0,8,103, 0,8,39, 0,9,175,\n 0,8,7, 0,8,135, 0,8,71, 0,9,239,\n 80,7,9, 0,8,95, 0,8,31, 0,9,159,\n 84,7,99, 0,8,127, 0,8,63, 0,9,223,\n 82,7,27, 0,8,111, 0,8,47, 0,9,191,\n 0,8,15, 0,8,143, 0,8,79, 0,9,255\n];\nvar fixed_td = [\n 80,5,1, 87,5,257, 83,5,17, 91,5,4097,\n 81,5,5, 89,5,1025, 85,5,65, 93,5,16385,\n 80,5,3, 88,5,513, 84,5,33, 92,5,8193,\n 82,5,9, 90,5,2049, 86,5,129, 192,5,24577,\n 80,5,2, 87,5,385, 83,5,25, 91,5,6145,\n 81,5,7, 89,5,1537, 85,5,97, 93,5,24577,\n 80,5,4, 88,5,769, 84,5,49, 92,5,12289,\n 82,5,13, 90,5,3073, 86,5,193, 192,5,24577\n];\n\n // Tables for deflate from PKZIP's appnote.txt.\n var cplens = [ // Copy lengths for literal codes 257..285\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n ];\n\n // see note #13 above about 258\n var cplext = [ // Extra bits for literal codes 257..285\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid\n ];\n\n var cpdist = [ // Copy offsets for distance codes 0..29\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577\n ];\n\n var cpdext = [ // Extra bits for distance codes\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n 12, 12, 13, 13];\n\n//\n// ZStream.java\n//\n\nfunction ZStream() {\n}\n\n\nZStream.prototype.inflateInit = function(w, nowrap) {\n if (!w) {\n\tw = DEF_WBITS;\n }\n if (nowrap) {\n\tnowrap = false;\n }\n this.istate = new Inflate();\n return this.istate.inflateInit(this, nowrap?-w:w);\n}\n\nZStream.prototype.inflate = function(f) {\n if(this.istate==null) return Z_STREAM_ERROR;\n return this.istate.inflate(this, f);\n}\n\nZStream.prototype.inflateEnd = function(){\n if(this.istate==null) return Z_STREAM_ERROR;\n var ret=istate.inflateEnd(this);\n this.istate = null;\n return ret;\n}\nZStream.prototype.inflateSync = function(){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSync(this);\n}\nZStream.prototype.inflateSetDictionary = function(dictionary, dictLength){\n // if(istate == null) return Z_STREAM_ERROR;\n return istate.inflateSetDictionary(this, dictionary, dictLength);\n}\n\n/*\n\n public int deflateInit(int level){\n return deflateInit(level, MAX_WBITS);\n }\n public int deflateInit(int level, boolean nowrap){\n return deflateInit(level, MAX_WBITS, nowrap);\n }\n public int deflateInit(int level, int bits){\n return deflateInit(level, bits, false);\n }\n public int deflateInit(int level, int bits, boolean nowrap){\n dstate=new Deflate();\n return dstate.deflateInit(this, level, nowrap?-bits:bits);\n }\n public int deflate(int flush){\n if(dstate==null){\n return Z_STREAM_ERROR;\n }\n return dstate.deflate(this, flush);\n }\n public int deflateEnd(){\n if(dstate==null) return Z_STREAM_ERROR;\n int ret=dstate.deflateEnd();\n dstate=null;\n return ret;\n }\n public int deflateParams(int level, int strategy){\n if(dstate==null) return Z_STREAM_ERROR;\n return dstate.deflateParams(this, level, strategy);\n }\n public int deflateSetDictionary (byte[] dictionary, int dictLength){\n if(dstate == null)\n return Z_STREAM_ERROR;\n return dstate.deflateSetDictionary(this, dictionary, dictLength);\n }\n\n*/\n\n/*\n // Flush as much pending output as possible. All deflate() output goes\n // through this function so some applications may wish to modify it\n // to avoid allocating a large strm->next_out buffer and copying into it.\n // (See also read_buf()).\n void flush_pending(){\n int len=dstate.pending;\n\n if(len>avail_out) len=avail_out;\n if(len==0) return;\n\n if(dstate.pending_buf.length<=dstate.pending_out ||\n next_out.length<=next_out_index ||\n dstate.pending_buf.length<(dstate.pending_out+len) ||\n next_out.length<(next_out_index+len)){\n System.out.println(dstate.pending_buf.length+\", \"+dstate.pending_out+\n\t\t\t \", \"+next_out.length+\", \"+next_out_index+\", \"+len);\n System.out.println(\"avail_out=\"+avail_out);\n }\n\n System.arraycopy(dstate.pending_buf, dstate.pending_out,\n\t\t next_out, next_out_index, len);\n\n next_out_index+=len;\n dstate.pending_out+=len;\n total_out+=len;\n avail_out-=len;\n dstate.pending-=len;\n if(dstate.pending==0){\n dstate.pending_out=0;\n }\n }\n\n // Read a new buffer from the current input stream, update the adler32\n // and total number of bytes read. All deflate() input goes through\n // this function so some applications may wish to modify it to avoid\n // allocating a large strm->next_in buffer and copying from it.\n // (See also flush_pending()).\n int read_buf(byte[] buf, int start, int size) {\n int len=avail_in;\n\n if(len>size) len=size;\n if(len==0) return 0;\n\n avail_in-=len;\n\n if(dstate.noheader==0) {\n adler=_adler.adler32(adler, next_in, next_in_index, len);\n }\n System.arraycopy(next_in, next_in_index, buf, start, len);\n next_in_index += len;\n total_in += len;\n return len;\n }\n\n public void free(){\n next_in=null;\n next_out=null;\n msg=null;\n _adler=null;\n }\n}\n*/\n\n\n//\n// Inflate.java\n//\n\nfunction Inflate() {\n this.was = [0];\n}\n\nInflate.prototype.inflateReset = function(z) {\n if(z == null || z.istate == null) return Z_STREAM_ERROR;\n\n z.total_in = z.total_out = 0;\n z.msg = null;\n z.istate.mode = z.istate.nowrap!=0 ? BLOCKS : METHOD;\n z.istate.blocks.reset(z, null);\n return Z_OK;\n}\n\nInflate.prototype.inflateEnd = function(z){\n if(this.blocks != null)\n this.blocks.free(z);\n this.blocks=null;\n return Z_OK;\n}\n\nInflate.prototype.inflateInit = function(z, w){\n z.msg = null;\n this.blocks = null;\n\n // handle undocumented nowrap option (no zlib header or check)\n nowrap = 0;\n if(w < 0){\n w = - w;\n nowrap = 1;\n }\n\n // set window size\n if(w<8 ||w>15){\n this.inflateEnd(z);\n return Z_STREAM_ERROR;\n }\n this.wbits=w;\n\n z.istate.blocks=new InfBlocks(z,\n\t\t\t\t z.istate.nowrap!=0 ? null : this,\n\t\t\t\t 1<>4)+8>z.istate.wbits){\n z.istate.mode = BAD;\n z.msg=\"invalid window size\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n z.istate.mode=FLAG;\n case FLAG:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n b = (z.next_in[z.next_in_index++])&0xff;\n\n if((((z.istate.method << 8)+b) % 31)!=0){\n z.istate.mode = BAD;\n z.msg = \"incorrect header check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n if((b&PRESET_DICT)==0){\n z.istate.mode = BLOCKS;\n break;\n }\n z.istate.mode = DICT4;\n case DICT4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=DICT3;\n case DICT3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode=DICT2;\n case DICT2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode=DICT1;\n case DICT1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need += (z.next_in[z.next_in_index++]&0xff);\n z.adler = z.istate.need;\n z.istate.mode = DICT0;\n return Z_NEED_DICT;\n case DICT0:\n z.istate.mode = BAD;\n z.msg = \"need dictionary\";\n z.istate.marker = 0; // can try inflateSync\n return Z_STREAM_ERROR;\n case BLOCKS:\n\n r = z.istate.blocks.proc(z, r);\n if(r == Z_DATA_ERROR){\n z.istate.mode = BAD;\n z.istate.marker = 0; // can try inflateSync\n break;\n }\n if(r == Z_OK){\n r = f;\n }\n if(r != Z_STREAM_END){\n return r;\n }\n r = f;\n z.istate.blocks.reset(z, z.istate.was);\n if(z.istate.nowrap!=0){\n z.istate.mode=DONE;\n break;\n }\n z.istate.mode=CHECK4;\n case CHECK4:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need=((z.next_in[z.next_in_index++]&0xff)<<24)&0xff000000;\n z.istate.mode=CHECK3;\n case CHECK3:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<16)&0xff0000;\n z.istate.mode = CHECK2;\n case CHECK2:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=((z.next_in[z.next_in_index++]&0xff)<<8)&0xff00;\n z.istate.mode = CHECK1;\n case CHECK1:\n\n if(z.avail_in==0)return r;r=f;\n\n z.avail_in--; z.total_in++;\n z.istate.need+=(z.next_in[z.next_in_index++]&0xff);\n\n if(((z.istate.was[0])) != ((z.istate.need))){\n z.istate.mode = BAD;\n z.msg = \"incorrect data check\";\n z.istate.marker = 5; // can't try inflateSync\n break;\n }\n\n z.istate.mode = DONE;\n case DONE:\n return Z_STREAM_END;\n case BAD:\n return Z_DATA_ERROR;\n default:\n return Z_STREAM_ERROR;\n }\n }\n }\n\n\nInflate.prototype.inflateSetDictionary = function(z, dictionary, dictLength) {\n var index=0;\n var length = dictLength;\n if(z==null || z.istate == null|| z.istate.mode != DICT0)\n return Z_STREAM_ERROR;\n\n if(z._adler.adler32(1, dictionary, 0, dictLength)!=z.adler){\n return Z_DATA_ERROR;\n }\n\n z.adler = z._adler.adler32(0, null, 0, 0);\n\n if(length >= (1<>> 1){\n case 0: // stored\n {b>>>=(3);k-=(3);}\n t = k & 7; // go to byte boundary\n\n {b>>>=(t);k-=(t);}\n this.mode = IB_LENS; // get length of stored block\n break;\n case 1: // fixed\n {\n var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n var tl=[];\n\t var td=[];\n\n\t inflate_trees_fixed(bl, bd, tl, td, z);\n this.codes.init(bl[0], bd[0], tl[0], 0, td[0], 0, z);\n }\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_CODES;\n break;\n case 2: // dynamic\n\n {b>>>=(3);k-=(3);}\n\n this.mode = IB_TABLE;\n break;\n case 3: // illegal\n\n {b>>>=(3);k-=(3);}\n this.mode = BAD;\n z.msg = \"invalid block type\";\n r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tbreak;\n case IB_LENS:\n\twhile(k<(32)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>> 16) & 0xffff) != (b & 0xffff)){\n\t this.mode = BAD;\n\t z.msg = \"invalid stored block lengths\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\tthis.left = (b & 0xffff);\n\tb = k = 0; // dump bits\n\tthis.mode = this.left!=0 ? IB_STORED : (this.last!=0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_STORED:\n\tif (n == 0){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tif(m==0){\n\t if(q==end&&read!=0){\n\t q=0; m=(qn) t = n;\n\tif(t>m) t = m;\n\tarrayCopy(z.next_in, p, this.window, q, t);\n\tp += t; n -= t;\n\tq += t; m -= t;\n\tif ((this.left -= t) != 0)\n\t break;\n\tthis.mode = (this.last != 0 ? IB_DRY : IB_TYPE);\n\tbreak;\n case IB_TABLE:\n\n\twhile(k<(14)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)< 29 || ((t >> 5) & 0x1f) > 29)\n\t {\n\t this.mode = IB_BAD;\n\t z.msg = \"too many length or distance symbols\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\tt = 258 + (t & 0x1f) + ((t >> 5) & 0x1f);\n\tif(this.blens==null || this.blens.length>>=(14);k-=(14);}\n\n\tthis.index = 0;\n\tmode = IB_BTREE;\n case IB_BTREE:\n\twhile (this.index < 4 + (this.table >>> 10)){\n\t while(k<(3)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(3);k-=(3);}\n\t}\n\n\twhile(this.index < 19){\n\t this.blens[INFBLOCKS_BORDER[this.index++]] = 0;\n\t}\n\n\tthis.bb[0] = 7;\n\tt = this.inftree.inflate_trees_bits(this.blens, this.bb, this.tb, this.hufts, z);\n\tif (t != Z_OK){\n\t r = t;\n\t if (r == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t }\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t write=q;\n\t return this.inflate_flush(z,r);\n\t}\n\n\tthis.index = 0;\n\tthis.mode = IB_DTREE;\n case IB_DTREE:\n\twhile (true){\n\t t = this.table;\n\t if(!(this.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))){\n\t break;\n\t }\n\n\t var h; //int[]\n\t var i, j, c;\n\n\t t = this.bb[0];\n\n\t while(k<(t)){\n\t if(n!=0){\n\t r=Z_OK;\n\t }\n\t else{\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;\n\t z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\t this.blens[this.index++] = c;\n\t }\n\t else { // c == 16..18\n\t i = c == 18 ? 7 : c - 14;\n\t j = c == 18 ? 11 : 3;\n\n\t while(k<(t+i)){\n\t if(n!=0){\n\t\tr=Z_OK;\n\t }\n\t else{\n\t\tthis.bitb=b; this.bitk=k;\n\t\tz.avail_in=n;\n\t\tz.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t\tthis.write=q;\n\t\treturn this.inflate_flush(z,r);\n\t };\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>>=(t);k-=(t);\n\n\t j += (b & inflate_mask[i]);\n\n\t b>>>=(i);k-=(i);\n\n\t i = this.index;\n\t t = this.table;\n\t if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) ||\n\t\t(c == 16 && i < 1)){\n\t this.blens=null;\n\t this.mode = IB_BAD;\n\t z.msg = \"invalid bit length repeat\";\n\t r = Z_DATA_ERROR;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\n\t c = c == 16 ? this.blens[i-1] : 0;\n\t do{\n\t this.blens[i++] = c;\n\t }\n\t while (--j!=0);\n\t this.index = i;\n\t }\n\t}\n\n\tthis.tb[0]=-1;\n\t{\n\t var bl=new Int32Array(1);\n\t var bd=new Int32Array(1);\n\t var tl=new Int32Array(1);\n\t var td=new Int32Array(1);\n\t bl[0] = 9; // must be <= 9 for lookahead assumptions\n\t bd[0] = 6; // must be <= 9 for lookahead assumptions\n\n\t t = this.table;\n\t t = this.inftree.inflate_trees_dynamic(257 + (t & 0x1f),\n\t\t\t\t\t 1 + ((t >> 5) & 0x1f),\n\t\t\t\t\t this.blens, bl, bd, tl, td, this.hufts, z);\n\n\t if (t != Z_OK){\n\t if (t == Z_DATA_ERROR){\n\t this.blens=null;\n\t this.mode = BAD;\n\t }\n\t r = t;\n\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z,r);\n\t }\n\t this.codes.init(bl[0], bd[0], this.hufts, tl[0], this.hufts, td[0], z);\n\t}\n\tthis.mode = IB_CODES;\n case IB_CODES:\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n; z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\n\tif ((r = this.codes.proc(this, z, r)) != Z_STREAM_END){\n\t return this.inflate_flush(z, r);\n\t}\n\tr = Z_OK;\n\tthis.codes.free(z);\n\n\tp=z.next_in_index; n=z.avail_in;b=this.bitb;k=this.bitk;\n\tq=this.write;m = (q < this.read ? this.read-q-1 : this.end-q);\n\n\tif (this.last==0){\n\t this.mode = IB_TYPE;\n\t break;\n\t}\n\tthis.mode = IB_DRY;\n case IB_DRY:\n\tthis.write=q;\n\tr = this.inflate_flush(z, r);\n\tq=this.write; m = (q < this.read ? this.read-q-1 : this.end-q);\n\tif (this.read != this.write){\n\t this.bitb=b; this.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t this.write=q;\n\t return this.inflate_flush(z, r);\n\t}\n\tmode = DONE;\n case IB_DONE:\n\tr = Z_STREAM_END;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n case IB_BAD:\n\tr = Z_DATA_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n\n default:\n\tr = Z_STREAM_ERROR;\n\n\tthis.bitb=b; this.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\tthis.write=q;\n\treturn this.inflate_flush(z, r);\n }\n }\n }\n\nInfBlocks.prototype.free = function(z){\n this.reset(z, null);\n this.window=null;\n this.hufts=null;\n}\n\nInfBlocks.prototype.set_dictionary = function(d, start, n){\n arrayCopy(d, start, window, 0, n);\n this.read = this.write = n;\n}\n\n // Returns true if inflate is currently at the end of a block generated\n // by Z_SYNC_FLUSH or Z_FULL_FLUSH.\nInfBlocks.prototype.sync_point = function(){\n return this.mode == IB_LENS;\n}\n\n // copy as much as possible from the sliding window to the output area\nInfBlocks.prototype.inflate_flush = function(z, r){\n var n;\n var p;\n var q;\n\n // local copies of source and destination pointers\n p = z.next_out_index;\n q = this.read;\n\n // compute number of bytes to copy as far as end of window\n n = ((q <= this.write ? this.write : this.end) - q);\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n z.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy as far as end of window\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n\n // see if more to copy at beginning of window\n if (q == this.end){\n // wrap pointers\n q = 0;\n if (this.write == this.end)\n this.write = 0;\n\n // compute bytes to copy\n n = this.write - q;\n if (n > z.avail_out) n = z.avail_out;\n if (n!=0 && r == Z_BUF_ERROR) r = Z_OK;\n\n // update counters\n z.avail_out -= n;\n z.total_out += n;\n\n // update check information\n if(this.checkfn != null)\n\tz.adler=this.check=z._adler.adler32(this.check, this.window, q, n);\n\n // copy\n arrayCopy(this.window, q, z.next_out, p, n);\n p += n;\n q += n;\n }\n\n // update pointers\n z.next_out_index = p;\n this.read = q;\n\n // done\n return r;\n }\n\n//\n// InfCodes.java\n//\n\nvar IC_START=0; // x: set up for LEN\nvar IC_LEN=1; // i: get length/literal/eob next\nvar IC_LENEXT=2; // i: getting length extra (have base)\nvar IC_DIST=3; // i: get distance next\nvar IC_DISTEXT=4;// i: getting distance extra\nvar IC_COPY=5; // o: copying bytes in window, waiting for space\nvar IC_LIT=6; // o: got literal, waiting for output space\nvar IC_WASH=7; // o: got eob, possibly still output waiting\nvar IC_END=8; // x: got eob and all data flushed\nvar IC_BADCODE=9;// x: got error\n\nfunction InfCodes() {\n}\n\nInfCodes.prototype.init = function(bl, bd, tl, tl_index, td, td_index, z) {\n this.mode=IC_START;\n this.lbits=bl;\n this.dbits=bd;\n this.ltree=tl;\n this.ltree_index=tl_index;\n this.dtree = td;\n this.dtree_index=td_index;\n this.tree=null;\n}\n\nInfCodes.prototype.proc = function(s, z, r){\n var j; // temporary storage\n var t; // temporary pointer (int[])\n var tindex; // temporary pointer\n var e; // extra bits or operation\n var b=0; // bit buffer\n var k=0; // bits in bit buffer\n var p=0; // input data pointer\n var n; // bytes available there\n var q; // output window write pointer\n var m; // bytes to end of window or read pointer\n var f; // pointer to copy strings from\n\n // copy input/output information to locals (UPDATE macro restores)\n p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n q=s.write;m=q= 258 && n >= 10){\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t r = this.inflate_fast(this.lbits, this.dbits,\n\t\t\t this.ltree, this.ltree_index,\n\t\t\t this.dtree, this.dtree_index,\n\t\t\t s, z);\n\n\t p=z.next_in_index;n=z.avail_in;b=s.bitb;k=s.bitk;\n\t q=s.write;m=q>>=(this.tree[tindex+1]);\n\tk-=(this.tree[tindex+1]);\n\n\te=this.tree[tindex];\n\n\tif(e == 0){ // literal\n\t this.lit = this.tree[tindex+2];\n\t this.mode = IC_LIT;\n\t break;\n\t}\n\tif((e & 16)!=0 ){ // length\n\t this.get = e & 15;\n\t this.len = this.tree[tindex+2];\n\t this.mode = IC_LENEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tif ((e & 32)!=0){ // end of block\n\t this.mode = IC_WASH;\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid literal/length code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_LENEXT: // i: getting length extra (have base)\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.need = this.dbits;\n\tthis.tree = this.dtree;\n\tthis.tree_index = this.dtree_index;\n\tthis.mode = IC_DIST;\n case IC_DIST: // i: get distance next\n\tj = this.need;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=this.tree[tindex+1];\n\tk-=this.tree[tindex+1];\n\n\te = (this.tree[tindex]);\n\tif((e & 16)!=0){ // distance\n\t this.get = e & 15;\n\t this.dist = this.tree[tindex+2];\n\t this.mode = IC_DISTEXT;\n\t break;\n\t}\n\tif ((e & 64) == 0){ // next table\n\t this.need = e;\n\t this.tree_index = tindex/3 + this.tree[tindex+2];\n\t break;\n\t}\n\tthis.mode = IC_BADCODE; // invalid code\n\tz.msg = \"invalid distance code\";\n\tr = Z_DATA_ERROR;\n\n\ts.bitb=b;s.bitk=k;\n\tz.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\ts.write=q;\n\treturn s.inflate_flush(z,r);\n\n case IC_DISTEXT: // i: getting distance extra\n\tj = this.get;\n\n\twhile(k<(j)){\n\t if(n!=0)r=Z_OK;\n\t else{\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\t return s.inflate_flush(z,r);\n\t }\n\t n--; b|=(z.next_in[p++]&0xff)<>=j;\n\tk-=j;\n\n\tthis.mode = IC_COPY;\n case IC_COPY: // o: copying bytes in window, waiting for space\n f = q - this.dist;\n while(f < 0){ // modulo window size-\"while\" instead\n f += s.end; // of \"if\" handles invalid distances\n\t}\n\twhile (this.len!=0){\n\n\t if(m==0){\n\t if(q==s.end&&s.read!=0){q=0;m=q 7){ // return unused byte, if any\n\t k -= 8;\n\t n++;\n\t p--; // can always return one\n\t}\n\n\ts.write=q; r=s.inflate_flush(z,r);\n\tq=s.write;m=q= 258 && n >= 10\n // get literal/length code\n while(k<(20)){ // max bits for literal/length code\n\tn--;\n\tb|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\ts.window[q++] = tp[tp_index_t_3+2];\n\tm--;\n\tcontinue;\n }\n do {\n\n\tb>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\tif((e&16)!=0){\n\t e &= 15;\n\t c = tp[tp_index_t_3+2] + (b & inflate_mask[e]);\n\n\t b>>=e; k-=e;\n\n\t // decode distance base of block to copy\n\t while(k<(15)){ // max bits for distance code\n\t n--;\n\t b|=(z.next_in[p++]&0xff)<>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t if((e&16)!=0){\n\t // get extra bits to add to distance base\n\t e &= 15;\n\t while(k<(e)){ // get extra bits (up to 13)\n\t\tn--;\n\t\tb|=(z.next_in[p++]&0xff)<>=(e); k-=(e);\n\n\t // do the copy\n\t m -= c;\n\t if (q >= d){ // offset before dest\n\t\t// just copy\n\t\tr=q-d;\n\t\tif(q-r>0 && 2>(q-r)){\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t\telse{\n\t\t s.window[q++]=s.window[r++]; // minimum count is three,\n\t\t s.window[q++]=s.window[r++]; // so unroll loop a little\n\t\t c-=2;\n\t\t}\n\t }\n\t else{ // else offset after destination\n r=q-d;\n do{\n r+=s.end; // force pointer in window\n }while(r<0); // covers invalid distances\n\t\te=s.end-r;\n\t\tif(c>e){ // if source crosses,\n\t\t c-=e; // wrapped copy\n\t\t if(q-r>0 && e>(q-r)){\n\t\t do{s.window[q++] = s.window[r++];}\n\t\t while(--e!=0);\n\t\t }\n\t\t else{\n\t\t arrayCopy(s.window, r, s.window, q, e);\n\t\t q+=e; r+=e; e=0;\n\t\t }\n\t\t r = 0; // copy rest from start of window\n\t\t}\n\n\t }\n\n\t // copy all or what's left\n do{s.window[q++] = s.window[r++];}\n\t\twhile(--c!=0);\n\t break;\n\t }\n\t else if((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t e=tp[tp_index_t_3];\n\t }\n\t else{\n\t z.msg = \"invalid distance code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t }\n\t }\n\t while(true);\n\t break;\n\t}\n\n\tif((e&64)==0){\n\t t+=tp[tp_index_t_3+2];\n\t t+=(b&inflate_mask[e]);\n\t tp_index_t_3=(tp_index+t)*3;\n\t if((e=tp[tp_index_t_3])==0){\n\n\t b>>=(tp[tp_index_t_3+1]); k-=(tp[tp_index_t_3+1]);\n\n\t s.window[q++]=tp[tp_index_t_3+2];\n\t m--;\n\t break;\n\t }\n\t}\n\telse if((e&32)!=0){\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_STREAM_END;\n\t}\n\telse{\n\t z.msg=\"invalid literal/length code\";\n\n\t c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n\t s.bitb=b;s.bitk=k;\n\t z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n\t s.write=q;\n\n\t return Z_DATA_ERROR;\n\t}\n }\n while(true);\n }\n while(m>=258 && n>= 10);\n\n // not enough input or output--restore pointers and return\n c=z.avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;\n\n s.bitb=b;s.bitk=k;\n z.avail_in=n;z.total_in+=p-z.next_in_index;z.next_in_index=p;\n s.write=q;\n\n return Z_OK;\n}\n\n//\n// InfTree.java\n//\n\nfunction InfTree() {\n}\n\nInfTree.prototype.huft_build = function(b, bindex, n, s, d, e, t, m, hp, hn, v) {\n\n // Given a list of code lengths and a maximum table size, make a set of\n // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR\n // if the given code set is incomplete (the tables are still built in this\n // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of\n // lengths), or Z_MEM_ERROR if not enough memory.\n\n var a; // counter for codes of length k\n var f; // i repeats in table every f entries\n var g; // maximum code length\n var h; // table level\n var i; // counter, current code\n var j; // counter\n var k; // number of bits in current code\n var l; // bits per table (returned in m)\n var mask; // (1 << w) - 1, to avoid cc -O bug on HP\n var p; // pointer into c[], b[], or v[]\n var q; // points to current table\n var w; // bits before this table == (l * h)\n var xp; // pointer into x\n var y; // number of dummy codes added\n var z; // number of entries in current table\n\n // Generate counts for each bit length\n\n p = 0; i = n;\n do {\n this.c[b[bindex+p]]++; p++; i--; // assume all entries <= BMAX\n }while(i!=0);\n\n if(this.c[0] == n){ // null input--all zero length codes\n t[0] = -1;\n m[0] = 0;\n return Z_OK;\n }\n\n // Find minimum and maximum length, bound *m by those\n l = m[0];\n for (j = 1; j <= BMAX; j++)\n if(this.c[j]!=0) break;\n k = j; // minimum code length\n if(l < j){\n l = j;\n }\n for (i = BMAX; i!=0; i--){\n if(this.c[i]!=0) break;\n }\n g = i; // maximum code length\n if(l > i){\n l = i;\n }\n m[0] = l;\n\n // Adjust last length count to fill out codes, if needed\n for (y = 1 << j; j < i; j++, y <<= 1){\n if ((y -= this.c[j]) < 0){\n return Z_DATA_ERROR;\n }\n }\n if ((y -= this.c[i]) < 0){\n return Z_DATA_ERROR;\n }\n this.c[i] += y;\n\n // Generate starting offsets into the value table for each length\n this.x[1] = j = 0;\n p = 1; xp = 2;\n while (--i!=0) { // note that i == g from above\n this.x[xp] = (j += this.c[p]);\n xp++;\n p++;\n }\n\n // Make a table of values in order of bit lengths\n i = 0; p = 0;\n do {\n if ((j = b[bindex+p]) != 0){\n this.v[this.x[j]++] = i;\n }\n p++;\n }\n while (++i < n);\n n = this.x[g]; // set n to length of v\n\n // Generate the Huffman codes and for each, make the table entries\n this.x[0] = i = 0; // first Huffman code is zero\n p = 0; // grab values in bit order\n h = -1; // no tables yet--level -1\n w = -l; // bits decoded == (l * h)\n this.u[0] = 0; // just to keep compilers happy\n q = 0; // ditto\n z = 0; // ditto\n\n // go through the bit lengths (k already is bits in shortest code)\n for (; k <= g; k++){\n a = this.c[k];\n while (a--!=0){\n\t// here i is the Huffman code of length k bits for value *p\n\t// make tables up to required level\n while (k > w + l){\n h++;\n w += l; // previous table always l bits\n\t // compute minimum size table less than or equal to l bits\n z = g - w;\n z = (z > l) ? l : z; // table size upper limit\n if((f=1<<(j=k-w))>a+1){ // try a k-w bit table\n // too few codes for k-w bit table\n f -= a + 1; // deduct codes from patterns left\n xp = k;\n if(j < z){\n while (++j < z){ // try smaller tables up to z bits\n if((f <<= 1) <= this.c[++xp])\n break; // enough codes to use up j bits\n f -= this.c[xp]; // else deduct codes from patterns\n }\n\t }\n }\n z = 1 << j; // table entries for j-bit table\n\n\t // allocate new table\n if (this.hn[0] + z > MANY){ // (note: doesn't matter for fixed)\n return Z_DATA_ERROR; // overflow of MANY\n }\n this.u[h] = q = /*hp+*/ this.hn[0]; // DEBUG\n this.hn[0] += z;\n\n\t // connect to last table, if there is one\n\t if(h!=0){\n this.x[h]=i; // save pattern for backing up\n this.r[0]=j; // bits in this table\n this.r[1]=l; // bits to dump before this table\n j=i>>>(w - l);\n this.r[2] = (q - this.u[h-1] - j); // offset to this table\n arrayCopy(this.r, 0, hp, (this.u[h-1]+j)*3, 3); // connect to last table\n }\n else{\n t[0] = q; // first table is returned result\n\t }\n }\n\n\t// set up table entry in r\n this.r[1] = (k - w);\n if (p >= n){\n this.r[0] = 128 + 64; // out of values--invalid code\n\t}\n else if (v[p] < s){\n this.r[0] = (this.v[p] < 256 ? 0 : 32 + 64); // 256 is end-of-block\n this.r[2] = this.v[p++]; // simple code is just the value\n }\n else{\n this.r[0]=(e[this.v[p]-s]+16+64); // non-simple--look up in lists\n this.r[2]=d[this.v[p++] - s];\n }\n\n // fill code-like entries with r\n f=1<<(k-w);\n for (j=i>>>w;j>>= 1){\n i ^= j;\n\t}\n i ^= j;\n\n\t// backup over finished tables\n mask = (1 << w) - 1; // needed on HP, cc -O bug\n while ((i & mask) != this.x[h]){\n h--; // don't need to update q\n w -= l;\n mask = (1 << w) - 1;\n }\n }\n }\n // Return Z_BUF_ERROR if we were given an incomplete table\n return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK;\n}\n\nInfTree.prototype.inflate_trees_bits = function(c, bb, tb, hp, z) {\n var result;\n this.initWorkArea(19);\n this.hn[0]=0;\n result = this.huft_build(c, 0, 19, 19, null, null, tb, bb, hp, this.hn, this.v);\n\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed dynamic bit lengths tree\";\n }\n else if(result == Z_BUF_ERROR || bb[0] == 0){\n z.msg = \"incomplete dynamic bit lengths tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n}\n\nInfTree.prototype.inflate_trees_dynamic = function(nl, nd, c, bl, bd, tl, td, hp, z) {\n var result;\n\n // build literal/length tree\n this.initWorkArea(288);\n this.hn[0]=0;\n result = this.huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, this.hn, this.v);\n if (result != Z_OK || bl[0] == 0){\n if(result == Z_DATA_ERROR){\n z.msg = \"oversubscribed literal/length tree\";\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"incomplete literal/length tree\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n // build distance tree\n this.initWorkArea(288);\n result = this.huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, this.hn, this.v);\n\n if (result != Z_OK || (bd[0] == 0 && nl > 257)){\n if (result == Z_DATA_ERROR){\n z.msg = \"oversubscribed distance tree\";\n }\n else if (result == Z_BUF_ERROR) {\n z.msg = \"incomplete distance tree\";\n result = Z_DATA_ERROR;\n }\n else if (result != Z_MEM_ERROR){\n z.msg = \"empty distance tree with lengths\";\n result = Z_DATA_ERROR;\n }\n return result;\n }\n\n return Z_OK;\n}\n/*\n static int inflate_trees_fixed(int[] bl, //literal desired/actual bit depth\n int[] bd, //distance desired/actual bit depth\n int[][] tl,//literal/length tree result\n int[][] td,//distance tree result\n ZStream z //for memory allocation\n\t\t\t\t ){\n\n*/\n\nfunction inflate_trees_fixed(bl, bd, tl, td, z) {\n bl[0]=fixed_bl;\n bd[0]=fixed_bd;\n tl[0]=fixed_tl;\n td[0]=fixed_td;\n return Z_OK;\n}\n\nInfTree.prototype.initWorkArea = function(vsize){\n if(this.hn==null){\n this.hn=new Int32Array(1);\n this.v=new Int32Array(vsize);\n this.c=new Int32Array(BMAX+1);\n this.r=new Int32Array(3);\n this.u=new Int32Array(BMAX);\n this.x=new Int32Array(BMAX+1);\n }\n if(this.v.length 100) {\n arrayCopy_fast(new Uint8Array(src.buffer, src.byteOffset + srcOffset, count), dest, destOffset);\n } else {\n arrayCopy_slow(src, srcOffset, dest, destOffset, count);\n }\n\n}\n\nfunction arrayCopy_slow(src, srcOffset, dest, destOffset, count) {\n\n // dlog('_slow call: srcOffset=' + srcOffset + '; destOffset=' + destOffset + '; count=' + count);\n\n for (var i = 0; i < count; ++i) {\n dest[destOffset + i] = src[srcOffset + i];\n }\n}\n\nfunction arrayCopy_fast(src, dest, destOffset) {\n dest.set(src, destOffset);\n}\n\n\n // largest prime smaller than 65536\nvar ADLER_BASE=65521;\n // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1\nvar ADLER_NMAX=5552;\n\nfunction adler32(adler, /* byte[] */ buf, index, len){\n if(buf == null){ return 1; }\n\n var s1=adler&0xffff;\n var s2=(adler>>16)&0xffff;\n var k;\n\n while(len > 0) {\n k=len=16){\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n s1+=buf[index++]&0xff; s2+=s1;\n k-=16;\n }\n if(k!=0){\n do{\n s1+=buf[index++]&0xff; s2+=s1;\n }\n while(--k!=0);\n }\n s1%=ADLER_BASE;\n s2%=ADLER_BASE;\n }\n return (s2<<16)|s1;\n}\n\n\n\nfunction jszlib_inflate_buffer(buffer, start, length, afterUncOffset) {\n if (!start) {\n buffer = new Uint8Array(buffer);\n } else if (!length) {\n buffer = new Uint8Array(buffer, start, buffer.byteLength - start);\n } else {\n buffer = new Uint8Array(buffer, start, length);\n }\n\n var z = new ZStream();\n z.inflateInit(DEF_WBITS, true);\n z.next_in = buffer;\n z.next_in_index = 0;\n z.avail_in = buffer.length;\n\n var oBlockList = [];\n var totalSize = 0;\n while (true) {\n var obuf = new Uint8Array(32000);\n z.next_out = obuf;\n z.next_out_index = 0;\n z.avail_out = obuf.length;\n var status = z.inflate(Z_NO_FLUSH);\n if (status != Z_OK && status != Z_STREAM_END && status != Z_BUF_ERROR) {\n throw z.msg;\n }\n if (z.avail_out != 0) {\n var newob = new Uint8Array(obuf.length - z.avail_out);\n arrayCopy(obuf, 0, newob, 0, (obuf.length - z.avail_out));\n obuf = newob;\n }\n oBlockList.push(obuf);\n totalSize += obuf.length;\n if (status == Z_STREAM_END || status == Z_BUF_ERROR) {\n break;\n }\n }\n\n if (afterUncOffset) {\n afterUncOffset[0] = (start || 0) + z.next_in_index;\n }\n\n if (oBlockList.length == 1) {\n return oBlockList[0].buffer;\n } else {\n var out = new Uint8Array(totalSize);\n var cursor = 0;\n for (var i = 0; i < oBlockList.length; ++i) {\n var b = oBlockList[i];\n arrayCopy(b, 0, out, cursor, b.length);\n cursor += b.length;\n }\n return out.buffer;\n }\n}\n\nreturn {\n inflateBuffer: jszlib_inflate_buffer,\n arrayCopy: arrayCopy\n };\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/jszlib.js\n// module id = 134\n// module chunks = 3","// jQuery Ajax Native Plugin\n\n// (c) 2015 Tarik Zakaria Benmerar, Acigna Inc.\n// jQuery Ajax Native Plugin may be freely distributed under the MIT license.\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof exports === 'object') {\n // Node. Does not work with strict CommonJS, but\n // only CommonJS-like environments that support module.exports,\n // like Node.\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals (root is window)\n factory(root.jQuery);\n }\n}(this, function ( $ ) {\n var ajaxSettings = $.ajaxSettings;\n ajaxSettings.responseFields.native = 'responseNative';\n ajaxSettings.converters[ '* native' ] = true;\n var support = {},\n xhrId = 0,\n xhrSuccessStatus = {\n // file protocol always yields status code 0, assume 200\n 0: 200,\n // Support: IE9\n // #1450: sometimes IE returns 1223 when it should be 204\n 1223: 204\n },\n xhrCallbacks = {},\n xhrSupported = jQuery.ajaxSettings.xhr();\n // Support: IE9\n // Open requests must be manually aborted on unload (#5280)\n if ( window.ActiveXObject ) {\n $( window ).on( \"unload\", function() {\n for ( var key in xhrCallbacks ) {\n xhrCallbacks[ key ]();\n }\n });\n }\n support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\n support.ajax = xhrSupported = !!xhrSupported;\n\n //Native Data Type Ajax Transport\n $.ajaxTransport('native', function ( options ) {\n var callback;\n // Cross domain only allowed if supported through XMLHttpRequest\n if ( support.cors || xhrSupported && !options.crossDomain ) {\n return {\n send: function( headers, complete ) {\n var i,\n xhr = options.xhr(),\n id = ++xhrId,\n responses = {};\n\n xhr.open( options.type, options.url, options.async, options.username, options.password );\n\n // Apply custom fields if provided\n if ( options.xhrFields ) {\n for ( i in options.xhrFields ) {\n xhr[ i ] = options.xhrFields[ i ];\n }\n }\n\n // Override mime type if needed\n if ( options.mimeType && xhr.overrideMimeType ) {\n xhr.overrideMimeType( options.mimeType );\n }\n\n // X-Requested-With header\n // For cross-domain requests, seeing as conditions for a preflight are\n // akin to a jigsaw puzzle, we simply never set it to be sure.\n // (it can always be set on a per-request basis or even using ajaxSetup)\n // For same-domain requests, won't change header if already provided.\n if ( !options.crossDomain && !headers[\"X-Requested-With\"] ) {\n headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n }\n\n // Set headers\n for ( i in headers ) {\n xhr.setRequestHeader( i, headers[ i ] );\n }\n\n // Callback\n callback = function( type ) {\n return function() {\n if ( callback ) {\n delete xhrCallbacks[ id ];\n callback = xhr.onload = xhr.onerror = null;\n\n if ( type === \"abort\" ) {\n xhr.abort();\n } else if ( type === \"error\" ) {\n complete(\n // file: protocol always yields status 0; see #8605, #14207\n xhr.status,\n xhr.statusText\n );\n } else {\n // The native response associated with the responseType\n // Stored in the xhr.response attribute (XHR2 Spec)\n if ( xhr.response ) {\n responses.native = xhr.response;\n }\n\n complete(\n xhrSuccessStatus[ xhr.status ] || xhr.status,\n xhr.statusText,\n responses,\n xhr.getAllResponseHeaders()\n );\n }\n }\n };\n };\n\n // Listen to events\n xhr.onload = callback();\n xhr.onerror = callback(\"error\");\n\n // Create the abort callback\n callback = xhrCallbacks[ id ] = callback(\"abort\");\n\n try {\n // Do send the request (this may raise an exception)\n xhr.send( options.hasContent && options.data || null );\n } catch ( e ) {\n // #14683: Only rethrow if this hasn't been notified as an error yet\n if ( callback ) {\n throw e;\n }\n }\n },\n\n abort: function() {\n if ( callback ) {\n callback();\n }\n }\n };\n }\n });\n\n\n //$.getNative wrapper\n $.getNative = function ( url, callback ) {\n return $.ajax({\n dataType: 'native',\n url: url,\n xhrFields: {\n responseType: 'arraybuffer'\n },\n success: callback\n });\n }\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./galaxy/scripts/libs/bbi/jquery-ajax-native.js\n// module id = 135\n// module chunks = 3","import baseMVC from \"mvc/base-mvc\";\nimport _l from \"utils/localization\";\n\nvar logNamespace = \"user\";\n//==============================================================================\n/** @class View to display a user's disk/storage usage\n * either as a progress bar representing the percentage of a quota used\n * or a simple text element displaying the human readable size used.\n * @name UserQuotaMeter\n * @augments Backbone.View\n */\nvar UserQuotaMeter = Backbone.View.extend(baseMVC.LoggableMixin).extend(\n /** @lends UserQuotaMeter.prototype */ {\n _logNamespace: logNamespace,\n\n /** Defaults for optional settings passed to initialize */\n options: {\n warnAtPercent: 85,\n errorAtPercent: 100\n },\n\n /** Set up, accept options, and bind events */\n initialize: function(options) {\n this.log(`${this}.initialize:`, options);\n _.extend(this.options, options);\n\n //this.bind( 'all', function( event, data ){ this.log( this + ' event:', event, data ); }, this );\n this.listenTo(this.model, \"change:quota_percent change:total_disk_usage\", this.render);\n },\n\n /** Re-load user model data from the api */\n update: function(options) {\n this.log(`${this} updating user data...`, options);\n this.model.loadFromApi(this.model.get(\"id\"), options);\n return this;\n },\n\n /** Is the user over their quota (if there is one)?\n * @returns {Boolean} true if over quota, false if no quota or under quota\n */\n isOverQuota: function() {\n return (\n this.model.get(\"quota_percent\") !== null &&\n this.model.get(\"quota_percent\") >= this.options.errorAtPercent\n );\n },\n\n /** Render the meter when they have an applicable quota. Will render as a progress bar\n * with their percentage of that quota in text over the bar.\n * @fires quota:over when user is over quota (>= this.errorAtPercent)\n * @fires quota:under when user is under quota\n * @fires quota:under:approaching when user is >= this.warnAtPercent of their quota\n * @fires quota:under:ok when user is below this.warnAtPercent\n * @returns {jQuery} the rendered meter\n */\n _render_quota: function() {\n var modelJson = this.model.toJSON();\n\n var //prevPercent = this.model.previous( 'quota_percent' ),\n percent = modelJson.quota_percent;\n\n var //meter = $( UserQuotaMeter.templates.quota( modelJson ) );\n $meter = $(this._templateQuotaMeter(modelJson));\n\n var $bar = $meter.find(\".progress-bar\");\n //this.log( this + '.rendering quota, percent:', percent, 'meter:', meter );\n\n // OVER QUOTA: color the quota bar and show the quota error message\n if (this.isOverQuota()) {\n //this.log( '\\t over quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-danger\");\n $meter.find(\".quota-meter-text\").css(\"color\", \"white\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:over\", modelJson);\n\n // APPROACHING QUOTA: color the quota bar\n } else if (percent >= this.options.warnAtPercent) {\n //this.log( '\\t approaching quota' );\n $bar.attr(\"class\", \"progress-bar progress-bar-warning\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:approaching\", modelJson);\n\n // otherwise, hide/don't use the msg box\n } else {\n $bar.attr(\"class\", \"progress-bar progress-bar-success\");\n //TODO: only trigger event if state has changed\n this.trigger(\"quota:under quota:under:ok\", modelJson);\n }\n return $meter;\n },\n\n /** Render the meter when the user has NO applicable quota. Will render as text\n * showing the human readable sum storage their data is using.\n * @returns {jQuery} the rendered text\n */\n _render_usage: function() {\n //var usage = $( UserQuotaMeter.templates.usage( this.model.toJSON() ) );\n var usage = $(this._templateUsage(this.model.toJSON()));\n this.log(`${this}.rendering usage:`, usage);\n return usage;\n },\n\n /** Render either the quota percentage meter or the human readable disk usage\n * depending on whether the user model has quota info (quota_percent === null -> no quota)\n * @returns {Object} this UserQuotaMeter\n */\n render: function() {\n //this.log( this + '.rendering' );\n var meterHtml = null;\n\n // no quota on server ('quota_percent' === null (can be valid at 0)), show usage instead\n this.log(`${this}.model.quota_percent:`, this.model.get(\"quota_percent\"));\n if (this.model.get(\"quota_percent\") === null || this.model.get(\"quota_percent\") === undefined) {\n meterHtml = this._render_usage();\n\n // otherwise, render percent of quota (and warning, error)\n } else {\n meterHtml = this._render_quota();\n //TODO: add the original text for unregistered quotas\n //tooltip = \"Your disk quota is %s. You can increase your quota by registering a Galaxy account.\"\n }\n\n this.$el.html(meterHtml);\n this.$el.find(\".quota-meter-text\").tooltip();\n return this;\n },\n\n _templateQuotaMeter: function(data) {\n return [\n '
',\n '
',\n '
`\n : \">\",\n _l(\"Using\"),\n \" \",\n data.quota_percent,\n \"%\",\n \"
\",\n \"
\"\n ].join(\"\");\n },\n\n _templateUsage: function(data) {\n return [\n '
',\n '
',\n data.nice_total_disk_usage ? _l(\"Using \") + data.nice_total_disk_usage : \"\",\n \"
\",\n \"
\"\n ].join(\"\");\n },\n\n toString: function() {\n return `UserQuotaMeter(${this.model})`;\n }\n }\n);\n\n//==============================================================================\nexport default {\n UserQuotaMeter: UserQuotaMeter\n};\n\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/mvc/user/user-quotameter.js"],"sourceRoot":""} \ No newline at end of file diff --git a/templates/admin/library/grid.mako b/templates/admin/library/grid.mako deleted file mode 100644 index 6a41b688c5ef..000000000000 --- a/templates/admin/library/grid.mako +++ /dev/null @@ -1 +0,0 @@ -<%inherit file="/grid_base.mako"/> diff --git a/templates/admin/library/new_library.mako b/templates/admin/library/new_library.mako deleted file mode 100644 index 683fdad64844..000000000000 --- a/templates/admin/library/new_library.mako +++ /dev/null @@ -1,44 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -%if message: - ${render_msg( message, status )} -%endif - -
-
Create a new data library
-
-
-
- -
- -
-
-
-
- -
- -
-
- Displayed when browsing all libraries -
-
-
-
- -
- -
-
- Displayed when browsing this library -
-
-
-
- -
-
-
-
diff --git a/templates/webapps/galaxy/admin/center.mako b/templates/webapps/galaxy/admin/center.mako index 9c6534f5983c..39b650ae8360 100644 --- a/templates/webapps/galaxy/admin/center.mako +++ b/templates/webapps/galaxy/admin/center.mako @@ -16,9 +16,6 @@ Please visit
the Galax
  • Data tables - See all data tables available in this Galaxy.
  • -
  • - Data libraries - Data libraries enable authorized Galaxy users to share datasets with other groups or users. Only administrators can create data libraries. See wiki for details. -
  • Display applications - See all display applications configured in this Galaxy.
  • diff --git a/templates/webapps/galaxy/library/common/browse_library.mako b/templates/webapps/galaxy/library/common/browse_library.mako deleted file mode 100644 index a9668388f5e0..000000000000 --- a/templates/webapps/galaxy/library/common/browse_library.mako +++ /dev/null @@ -1,615 +0,0 @@ -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/library/common/library_item_info.mako" import="render_library_item_info" /> -<%namespace file="/library/common/common.mako" import="render_actions_on_multiple_items" /> -<%namespace file="/library/common/common.mako" import="render_compression_types_help" /> -<%namespace file="/library/common/common.mako" import="common_javascripts" /> - -<%! - def inherit(context): - if context.get('use_panels'): - return '/webapps/galaxy/base_panels.mako' - else: - return '/base.mako' -%> -<%inherit file="${inherit(context)}"/> - -<%def name="init()"> -<% - self.has_left_panel=False - self.has_right_panel=False - self.message_box_visible=False - self.active_view="user" - self.overlay_visible=False - self.has_accessible_datasets = False -%> - - -## -## Override methods from base.mako and base_panels.mako -## -<%def name="center_panel()"> -
    -
    - ${render_content()} -
    -
    - - -## Render the grid's basic elements. Each of these elements can be subclassed. -<%def name="body()"> - ${render_content()} - - -<%def name="title()">Browse data library -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jstorage")} - ${common_javascripts()} - ${self.grid_javascripts()} - - -<%def name="grid_javascripts()"> - - - -<%def name="render_dataset( cntrller, ldda, library_dataset, selected, library, folder, pad, parent, row_counter, tracked_datasets, show_deleted=False, simple=False )"> - <% - ## The received ldda must always be a LibraryDatasetDatasetAssociation object. The object id passed to methods - ## from the drop down menu should be the ldda id to prevent id collision ( which could happen when displaying - ## children, which are always lddas ). We also need to make sure we're displaying the latest version of this - ## library_dataset, so we display the attributes from the ldda. - - from galaxy.webapps.galaxy.controllers.library_common import branch_deleted - - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - - if ldda == library_dataset.library_dataset_dataset_association: - current_version = True - if is_admin: - can_modify = can_manage = True - elif cntrller in [ 'library', 'requests' ]: - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, library_dataset ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, library_dataset ) - else: - can_modify = can_manage = False - else: - current_version = False - if current_version and ldda.state not in ( 'ok', 'error', 'empty', 'deleted', 'discarded' ): - tracked_datasets[ldda.id] = ldda.state - info_association, inherited = ldda.get_info_association( restrict=True ) - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE - %> - %if current_version and ( not ldda.library_dataset.deleted or show_deleted ): -
    - - %if simple: - - %else: - - %if not library.deleted: -
    - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify: - Edit information - Move this dataset - %else: - View information - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify and not info_association: - Use template - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify and info_association: - Edit template - Unuse template - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_manage: - %if not trans.app.security_agent.dataset_is_public( ldda.dataset ): - Make public - %endif - Edit permissions - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify: - Upload a new version of this dataset - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and ldda.has_data: - Import this dataset into selected histories - Download this dataset - %endif - %if can_modify: - %if not library.deleted and not branch_deleted( folder ) and not ldda.library_dataset.deleted: - Delete this dataset - %elif not library.deleted and not branch_deleted( folder ) and not ldda.library_dataset.purged and ldda.library_dataset.deleted: - Undelete this dataset - %endif - %endif -
    - %endif - %endif -
    ${render_library_item_info( ldda )}${ldda.extension | h}${util.unicodify(ldda.create_time.strftime( trans.app.config.pretty_datetime_format )) | h}${ldda.get_size( nice_size=True ) | h}
    - - - - % if not simple: - - - % endif - - - - - <% row_counter = RowCounter() %> - %if cntrller in [ 'library', 'requests' ]: - ${self.render_folder( 'library', library.root_folder, 0, created_ldda_ids, library, hidden_folder_ids, tracked_datasets, show_deleted=show_deleted, parent=None, row_counter=row_counter, root_folder=True, simple=simple )} - %if not library.deleted and self.has_accessible_datasets and not simple: - ${render_actions_on_multiple_items()} - %endif - %elif ( trans.user_is_admin() and cntrller in [ 'library_admin', 'requests_admin' ] ): - ${self.render_folder( 'library_admin', library.root_folder, 0, created_ldda_ids, library, [], tracked_datasets, show_deleted=show_deleted, parent=None, row_counter=row_counter, root_folder=True )} - %if not library.deleted and not show_deleted and self.has_accessible_datasets: - ${render_actions_on_multiple_items()} - %endif - %endif -
    - %if self.has_accessible_datasets: - - %endif - Name - MessageData typeDate uploadedFile size
    - %endif - %if self.has_accessible_datasets: - - %endif - - %if tracked_datasets: - - - %endif - - %if self.has_accessible_datasets and not simple: - ${render_compression_types_help( comptypes )} - %endif - %if not has_accessible_folders: - The data library '${library.name | h}' does not contain any datasets that you can access. - %endif - diff --git a/templates/webapps/galaxy/library/common/browse_library_opt.mako b/templates/webapps/galaxy/library/common/browse_library_opt.mako deleted file mode 100644 index 553a674a14b9..000000000000 --- a/templates/webapps/galaxy/library/common/browse_library_opt.mako +++ /dev/null @@ -1,621 +0,0 @@ -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/library/common/library_item_info.mako" import="render_library_item_info" /> -<%namespace file="/library/common/common.mako" import="render_actions_on_multiple_items" /> -<%namespace file="/library/common/common.mako" import="render_compression_types_help" /> -<%namespace file="/library/common/common.mako" import="common_javascripts" /> - -<%! - def inherit(context): - if context.get('use_panels'): - return '/webapps/galaxy/base_panels.mako' - else: - return '/base.mako' -%> -<%inherit file="${inherit(context)}"/> - -<%def name="init()"> -<% - self.has_left_panel=False - self.has_right_panel=False - self.message_box_visible=False - self.active_view="user" - self.overlay_visible=False - self.has_accessible_datasets = False -%> - - -## -## Override methods from base.mako and base_panels.mako -## -<%def name="center_panel()"> -
    -
    - ${render_content()} -
    -
    - - -## Render the grid's basic elements. Each of these elements can be subclassed. -<%def name="body()"> - ${render_content()} - - -<%def name="title()">Browse data library -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jstorage")} - ${common_javascripts()} - ${self.grid_javascripts()} - - -<%def name="grid_javascripts()"> - - - -<%def name="render_dataset( cntrller, ldda, library_dataset, can_modify, can_manage, selected, library, folder, pad, parent, row_counter, tracked_datasets, show_deleted=False, simple=False )"> - <% - ## The received ldda must always be a LibraryDatasetDatasetAssociation object. The object id passed to methods - ## from the drop down menu should be the ldda id to prevent id collision ( which could happen when displaying - ## children, which are always lddas ). We also need to make sure we're displaying the latest version of this - ## library_dataset, so we display the attributes from the ldda. - - from galaxy.webapps.galaxy.controllers.library_common import branch_deleted - - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - current_version = ( ldda == library_dataset.library_dataset_dataset_association ) - if current_version and ldda.state not in ( 'ok', 'error', 'empty', 'deleted', 'discarded' ): - tracked_datasets[ldda.id] = ldda.state - # SM: This causes a query to be emitted, but it quickly goes down a - # rabbit hole of many possible inheritable cases. It may not be - # possible to easily eliminate the extra query from this call. - info_association, inherited = ldda.get_info_association( restrict=True ) - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE - %> - %if current_version and ( not ldda.library_dataset.deleted or show_deleted ): - - - - %if simple: - - %else: - - %if not library.deleted: -
    - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify: - Edit information - Move this dataset - %else: - View information - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify and not info_association: - Use template - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify and info_association: - Edit template - Unuse template - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_manage: - %if not trans.app.security_agent.dataset_is_public( ldda.dataset ): - Make public - %endif - Edit permissions - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and can_modify: - Upload a new version of this dataset - %endif - %if not branch_deleted( folder ) and not ldda.library_dataset.deleted and ldda.has_data: - Import this dataset into selected histories - Download this dataset - %endif - %if can_modify: - %if not library.deleted and not branch_deleted( folder ) and not ldda.library_dataset.deleted: - Delete this dataset - %elif not library.deleted and not branch_deleted( folder ) and not ldda.library_dataset.purged and ldda.library_dataset.deleted: - Undelete this dataset - %endif - %endif -
    - %endif - %endif - - % if not simple: - ${render_library_item_info( ldda )} - ${ldda.extension | h} - % endif - ${ldda.create_time.strftime( "%Y-%m-%d" ) | h} - ${ldda.get_size( nice_size=True ) | h} - - <% - my_row = row_counter.count - row_counter.increment() - %> - %endif - - -<%def name="format_delta( tdelta )"> - <% - from datetime import datetime - return "%d.%.6d" % ( tdelta.seconds, tdelta.microseconds ) - %> - - -<%def name="render_folder( cntrller, folder, folder_pad, created_ldda_ids, library, hidden_folder_ids, tracked_datasets, show_deleted=False, parent=None, row_counter=None, root_folder=False, simple=False )"> - <% - from galaxy.webapps.galaxy.controllers.library_common import active_folders, active_folders_and_library_datasets, activatable_folders_and_library_datasets, map_library_datasets_to_lddas, branch_deleted, datasets_for_lddas - - # SM: DELETEME - from datetime import datetime, timedelta - import logging - log = logging.getLogger( __name__ ) - - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - has_accessible_library_datasets = trans.app.security_agent.has_accessible_library_datasets( trans, folder, trans.user, current_user_roles, search_downward=False ) - - if root_folder: - pad = folder_pad - expander = h.url_for("/static/images/silk/resultset_bottom.png") - folder_img = h.url_for("/static/images/silk/folder_page.png") - else: - pad = folder_pad + 20 - expander = h.url_for("/static/images/silk/resultset_next.png") - folder_img = h.url_for("/static/images/silk/folder.png") - # SM: If this is a comma-delimited list of LDDAs, then split them up - # into a list. For anything else, turn created_ldda_ids into a single - # item list. - if created_ldda_ids: - created_ldda_ids = util.listify( created_ldda_ids ) - if str( folder.id ) in hidden_folder_ids: - return "" - my_row = None - if is_admin: - can_add = can_modify = can_manage = True - elif cntrller in [ 'library' ]: - can_access, folder_ids = trans.app.security_agent.check_folder_contents( trans.user, current_user_roles, folder ) - if not can_access: - can_show, folder_ids = \ - trans.app.security_agent.show_library_item( trans.user, - current_user_roles, - folder, - [ trans.app.security_agent.permitted_actions.LIBRARY_ADD, - trans.app.security_agent.permitted_actions.LIBRARY_MODIFY, - trans.app.security_agent.permitted_actions.LIBRARY_MANAGE ] ) - if not can_show: - return "" - can_add = trans.app.security_agent.can_add_library_item( current_user_roles, folder ) - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, folder ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, folder ) - else: - can_add = can_modify = can_manage = False - - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE - info_association, inherited = folder.get_info_association( restrict=True ) - %> - %if not root_folder and ( not folder.deleted or show_deleted ): - <% encoded_id = trans.security.encode_id( folder.id ) %> - - - - - - - %if not library.deleted: -
    - %if not branch_deleted( folder ) and can_add: - Add datasets - Add sub-folder - %endif - %if not branch_deleted( folder ): - %if has_accessible_library_datasets: - Select datasets for import into selected histories - %endif - %if can_modify: - Edit information - Move this folder - %else: - View information - %endif - %endif - %if not branch_deleted( folder ) and can_modify and not info_association: - Use template - %endif - %if not branch_deleted( folder ) and can_modify and info_association: - Edit template - Unuse template - %endif - %if not branch_deleted( folder ) and can_manage: - %if not trans.app.security_agent.folder_is_public( folder ): - Make public - %endif - Edit permissions - %endif - %if can_modify: - %if not library.deleted and not folder.deleted: - Delete this folder - %elif not library.deleted and folder.deleted and not folder.purged: - Undelete this folder - %endif - %endif -
    - %endif - - %if folder.description: - ${folder.description | h} - %endif - - - <% - my_row = row_counter.count - row_counter.increment() - %> - %endif - <% - # TODO: If show_deleted is set to True, then nothing is displayed. Why? This wasn't the case - # in the past. - if show_deleted: - sub_folders, library_datasets = activatable_folders_and_library_datasets( trans, folder ) - else: - sub_folders, library_datasets = active_folders_and_library_datasets( trans, folder ) - # Render all the subfolders: - # TODO: Check permissions first. - for sub_folder in sub_folders: - render_folder( cntrller, sub_folder, pad, created_ldda_ids, library, [], tracked_datasets, show_deleted=show_deleted, parent=my_row, row_counter=row_counter, root_folder=False ) - - # Map LibraryDatasets to LDDAs, then map LDDAs to Datasets. - # Then determine which Datasets are accessible and which are not. - # For every LibraryDataset, if there's an LDDA for it and it's - # accessible then display it. - if ( len( library_datasets ) > 0 ): - lib_dataset_ldda_map = map_library_datasets_to_lddas( trans, library_datasets ) - dataset_list = datasets_for_lddas( trans, lib_dataset_ldda_map.values() ) - #can_access_datasets = trans.app.security_agent.dataset_access_mapping( trans, current_user_roles, dataset_list ) - can_access_datasets = trans.app.security_agent.dataset_permission_map_for_access( trans, current_user_roles, dataset_list ) - can_modify_datasets = trans.app.security_agent.item_permission_map_for_modify( trans, current_user_roles, dataset_list ) - can_manage_datasets = trans.app.security_agent.item_permission_map_for_manage( trans, current_user_roles, dataset_list ) - for library_dataset in library_datasets: - ldda = lib_dataset_ldda_map[ library_dataset.id ] - if ldda: - # SMTODO: Fix awkard modify/manage permission checks. - can_access = is_admin or can_access_datasets[ ldda.dataset_id ] - can_modify = is_admin or ( cntrller in ['library', 'requests'] and can_modify_datasets[ ldda.dataset_id ]) - can_manage = is_admin or ( cntrller in ['library', 'requests'] and can_manage_datasets[ ldda.dataset_id ]) - selected = created_ldda_ids and str( ldda.id ) in created_ldda_ids - if can_access: - render_dataset( cntrller, ldda, library_dataset, can_modify, can_manage, selected, library, folder, pad, my_row, row_counter, tracked_datasets, show_deleted=show_deleted ) - %> - - -<%def name="render_content(simple=False)"> - <% - from galaxy import util - from galaxy.webapps.galaxy.controllers.library_common import branch_deleted - from time import strftime - import logging - log = logging.getLogger( __name__ ) - - is_admin = trans.user_is_admin() and cntrller == 'library_admin' - - if is_admin: - can_add = can_modify = can_manage = True - elif cntrller in [ 'library', 'requests' ]: - can_add = trans.app.security_agent.can_add_library_item( current_user_roles, library ) - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, library ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, library ) - else: - can_add = can_modify = can_manage = False - - info_association, inherited = library.get_info_association() - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE - - # SM: These are mostly display-specific; ignore them for now. - # The has_accessible_folders determines if anything can be shown - use it. - self.has_accessible_datasets = trans.app.security_agent.has_accessible_library_datasets( trans, library.root_folder, trans.user, current_user_roles ) - root_folder_has_accessible_library_datasets = trans.app.security_agent.has_accessible_library_datasets( trans, library.root_folder, trans.user, current_user_roles, search_downward=False ) - has_accessible_folders = is_admin or trans.app.security_agent.has_accessible_folders( trans, library.root_folder, trans.user, current_user_roles ) - - tracked_datasets = {} - - class RowCounter( object ): - def __init__( self ): - self.count = 0 - def increment( self ): - self.count += 1 - def __str__( self ): - return str( self.count ) - %> - -

    Data Library “${library.name}”

    - - - - %if message: - ${render_msg( message, status )} - %endif - - %if library.synopsis not in [ '', 'None', None ]: -
    - ${library.synopsis | h} -
    - %endif - - %if self.has_accessible_datasets: -
    - %endif - %if has_accessible_folders: - - - - - % if not simple: - - - % endif - - - - - <% row_counter = RowCounter() %> - ## SM: Here is where we render the libraries based on admin/non-admin privileges: - %if cntrller in [ 'library', 'requests' ]: - ${self.render_folder( 'library', library.root_folder, 0, created_ldda_ids, library, hidden_folder_ids, tracked_datasets, show_deleted=show_deleted, parent=None, row_counter=row_counter, root_folder=True, simple=simple )} - ## SM: TODO: WTF? - %if not library.deleted and self.has_accessible_datasets and not simple: - ${render_actions_on_multiple_items()} - %endif - %elif ( trans.user_is_admin() and cntrller in [ 'library_admin', 'requests_admin' ] ): - ${self.render_folder( 'library_admin', library.root_folder, 0, created_ldda_ids, library, [], tracked_datasets, show_deleted=show_deleted, parent=None, row_counter=row_counter, root_folder=True )} - ## SM: TODO: WTF? - %if not library.deleted and not show_deleted and self.has_accessible_datasets: - ${render_actions_on_multiple_items()} - %endif - %endif -
    - %if self.has_accessible_datasets: - - %endif - Name - MessageData typeDate uploadedFile size
    - %endif - %if self.has_accessible_datasets: -
    - %endif - - %if tracked_datasets: - - - %endif - - %if self.has_accessible_datasets and not simple: - ${render_compression_types_help( comptypes )} - %endif - %if not has_accessible_folders: - The data library '${library.name | h}' does not contain any datasets that you can access. - %endif - diff --git a/templates/webapps/galaxy/library/common/common.mako b/templates/webapps/galaxy/library/common/common.mako deleted file mode 100644 index 28b9664de1a1..000000000000 --- a/templates/webapps/galaxy/library/common/common.mako +++ /dev/null @@ -1,491 +0,0 @@ -<%namespace file="/common/template_common.mako" import="render_template_field" /> - -<%def name="common_javascripts()"> - - - -<%def name="render_compression_types_help( comptypes )"> -
    -

    - TIP: You can download individual library datasets by selecting "Download this dataset" from the context menu (triangle) next to each dataset's name. -

    -
    - %if len( comptypes ) > 1: -
    -

    - TIP: Several compression options are available for downloading multiple library datasets simultaneously: -

    -
      - %if 'gz' in comptypes: -
    • gzip: Recommended for fast network connections - %if trans.app.config.upstream_gzip: - NOTE: The file you receive will be an uncompressed .tar file - this is because the Galaxy server compresses it and your browser decompresses it on the fly. - %endif -
    • - %endif - %if 'bz2' in comptypes: -
    • bzip2: Recommended for slower network connections (smaller size but takes longer to compress)
    • - %endif - %if 'zip' in comptypes: -
    • zip: Not recommended but is provided as an option for those who cannot open the above formats
    • - %endif -
    -
    - %endif - - -<%def name="render_upload_form( cntrller, upload_option, action, library_id, folder_id, replace_dataset, file_formats, dbkeys, space_to_tab, link_data_only, widgets, roles_select_list, history, show_deleted )"> - <% - import os, os.path - from galaxy.web.form_builder import AddressField, CheckboxField, SelectField, TextArea, TextField, WorkflowField, WorkflowMappingField, HistoryField - %> - %if upload_option in [ 'upload_file', 'upload_directory', 'upload_paths' ]: -
    - <% - if upload_option == 'upload_directory': - tool_form_title = 'Upload a directory of files' - elif upload_option == 'upload_paths': - tool_form_title = 'Upload files from filesystem paths' - else: - tool_form_title = 'Upload files' - %> -
    ${tool_form_title | h}
    -
    -
    - - - - - - - %if replace_dataset not in [ None, 'None' ]: - -
    - You are currently selecting a new file to replace '${util.unicodify( replace_dataset.name ) | h}'. -
    -
    - %endif -
    - -
    - ${upload_option_select_list.get_html()} -
    -
    - Choose upload option (file, directory, filesystem paths, current history). -
    -
    -
    -
    - -
    - -
    -
    -
    - %if upload_option == 'upload_file': -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    - -
    -
    - Specify a list of URLs (one per line) or paste the contents of a file. -
    -
    -
    - %elif upload_option == 'upload_directory': - <% - if ( trans.user_is_admin() and cntrller == 'library_admin' ): - import_dir = trans.app.config.library_import_dir - else: - # Directories of files from the Data Libraries view are restricted to a - # sub-directory named the same as the current user's email address - # contained within the configured setting for user_library_import_dir - import_dir = os.path.join( trans.app.config.user_library_import_dir, trans.user.email ) - %> -
    - <% - # See if we have any contained sub-directories, if not the only option - # in the server_dir select list will be library_import_dir - contains_directories = False - for entry in os.listdir( import_dir ): - if os.path.isdir( os.path.join( import_dir, entry ) ): - contains_directories = True - break - %> - -
    - -
    -
    - %if contains_directories: - Upload all files in a sub-directory of ${import_dir | h} on the Galaxy server. - %else: - Upload all files in ${import_dir | h} on the Galaxy server. - %endif -
    -
    -
    - %elif upload_option == 'upload_paths': -
    - -
    - -
    -
    - Upload all files pasted in the box. The (recursive) contents of any pasted directories will be added as well. -
    -
    -
    - -
    - Yes -
    -
    - If checked (default), library sub-folders will be used to preserve any subdirectories on the filesystem. - If unchecked, any files in subdirectories on the filesystem will be placed directly in the library folder. -
    -
    - %endif - %if upload_option in ( 'upload_directory', 'upload_paths' ): -
    - -
    - -
    -
    - Normally data uploaded with this tool is copied into Galaxy's configured "file_path" location where Galaxy - has a form of control over the data files. However, this may not be desired (especially for large NGS - datasets), so using the option labeled "Link to files without copying into Galaxy" will force Galaxy to - always read the data from its original path. - %if upload_option == 'upload_directory': - Any symlinks encountered in the uploaded directory will be dereferenced once. That is, Galaxy will - point directly to the file that is linked, but no other symlinks further down the line will be dereferenced. - %endif -
    -
    - %endif -
    - -
    - <% - if space_to_tab == 'true': - checked = ' checked' - else: - checked = '' - if upload_option == 'upload_file': - name = 'files_0|space_to_tab' - else: - name = 'space_to_tab' - space2tab = 'Yes' % ( name, checked ) - %> - ${space2tab} -
    -
    - Use this option if you are entering intervals by hand. -
    -
    -
    - -
    - -
    - <% - if to_posix_lines == 'true': - checked = ' checked' - else: - checked = '' - if upload_option == 'upload_file': - name = 'files_0|to_posix_lines' - else: - name = 'to_posix_lines' - uni2posix = 'Yes' % ( name, checked ) - %> - ${uni2posix} -
    -
    - Use this option if you need your datasets to be converted from uni to posix line endings. -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    - %if ldda_message: - - %else: - - %endif -
    -
    - This information will be displayed in the "Message" column for this dataset in the data library browser -
    -
    -
    - %if roles_select_list: -
    - -
    - ${roles_select_list.get_html()} -
    -
    - Multi-select list - hold the appropriate key while clicking to select multiple roles. More restrictions can be applied after the upload is complete. Selecting no roles makes a dataset public. -
    -
    -
    - %endif - %if widgets: - %for i, field in enumerate( widgets ): -
    - -
    - ${field[ 'widget' ].get_html()} -
    -
    - %if field[ 'helptext' ]: - ${field[ 'helptext' ] | h}
    - %endif - *Inherited template field -
    -
    -
    - %endfor - %endif -
    - -
    -
    -
    -
    - %elif upload_option == 'import_from_history': -
    -
    Active datasets in your current history (${ util.unicodify( history.name ) | h})
    -
    - %if history and history.active_datasets: -
    - - - - - <% - role_ids_selected = '' - if roles_select_list: - selected = roles_select_list.get_selected( return_value=True, multi=True ) - if selected: - role_ids_selected = ','.join( selected ) - %> - - %if replace_dataset not in [ None, 'None' ]: - -
    - You are currently selecting a new file to replace '${ util.unicodify( replace_dataset.name ) | h}'. -
    -
    - %endif - %for hda in history.visible_datasets: - <% encoded_id = trans.security.encode_id( hda.id ) %> -
    - - -
    - %endfor - %if widgets: - - %for i, field in enumerate( widgets ): -
    - -
    - ${field[ 'widget' ].get_html()} -
    -
    - %if field[ 'helptext' ]: - ${field[ 'helptext' ] | h}
    - %endif - *Inherited template field -
    -
    -
    - %endfor - %endif -
    - -
    -
    - %else: -

    Your current history is empty

    - %endif -
    -
    - %endif - - -<%def name="render_actions_on_multiple_items( actions_to_exclude=[] )"> - <% - is_admin = trans.user_is_admin() and cntrller=='library_admin' - can_delete = 'delete' not in actions_to_exclude - can_download = 'download' not in actions_to_exclude - can_import_to_histories = 'import_to_histories' not in actions_to_exclude - can_manage_permissions = 'manage_permissions' not in actions_to_exclude - can_move = 'move' not in actions_to_exclude - %> - - - - For selected datasets: - - - - - - diff --git a/templates/webapps/galaxy/library/common/folder_info.mako b/templates/webapps/galaxy/library/common/folder_info.mako deleted file mode 100644 index e28d6835bc06..000000000000 --- a/templates/webapps/galaxy/library/common/folder_info.mako +++ /dev/null @@ -1,61 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> - -<%def name="javascripts()"> - ${parent.javascripts()} - - -<% - from cgi import escape - folder_name = escape( str( folder.name ), quote=True ) - folder_description = escape( str( folder.description ), quote=True ) -%> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    Edit folder name and description
    -
    - %if ( trans.user_is_admin() and cntrller == 'library_admin' ) or trans.app.security_agent.can_modify_library_item( current_user_roles, folder ): -
    -
    - - -
    -
    -
    - - -
    -
    -
    - -
    -
    - %else: -
    - - ${folder_name} -
    -
    -
    - - ${folder_description} -
    -
    - %endif -
    -
    -%if widgets: - ${render_template_fields( cntrller=cntrller, item_type='folder', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, library_id=library_id, folder_id=trans.security.encode_id( folder.id ), info_association=info_association, inherited=inherited )} -%endif diff --git a/templates/webapps/galaxy/library/common/folder_permissions.mako b/templates/webapps/galaxy/library/common/folder_permissions.mako deleted file mode 100644 index eeddf72f12da..000000000000 --- a/templates/webapps/galaxy/library/common/folder_permissions.mako +++ /dev/null @@ -1,19 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/dataset/security_common.mako" import="render_permission_form" /> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -%if ( trans.user_is_admin() and cntrller in [ 'library_admin', 'requests_admin' ] ) or trans.app.security_agent.can_manage_library_item( current_user_roles, folder ): - ## LIBRARY_ACCESS is a special permission that is set only at the library level. - ${render_permission_form( folder, folder.name, h.url_for( controller='library_common', action='folder_permissions', cntrller=cntrller, id=trans.security.encode_id( folder.id ), library_id=library_id, show_deleted=show_deleted ), roles, do_not_render=[ 'LIBRARY_ACCESS' ] )} -%endif diff --git a/templates/webapps/galaxy/library/common/import_datasets_to_histories.mako b/templates/webapps/galaxy/library/common/import_datasets_to_histories.mako deleted file mode 100644 index d538c99c6ed4..000000000000 --- a/templates/webapps/galaxy/library/common/import_datasets_to_histories.mako +++ /dev/null @@ -1,104 +0,0 @@ -<%namespace file="/message.mako" import="render_msg" /> -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="javascripts" /> -<%def name="title()">Import library datasets to histories - -<%def name="javascripts()"> - ${parent.javascripts()} - - - -%if message: - ${render_msg( util.unicodify( message ), status )} -%endif - -Import library datasets into histories -

    -
    -
    -
    - %if source_lddas: - %for source_ldda in source_lddas: - <% - checked = "" - encoded_id = trans.security.encode_id( source_ldda.id ) - if source_ldda.id in ldda_ids: - checked = " checked='checked'" - %> -
    - - -
    - %endfor - %else: -
    This folder has no accessible library datasets.
    - %endif -
    -
    -
    -
    -
    Destination Histories:
    -
    -
    - -

    - Choose multiple histories -
    - - %if trans.get_user(): - <% - checked = "" - if "create_new_history" in target_history_ids: - checked = " checked='checked'" - %> -
    -
    — OR —
    -
    - - -
    - %endif -
    -
    -
    -
    - -
    -
    diff --git a/templates/webapps/galaxy/library/common/ldda_edit_info.mako b/templates/webapps/galaxy/library/common/ldda_edit_info.mako deleted file mode 100644 index eae198db1550..000000000000 --- a/templates/webapps/galaxy/library/common/ldda_edit_info.mako +++ /dev/null @@ -1,181 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> -<% from galaxy import util %> - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jquery.autocomplete")} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "autocomplete_tagging" )} - - -%if ldda == ldda.library_dataset.library_dataset_dataset_association: - This is the latest version of this library dataset -%else: - This is an expired version of this library dataset -%endif -

    - -

    - -%if message: - ${render_msg( message, status )} -%endif - -<%def name="datatype( ldda, file_formats )"> - - - -%if ( trans.user_is_admin() and cntrller=='library_admin' ) or trans.app.security_agent.can_modify_library_item( current_user_roles, ldda.library_dataset ): -
    -
    Edit attributes of ${util.unicodify( ldda.name ) | h}
    -
    -
    - -
    - - -
    -
    -
    - - -
    -
    -
    - - %if ldda.message: - - %else: - - %endif -
    - This information will be displayed in the library browser -
    -
    -
    - %for name, spec in ldda.metadata.spec.items(): - %if spec.visible: -
    - - ${ldda.metadata.get_html_by_name( name, trans=trans )} -
    -
    - %endif - %endfor -
    - -
    -
    -
    -
    - - -
    - This will inspect the dataset and attempt to correct the above column values if they are not accurate. -
    -
    -
    -
    -
    -

    -

    -
    Change data type
    -
    - %if ldda.datatype.allow_datatype_change: -
    -
    - - - ${datatype( ldda, file_formats )} -
    - This will change the datatype of the existing dataset - but not modify its contents. Use this if Galaxy - has incorrectly guessed the type of your dataset. -
    -
    -
    -
    - -
    -
    - %else: -
    -
    ${_('Changing the datatype of this dataset is not allowed.')}
    -
    - %endif -
    -
    -
    -
    Change Extended Metadata
    -
    -
    -
    - -
    - -
    - %if ldda.extended_metadata: - - %else: - - %endif -
    -
    -
    - -
    -
    -
    -
    -

    -%else: -

    -
    View information about ${util.unicodify( ldda.name ) | h}
    -
    -
    - - ${util.unicodify( ldda.name ) | h} -
    -
    -
    - - ${util.unicodify( ldda.info ) | h} -
    -
    -
    - - ${ldda.ext | h} -
    -
    - %for name, spec in ldda.metadata.spec.items(): - %if spec.visible: -
    - - ${ldda.metadata.get( name ) | h} -
    -
    - %endif - %endfor -
    -
    -%endif -%if widgets: - ${render_template_fields( cntrller=cntrller, item_type='ldda', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, library_id=library_id, folder_id=trans.security.encode_id( ldda.library_dataset.folder.id ), ldda_id=trans.security.encode_id( ldda.id ), info_association=info_association, inherited=inherited )} -%endif diff --git a/templates/webapps/galaxy/library/common/ldda_info.mako b/templates/webapps/galaxy/library/common/ldda_info.mako deleted file mode 100644 index 87a515e4223e..000000000000 --- a/templates/webapps/galaxy/library/common/ldda_info.mako +++ /dev/null @@ -1,311 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> -<% - from galaxy import util - from galaxy.webapps.galaxy.controllers.library_common import branch_deleted, get_containing_library_from_library_dataset - from galaxy.web.framework.helpers import time_ago - - if ldda == ldda.library_dataset.library_dataset_dataset_association: - current_version = True - else: - current_version = False - if ldda.user: - uploaded_by = ldda.user.email - else: - uploaded_by = 'anonymous' - if trans.user_is_admin() and cntrller == 'library_admin': - can_modify = can_manage = True - elif cntrller in [ 'library', 'requests' ]: - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, ldda.library_dataset ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, ldda.library_dataset ) - else: - can_modify = can_manage = False - form_type = trans.model.FormDefinition.types.LIBRARY_INFO_TEMPLATE -%> - -<%def name="javascripts()"> - ${parent.javascripts()} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - - - -%if current_version: - This is the latest version of this library dataset -%else: - This is an expired version of this library dataset -%endif -

    - -

    - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    - Information about - %if not library.deleted and not branch_deleted( ldda.library_dataset.folder ) and not ldda.library_dataset.deleted: -
    - %if can_modify: - Edit information - %if not info_association: - Use template - %else: - Edit template - Unuse template - %endif - %endif - %if can_manage: - Edit permissions - %endif - %if current_version and can_modify: - Upload a new version of this dataset - %endif - %if ldda.has_data(): - Import this dataset into selected histories - Download this dataset - %endif - %if show_associated_hdas_and_lddas: - Hide items using this dataset's disk file - %else: - Show items using this dataset's disk file - %endif -
    - %endif -
    -
    - %if ldda.message: -
    - -
    ${ldda.message | h}
    -
    -
    - %endif -
    - - ${uploaded_by | h} -
    -
    -
    - - ${util.unicodify(ldda.create_time.strftime( trans.app.config.pretty_datetime_format )) | h} -
    -
    -
    - - ${ldda.get_size( nice_size=True ) | h} -
    -
    - %if ldda.dataset.uuid: -
    - - ${ldda.dataset.uuid | h} -
    -
    - %endif - %if ldda.tool_version: -
    - - ${ldda.tool_version | h} -
    -
    - %endif -
    - - ${ldda.ext | h} -
    -
    -
    - - ${ldda.dbkey | h} -
    -
    -
    - - ${util.unicodify( ldda.info ) | h} -
    -
    - %if ldda.creating_job_associations: - <% job = ldda.creating_job_associations[0].job %> - %if job.stdout and job.stdout.strip() != '': -
    - -
    ${job.stdout | h}
    -
    -
    - %endif - %if job.stderr and job.stderr.strip() != '': -
    - -
    ${job.stderr | h}
    -
    -
    - %endif - %endif -
    -
    ${ldda.blurb | h}
    -
    - ## We want to display all metadata item here, whether marked visible or not since they are all pretty useful - %for name, spec in ldda.metadata.spec.items(): -
    - - <% - metadata_val = ldda.metadata.get( name ) - if isinstance( metadata_val, trans.model.MetadataFile ): - metadata_val = metadata_val.file_name - elif isinstance( metadata_val, list ): - # Make sure list items are strings - metadata_val = [ str( item ) for item in metadata_val ] - metadata_val = ', '.join( metadata_val ) - %> - ${metadata_val | h} -
    -
    - %endfor - %if ldda.peek != "no peek": -
    -
    - -
    ${util.unicodify( ldda.display_peek() )}
    -
    -
    - %endif - %if ldda.extended_metadata: -
    - -
    ${util.pretty_print_json(ldda.extended_metadata.data) | h}
    -
    -
    - %endif - %if trans.user_is_admin() and cntrller == 'library_admin': -
    - - ${ldda.file_name | h} -
    -
    - %endif -
    -
    -%if widgets: - ${render_template_fields( cntrller=cntrller, item_type='ldda', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, library_id=library_id, folder_id=trans.security.encode_id( ldda.library_dataset.folder.id ), ldda_id=trans.security.encode_id( ldda.id ), info_association=info_association, inherited=inherited, editable=False )} -%endif -%if show_associated_hdas_and_lddas: - %if associated_hdas: -

    - Active (undeleted) history items that use this library dataset's disk file -

    - - - - - - - - - - %for hda in associated_hdas: - - - - - - - %endfor -
    HistoryHistory ItemLast UpdatedUser
    - %if hda.history: - ${hda.history.get_display_name() | h} - %else: - no history - %endif - ${hda.get_display_name() | h}${time_ago( hda.update_time ) | h} - %if hda.history and hda.history.user: - ${hda.history.user.email | h} - %else: - anonymous - %endif -
    -
    -

    - %endif - %if associated_lddas: -

    - Other active (undeleted) library datasets that use this library dataset's disk file -

    - - - - - - - - - - - %for copied_ldda in associated_lddas: - <% containing_library = get_containing_library_from_library_dataset( trans, copied_ldda.library_dataset ) %> - - - - - - - - %endfor -
    LibraryLibrary FolderLibrary DatasetLast UpdatedUser
    - <% - if containing_library: - library_display_name = containing_library.get_display_name() - else: - library_display_name = 'no library' - %> - %if containing_library: - ${library_display_name | h} - %else: - ${library_display_name | h} - %endif - - <% - library_dataset = copied_ldda.library_dataset - folder = library_dataset.folder - folder_display_name = folder.get_display_name() - if folder_display_name == library_display_name: - folder_display_name = 'library root' - %> - ${folder_display_name | h} - ${copied_ldda.library_dataset.folder.get_display_name() | h} - ${copied_ldda.get_display_name() | h}${time_ago( copied_ldda.update_time ) | h} - %if copied_ldda.user: - ${copied_ldda.user.email | h} - %else: - anonymous - %endif -
    -
    -

    - %endif -%endif -%if current_version: - <% expired_lddas = [ e_ldda for e_ldda in ldda.library_dataset.expired_datasets ] %> - %if expired_lddas: -
    -

    Expired versions of ${util.unicodify( ldda.name ) | h}
    - %for expired_ldda in expired_lddas: - - %endfor - %endif -%endif diff --git a/templates/webapps/galaxy/library/common/ldda_permissions.mako b/templates/webapps/galaxy/library/common/ldda_permissions.mako deleted file mode 100644 index c1b36f214149..000000000000 --- a/templates/webapps/galaxy/library/common/ldda_permissions.mako +++ /dev/null @@ -1,70 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/dataset/security_common.mako" import="render_permission_form" /> - -<%def name="stylesheets()"> - ${parent.stylesheets()} - - - -<% - if len( lddas ) > 1: - name_str = '%d selected datasets' % len( lddas ) - else: - ldda = lddas[0] - name_str = util.unicodify( ldda.name ) -%> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -%if len( lddas ) > 1: -
    Manage the following selected datasets
    -

    - - %for ldd_assoc in lddas: - - - - - %endfor -
    -
    - ${ldd_assoc.name | h} - -
    - -
    - %if ldd_assoc == ldd_assoc.library_dataset.library_dataset_dataset_association: - This is the latest version of this library dataset - %else: - This is an expired version of this library dataset - %endif -
    -

    -%else: - %if ldda == ldda.library_dataset.library_dataset_dataset_association: - This is the latest version of this library dataset - %else: - This is an expired version of this library dataset - %endif -

    -%endif - -<% ldda_ids = ",".join( [ trans.security.encode_id( d.id ) for d in lddas ] ) %> -## LIBRARY_ACCESS is a special permission that is set only at the library level, -## and DATASET_MANAGE_PERMISSIONS is inherited to the dataset from the ldda. -${render_permission_form( lddas[0], name_str, h.url_for( controller='library_common', action='ldda_permissions', cntrller=cntrller, library_id=library_id, folder_id=trans.security.encode_id( lddas[0].library_dataset.folder.id ), id=ldda_ids, show_deleted=show_deleted ), roles, do_not_render=[ 'LIBRARY_ACCESS', 'DATASET_MANAGE_PERMISSIONS' ] )} diff --git a/templates/webapps/galaxy/library/common/library_dataset_info.mako b/templates/webapps/galaxy/library/common/library_dataset_info.mako deleted file mode 100644 index 25a7ed699411..000000000000 --- a/templates/webapps/galaxy/library/common/library_dataset_info.mako +++ /dev/null @@ -1,70 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> - -<%def name="javascripts()"> - ${parent.javascripts()} - - -%if library_dataset == library_dataset.library_dataset_dataset_association.library_dataset: - This is the latest version of this library dataset -%else: - This is an expired version of this library dataset -%endif -

    - -

    - -%if message: - ${render_msg( message, status )} -%endif - -%if ( trans.user_is_admin() and cntrller=='library_admin' ) or trans.app.security_agent.can_modify_library_item( current_user_roles, library_dataset ): -
    -
    Edit attributes of ${util.unicodify( library_dataset.name ) | h}
    -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -%else: -
    -
    View information about ${util.unicodify( library_dataset.name ) | h}
    -
    -
    - Name: ${util.unicodify( library_dataset.name ) | h} -
    - Info: ${util.unicodify( library_dataset.info ) | h} -
    - Dataset Versions: -
    -
    -
    -
    -
    -%endif - -%if widgets: - ${render_template_fields( cntrller, item_type='library_dataset', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, library_id=library_id, info_association=None, inherited=False, editable=False )} -%endif diff --git a/templates/webapps/galaxy/library/common/library_dataset_permissions.mako b/templates/webapps/galaxy/library/common/library_dataset_permissions.mako deleted file mode 100644 index b0928df7a2c9..000000000000 --- a/templates/webapps/galaxy/library/common/library_dataset_permissions.mako +++ /dev/null @@ -1,25 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/dataset/security_common.mako" import="render_permission_form" />> - -%if library_dataset == library_dataset.library_dataset_dataset_association.library_dataset: - This is the latest version of this library dataset -%else: - This is an expired version of this library dataset -%endif -

    - -

    - -%if message: - ${render_msg( message, status )} -%endif - -%if ( trans.user_is_admin() and cntrller == 'library_admin' ) or trans.app.security_agent.can_manage_library_item( current_user_roles, library_dataset ): - ## LIBRARY_ACCESS is a special permission that is set only at the library level. - ${render_permission_form( library_dataset, library_dataset.name, h.url_for( controller='library_common', action='library_dataset_permissions', cntrller=cntrller, id=trans.security.encode_id( library_dataset.id ), library_id=library_id, show_deleted=show_deleted ), roles, do_not_render=[ 'LIBRARY_ACCESS' ] )} -%endif diff --git a/templates/webapps/galaxy/library/common/library_dataset_search_results.mako b/templates/webapps/galaxy/library/common/library_dataset_search_results.mako deleted file mode 100644 index 69df8863e847..000000000000 --- a/templates/webapps/galaxy/library/common/library_dataset_search_results.mako +++ /dev/null @@ -1,137 +0,0 @@ -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/library/common/browse_library.mako" import="render_dataset" /> -<%namespace file="/library/common/common.mako" import="render_actions_on_multiple_items" /> -<%namespace file="/library/common/common.mako" import="render_compression_types_help" /> -<%namespace file="/library/common/common.mako" import="common_javascripts" /> - -<%! - def inherit(context): - if context.get('use_panels'): - return '/webapps/galaxy/base_panels.mako' - else: - return '/base.mako' -%> -<%inherit file="${inherit(context)}"/> - -<%def name="init()"> -<% - self.has_left_panel=False - self.has_right_panel=False - self.message_box_visible=False - self.active_view="user" - self.overlay_visible=False -%> - - -## -## Override methods from base.mako and base_panels.mako -## -<%def name="center_panel()"> -
    -
    - ${render_content()} -
    -
    - - -## Render the grid's basic elements. Each of these elements can be subclassed. -<%def name="body()"> - ${render_content()} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "library" )} - - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jstorage")} - ${common_javascripts()} - - -<%def name="render_searched_components()"> -
      -
    • name
    • -
    • info
    • -
    • dbkey (genome build)
    • -
    • message
    • - %if trans.app.config.enable_lucene_library_search: -
    • disk file content
    • - %endif -
    -
    - - -<%def name="render_content()"> - <% - from galaxy import util - from galaxy.webapps.galaxy.controllers.library_common import branch_deleted - from time import strftime - - class RowCounter( object ): - def __init__( self ): - self.count = 0 - def increment( self ): - self.count += 1 - def __str__( self ): - return str( self.count ) - %> - -

    -
    - - - -

    Results for search on “${search_term | h}”

    - - %if message: - ${render_msg( message, status )} - %endif - - %if lddas: -

    The string "${search_term | h}" was found in at least one of the following information components of the displayed library datasets.

    - ${render_searched_components()} -
    - - - - - - - - - - - - <% - tracked_datasets = {} - row_counter = RowCounter() - my_row = row_counter.count - %> - %for ldda in lddas: - <% - library_dataset = ldda.library_dataset - folder = library_dataset.folder - library = folder.parent_library - %> - ${render_dataset( cntrller, ldda, library_dataset, False, library, folder, 0, my_row, row_counter, tracked_datasets, show_deleted=False )} - <% - my_row = row_counter.count - row_counter.increment() - %> - %endfor - ${render_actions_on_multiple_items( actions_to_exclude=[ 'manage_permissions' ] )} -
    - - Name - MessageUploaded ByDateFile Size
    -
    - ${render_compression_types_help( comptypes )} - %elif status != 'error': -

    The string "${search_term | h}" was not found in any of the following information components for any library datasets that you can access.

    - ${render_searched_components()} - %endif - diff --git a/templates/webapps/galaxy/library/common/library_info.mako b/templates/webapps/galaxy/library/common/library_info.mako deleted file mode 100644 index 2da77909b903..000000000000 --- a/templates/webapps/galaxy/library/common/library_info.mako +++ /dev/null @@ -1,116 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/common/template_common.mako" import="render_template_fields" /> - -<%def name="javascripts()"> - ${parent.javascripts()} - - -<% - from galaxy import util - if trans.user_is_admin() and cntrller == 'library_admin': - can_add = can_modify = can_manage = True - elif cntrller in [ 'library', 'requests' ]: - can_add = trans.app.security_agent.can_add_library_item( current_user_roles, library ) - can_modify = trans.app.security_agent.can_modify_library_item( current_user_roles, library ) - can_manage = trans.app.security_agent.can_manage_library_item( current_user_roles, library ) - else: - can_add = can_modify = can_manage = False - library_name = util.unicodify( library.name ) - library_description = util.unicodify(library.description) - library_synopsis = util.unicodify(library.synopsis) -%> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    - - %if can_add or can_modify or can_manage: -
    - %if not library.deleted: - %if can_add and not library.info_association: - Use template - %endif - %if can_manage: - Edit permissions - %endif - %if can_modify: - Delete this data library - %endif - %elif can_modify and not library.purged: - Undelete this data library - %elif library.purged: - This data library has been purged - %endif -
    - %endif -
    -
    - %if not library.deleted and can_modify: -
    -
    - -
    - -
    -
    -
    -
    - -
    - -
    -
    - Displayed when browsing all libraries -
    -
    -
    -
    - -
    - -
    -
    - Displayed when browsing this library -
    -
    -
    -
    - -
    -
    - %else: -
    - - ${library_name | h} -
    -
    -
    - - ${library_description | h} -
    -
    -
    - - ${library_synopsis | h} -
    -
    - %endif -
    -
    - -%if widgets: - ${render_template_fields( cntrller=cntrller, item_type='library', widgets=widgets, widget_fields_have_contents=widget_fields_have_contents, library_id=trans.security.encode_id( library.id ), info_association=info_association, inherited=inherited, editable=not( library.deleted ) )} -%endif diff --git a/templates/webapps/galaxy/library/common/library_item_info.mako b/templates/webapps/galaxy/library/common/library_item_info.mako deleted file mode 100644 index 1c2a25f45eff..000000000000 --- a/templates/webapps/galaxy/library/common/library_item_info.mako +++ /dev/null @@ -1,15 +0,0 @@ -<%def name="render_library_item_info( ldda )"> - %if ldda.state == 'error': -
    Job error (click name for more info)
    - %elif ldda.state == 'queued': -
    This job is queued
    - %elif ldda.state == 'running': -
    This job is running
    - %elif ldda.state == 'upload': -
    This dataset is uploading
    - %else: - ${ldda.message | h} - %endif - - -${render_library_item_info( ldda )} diff --git a/templates/webapps/galaxy/library/common/library_permissions.mako b/templates/webapps/galaxy/library/common/library_permissions.mako deleted file mode 100644 index 9f18fd251cc6..000000000000 --- a/templates/webapps/galaxy/library/common/library_permissions.mako +++ /dev/null @@ -1,18 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/dataset/security_common.mako" import="render_permission_form" /> - -

    - - -%if message: - ${render_msg( message, status )} -%endif - -%if ( trans.user_is_admin() and cntrller == 'library_admin' ) or trans.app.security_agent.can_manage_library_item( current_user_roles, library ): - ${render_permission_form( library, library.name, h.url_for( controller='library_common', action='library_permissions', cntrller=cntrller, id=trans.security.encode_id( library.id ), show_deleted=show_deleted ), roles, do_not_render=[], all_roles=all_roles )} -%endif diff --git a/templates/webapps/galaxy/library/common/move_library_item.mako b/templates/webapps/galaxy/library/common/move_library_item.mako deleted file mode 100644 index cfb746d99571..000000000000 --- a/templates/webapps/galaxy/library/common/move_library_item.mako +++ /dev/null @@ -1,106 +0,0 @@ -<%namespace file="/message.mako" import="render_msg" /> -<%inherit file="/base.mako"/> - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jquery.autocomplete")} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "autocomplete_tagging" )} - - -<% - if source_library: - source_library_id = trans.security.encode_id( source_library.id ) - else: - source_library_id = '' - if target_library: - target_library_id = trans.security.encode_id( target_library.id ) - else: - target_library_id = '' -%> - -%if message: - ${render_msg( message, status )} -%endif - -Move data library items -

    -
    -
    -
    - - %if target_library: - - %endif - %if item_type == 'ldda': - %for move_ldda in move_lddas: - <% - checked = "" - encoded_id = trans.security.encode_id( move_ldda.id ) - if move_ldda.id in move_ldda_ids: - checked = " checked='checked'" - %> -
    - - -
    - %endfor - %elif item_type == 'folder': -
    - <% encoded_id = trans.security.encode_id( move_folder.id ) %> - - -
    - %endif -
    -
    -
    -
    - %if target_library: -
    Select folder within data library: ${h.truncate( target_library.name, 30 ) | h}
    - %else: -
    Select a data library
    - %endif -
    - %if target_library: -
    - %if len( target_folder_id_select_field.options ) >= 1: - ${target_folder_id_select_field.get_html()} - %else: - %if source_library and source_library.id == target_library.id: - You are not authorized to move items within the source data library - %else: - You are not authorized to move items into the selected data library - %endif - %endif - %if source_library: -

    - %if target_library.id == source_library.id: - Choose another data library - %else: - Choose source data library - %endif - %elif not target_library_folders: -

    - Choose another data library - %endif -
    - %else: -
    - %if len( target_library_id_select_field.options ) > 1: - ${target_library_id_select_field.get_html()} - %else: - You are not authorized to move items to any data libraries - %endif -
    - %endif -
    -
    -
    -
    - -
    -
    diff --git a/templates/webapps/galaxy/library/common/new_folder.mako b/templates/webapps/galaxy/library/common/new_folder.mako deleted file mode 100644 index e17b83ef819c..000000000000 --- a/templates/webapps/galaxy/library/common/new_folder.mako +++ /dev/null @@ -1,38 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> - -
    - - -%if message: - ${render_msg( message, status )} -%endif - -
    -
    Create a new folder
    -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    diff --git a/templates/webapps/galaxy/library/common/upload.mako b/templates/webapps/galaxy/library/common/upload.mako deleted file mode 100644 index 08857c36e8b0..000000000000 --- a/templates/webapps/galaxy/library/common/upload.mako +++ /dev/null @@ -1,36 +0,0 @@ -<%inherit file="/base.mako"/> -<%namespace file="/message.mako" import="render_msg" /> -<%namespace file="/library/common/common.mako" import="render_upload_form" /> - -<% import os, os.path %> - -<% - if replace_dataset not in [ None, 'None' ]: - replace_id = trans.security.encode_id( replace_dataset.id ) - else: - replace_id = 'None' -%> - -<%def name="javascripts()"> - ${parent.javascripts()} - ${h.js("libs/jquery/jquery.autocomplete")} - - -<%def name="stylesheets()"> - ${parent.stylesheets()} - ${h.css( "autocomplete_tagging" )} - - -Upload files to a data library -

    - - -%if message: - ${render_msg( message, status )} -%endif - -${render_upload_form( cntrller, upload_option, action, library_id, folder_id, replace_dataset, file_formats, dbkeys, space_to_tab, link_data_only, widgets, roles_select_list, history, show_deleted )} diff --git a/templates/webapps/galaxy/library/grid.mako b/templates/webapps/galaxy/library/grid.mako deleted file mode 100644 index 6a41b688c5ef..000000000000 --- a/templates/webapps/galaxy/library/grid.mako +++ /dev/null @@ -1 +0,0 @@ -<%inherit file="/grid_base.mako"/> diff --git a/templates/webapps/galaxy/library/index.mako b/templates/webapps/galaxy/library/index.mako deleted file mode 100644 index 5482845b708d..000000000000 --- a/templates/webapps/galaxy/library/index.mako +++ /dev/null @@ -1,15 +0,0 @@ -<%inherit file="/webapps/galaxy/base_panels.mako"/> - -<%def name="init()"> -<% - self.has_left_panel=False - self.has_right_panel=False - self.active_view="shared" -%> - - -<%def name="center_panel()"> - - - -